Consider the following example

bundle agent createfolder {

files:
            "/home/nicolas/foo/."
                create => "true",
                comment => "Creating directory",
                classes => if_else("foldercreated", "failure");

commands:
        foldercreated::
                "/bin/echo \"Folder created or present\"";

        failure::
                "/bin/echo \"Failure\"";

}

body classes if_else(if, else) {
        promise_repaired => {"foldercreated"};
        promise_kept => {"foldercreated"};
        repair_failed => {"$(else)"};
}



It should create the folder foo if it doesn't exist, and set the class 
foldercreated. But it doesn't (latest trunk build and cf3.0.2)

Output if folder doesn't exist :
cf3 Verifying SQL table promises is only available with Cfengine Nova or 
above
cf3
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3 Skipping whole next promise (/bin/echo "Folder created or present"), 
as context foldercreated is not relevant
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3 Skipping whole next promise (/bin/echo "Failure"), as context 
failure is not relevant
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3
cf3    =========================================================
cf3    files in bundle createfolder (1)
cf3    =========================================================
cf3
cf3 Verifying SQL table promises is only available with Cfengine Nova or 
above
cf3
cf3     .........................................................
cf3     Promise handle:
cf3     Promise made by: /home/nicolas/foo/.
cf3
cf3     Comment:  Creating directory
cf3     .........................................................
cf3
cf3  -> Using literal pathtype for /home/nicolas/foo/.
cf3
cf3      +  Private classes augmented:
cf3
cf3      -  Private classes diminished:
cf3
cf3
cf3
cf3    =========================================================
cf3    commands in bundle createfolder (2)
cf3    =========================================================
cf3
cf3 Verifying SQL table promises is only available with Cfengine Nova or 
above
cf3
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3 Skipping whole next promise (/bin/echo "Folder created or present"), 
as context foldercreated is not relevant
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3 Skipping whole next promise (/bin/echo "Failure"), as context 
failure is not relevant
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .




Output if folder exists:

cf3 Verifying SQL table promises is only available with Cfengine Nova or 
above
cf3
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3 Skipping whole next promise (/bin/echo "Folder created or present"), 
as context foldercreated is not relevant
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3 Skipping whole next promise (/bin/echo "Failure"), as context 
failure is not relevant
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3
cf3    =========================================================
cf3    files in bundle createfolder (1)
cf3    =========================================================
cf3
cf3 Verifying SQL table promises is only available with Cfengine Nova or 
above
cf3
cf3     .........................................................
cf3     Promise handle:
cf3     Promise made by: /home/nicolas/foo/.
cf3
cf3     Comment:  Creating directory
cf3     .........................................................
cf3
cf3  -> Using literal pathtype for /home/nicolas/foo/.
cf3  -> File /home/nicolas/foo/. exists as promised
cf3  ?> defining promise result class foldercreated
cf3  -> Handling file existence constraints on /home/nicolas/foo/.
cf3
cf3      +  Private classes augmented:
cf3
cf3      -  Private classes diminished:
cf3
cf3
cf3
cf3    =========================================================
cf3    commands in bundle createfolder (2)
cf3    =========================================================
cf3
cf3 Verifying SQL table promises is only available with Cfengine Nova or 
above
cf3  -> Promiser string contains a valid executable (/bin/echo) - ok
cf3
cf3     .........................................................
cf3     Promise handle:
cf3     Promise made by: /bin/echo "Folder created or present"
cf3     .........................................................
cf3
cf3  -> Executing '/bin/echo "Folder created or present"' 
...(timeout=0,owner=-1,group=-1)
cf3  -> (Setting umask to 77)
cf3 Q: ".../bin/echo "Fold": Folder created or present
cf3  -> Finished script - succeeded /bin/echo "Folder created or present"
cf3 I: Last 1 QUOTEed lines were generated by promiser "/bin/echo 
"Folder created or present""
cf3 I: Report relates to a promise with handle ""
cf3 I: Made in version 'not specified' of './createfolder.cf' near line 18
cf3  -> Completed execution of /bin/echo "Folder created or present"
cf3
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cf3 Skipping whole next promise (/bin/echo "Failure"), as context 
failure is not relevant
cf3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .




Using "/home/nicolas/foo/" as a temporary workaround: it failed for it 
is not a file, but a folder, and at the next iteration the folder is 
there, so the promise is kept

Regards,
Nicolas
_______________________________________________
Bug-cfengine mailing list
Bug-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/bug-cfengine

Reply via email to