Aleksey,
I don't think that {{{ files: "/tmp/filename.txt"; }}} means that it is
promised to *exist* since one of the attributes is delete, which means that the
file promises to *not* exist.
The way I read the files: promisetype for agent is that the promiser only
promises to be a valid path name, and it's up to the attributes (create, copy,
link, delete, etc) which determine what action will be taken on the promiser,
or in other words the promiser (/tmp/filename.txt) promises to (create/delete).
In your example the promiser is making an explicit promise of nothing, rather
than promising *something*.
Granted, I've been using cfengine3 less than two weeks, but this how I
understand it.
--
Brian
On Feb 29, 2012, at 2:01 PM, Aleksey Tsalolikhin wrote:
> Using CFEngine 3.2.1, I've observed that the promise_kept classes
> attribute is not getting set on files type promises when there are no
> attributes. Either that, I don't misunderstand files type promises,
> in which case I'd like to clear that up, please.
>
>
> Doesn't {{{ files: "/tmp/filename"; }}} mean that /tmp/filename
> promises to continue to exist? (But not to be auto-created if it does
> not exist?)
>
> Based on that assumption,I tried to chain two promises together, to
> install the Fedora RPM that provides the YUM configuration to enable
> the EPEL (Extra Packages for Enterprise Linux) repository, but
> apparently CFEngine does not consider it a promise_kept if the file is
> already there:
>
>
> ### start test.cf ###
>
> body common control {
>
> inputs => { "/var/cfengine/inputs/cfengine_stdlib.cf" };
> }
>
> bundle agent epel_repo_is_installed {
>
> files:
>
> "/etc/yum.repos.d/epel.repo"
>
> classes => if_ok("epel_repo_is_installed");
>
>
> reports:
>
> !epel_repo_is_installed::
>
> "EPEL RPM is not installed. We need to install it.";
>
> }
>
> ### end test.cf ###
>
>
> # ls /etc/yum.repos.d/epel.repo
> /etc/yum.repos.d/epel.repo
> # cf-agent -f ./test.cf -b epel_repo_is_installed -K
> R: EPEL RPM is not installed. We need to install it.
> #
>
> I've replaced the files type promise with
>
> {{{
>
> classes:
>
> "epel_repo_is_installed"
>
> expression => fileexists("/etc/yum.repos.d/epel.repo");
>
> }}}
>
> which has the advantage of expressing my intention very clearly but
> I'd like to understand why the files type promise did not behave as I
> expected.
>
> Do I misunderstand something, or am I running into a corner case or
> unexpected use of the language?
>
> Best,
> -at
> _______________________________________________
> Help-cfengine mailing list
> [email protected]
> https://cfengine.org/mailman/listinfo/help-cfengine
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Help-cfengine mailing list [email protected] https://cfengine.org/mailman/listinfo/help-cfengine
