Yes this is possible. See

promise_*
cancel_*

http://www.cfengine.org/manuals/cf3-reference.html#classes-in-_002a
http://www.cfengine.org/manuals/CfengineStdLibrary.html#body-classes-if_005frepaired


Jesse Becker wrote:
> Is it possible to assert (or de-assert) a class based on a package
> promise?  What I really want to do is check to see if a package is
> already installed, but not duplicate work by calling both a packages:
> action, and second returnszero() call.
> 
> For example, I have this (and it works):
> 
> <------------snip-------------->
> bundle agent mpt {
> 
> vars:
>      'mpt_packages' slist => {
>          'mpt-status',
>      };
> 
> classes:
>      any::
>          "has_mpt_controller" expression => returnszero('/sbin/lspci | 
> /bin/grep -q Fusion-MPT', 'useshell');
> 
>      has_mpt_controller::
>          "has_mptctl"     expression => isplain("/dev/mptctl");
>          "has_mpt_status" expression => returnszero("/bin/rpm -q --quiet 
> mpt-status",'noshell');
> 
> 
> commands:
>      has_mpt_controller.!has_mptctl::
>          "/sbin/modprobe mptctl" contain => cmdnoshell;
> 
>       has_mpt_controller.has_mpt_status::
>               "/usr/local/adm/bin/mpt_status_wrapper.sh" contain => 
> cmdnoshell;
> 
> packages:
>      has_mpt_controller::
>          "${fileserver_packages}"
>              package_policy        => "add",
>              package_method        => yum,
>              package_architectures => { "x86_64" };
> }
> <------------snip-------------->
> 
> 
> At issue is that there are two separate checks for the 'mpt_status'
> package.  One happens in packages:, the other in classes:.  What I'd
> like, sort of, is something like this:
> 
>    packages:
>      has_mpt_controller::
>          "${fileserver_packages}"
>              package_policy        => "add",
>              package_method        => yum,
>              package_architectures => { "x86_64" },
>              classes               => 
> is_okay("package_installed_${fileserver_packages}");
>                       
> This would define a new class for each element of the
> ${fileserver_packages} list.
> 
> Am I completely missing the ability to do this somewhere already?
> 
> 

-- 
Mark Burgess

-------------------------------------------------
Professor of Network and System Administration
Oslo University College, Norway

Personal Web: http://www.iu.hio.no/~mark
Office Telf : +47 22453272
-------------------------------------------------
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to