Try this:

 files:
   (!cdev_null|cbind9_devs_null_repaired)
    "${cbind_dir}/dev/null"
       comment => "Fix null device permission",
       perms => mog("666", "root", "root"),
       create => "false";

   (!cdev_random|cbind9_devs_random_repaired)
    "${cbind_dir}/dev/random"
       comment => "Fix random device permission",
       perms => mog("666", "root", "root"),
       create => "false";

That is, run this promise if the class cdev_null is NOT set (i.e., the files 
exist) or if the class cbind9_devs_null_repaired IS set (i.e., it was just 
created).

-- 
Brian


On Aug 29, 2012, at 5:28 AM, no-re...@cfengine.com wrote:

> Forum: CFEngine Help
> Subject: Normal ordering, files and commands
> Author: stchesmeli
> Link to topic: https://cfengine.com/forum/read.php?3,27135,27135#msg-27135
> 
> Hi all :)
> 
> I'm writing a bundle to manage chrooted bind9 configuration.
> I need to create null and random device inside the chroot, with 666 
> permission. 
> If I am not mistaken, there is no file directive for creating device, so i 
> must use commands directive to execute "mknod". 
> But i want to ensure that permission are always right, so i use a file 
> directive instead of use "-m 666" option with mknod
> 
> So, here is my code:
> 
> 
> 
> bundle agent config_bind9
> {
>   vars:
>       "cbind_dir"  string => "/DATA/chroot_named";
>       "cbind_user" string => "bind";
>       "mknod" string => "/bin/mknod";
>       "chmod" string => "/bin/chmod";
> 
>   classes:
>      "cdev_null"    not => fileexists ("${cbind_dir}/dev/null");          # 
> Test if null device exist
>      "cdev_random"  not => fileexists ("${cbind_dir}/dev/random");  # Test if 
> random device exist
> 
>   files:
>      "${cbind_dir}/dev/null"
>         comment => "Fix null device permission",
>         perms => mog("666", "root", "root"),
>         create => "false";
> 
>      "${cbind_dir}/dev/random"
>         comment => "Fix random device permission",
>         perms => mog("666", "root", "root"),
>         create => "false";
> 
> commands:
>        "${mknod} ${cbind_dir}/dev/null c 1 3"
>           classes =>  if_repaired("cbind9_devs_null_repaired"),
>           ifvarclass => "cdev_null";
>        "${mknod} ${cbind_dir}/dev/random c 1 8"
>           classes =>  if_repaired("cbind9_devs_random_repaired"),
>           ifvarclass => "cdev_random";
> 
> 
> 
> What i was thinking:
> With normal ordering and the 3 passes:
> 
> 1 pass:
> files don't exist, cdev_* classes are true, files permission are not fixed 
> (because of create => "false") and commands are executed (mknod ....) because 
> cdev_* classes are true
> 
> 2 pass:
> files now exist (first pass has created them with mknod commands), classes 
> cdev_* are false, permission are fixed by file directive, commands are not 
> executed because cdev_* classes are false
> 
> 3 pass: 
> files still exist, classes cdev_* are still false, permission are not fixed 
> because 2and pass has already fixed them, commands are not executed because 
> cdev_* classes are false
> 
> But i fact that doesn't work.
> what is really done is:
> 1 pass: 
> files don't exist, cdev_* classes are true, files permission are not fixed 
> (because of create => "false") and commands are executed (mknod ....) because 
> cdev_* classes are true
> 
> 2 pass: nothing
> 
> 3 pass: nothing
> 
> I don't understand why files permission are not corrected at the second pass ?
> 
> _______________________________________________
> Help-cfengine mailing list
> Help-cfengine@cfengine.org
> https://cfengine.org/mailman/listinfo/help-cfengine

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to