Hi,
I have a script that produces an output file with a known file pattern,
but the precise output filename is not predictable. I would like to
ensure the output file is there, and if not run the script to produce
it. Unfortunately, it seems that neither fileexists() nor file promises
allow metacharacters to specify patterns. What I would like to do,
ideally, would be something like this (which does not work):
classes:
"fileexists" expression => fileexists("/tmp/runfile.*");
commands:
!fileexists:
"${cmd}
classes => if_ok("cmdran");
What I have come up with so far involves using a flag file with a fixed
filename, that gets created after the command is run, then I can test
for existence of the flag file. This works, but seems inelegant and
breaks easily due to the dependance on a second, unrelated file. Below
is my example file, which works (I have replaced my script with mktemp
to make it self-contained).
I am new to cfengine, using community 3.0.3. Thanks for any ideas.
--Diego
body common control
{
bundlesequence => { "run" };
}
##################################################
bundle agent run
{
vars:
"flagfile" string => "/tmp/.done_run";
"cmd" string => "/bin/mktemp /tmp/runfile.XXXXXXXXXXXX";
classes:
"flagexists" expression => fileexists(${flagfile});
commands:
!flagexists::
"${cmd}"
classes => if_ok("cmdran");
files:
cmdran::
"${flagfile}"
create => true;
reports:
cmdran::
"Command ${cmd} ran successfully";
flagexists::
"Flag file ${flagfile} already exists, command not running";
}
# if_ok copied from cfengine_stdlib.cf, to make example self-contained
body classes if_ok(x)
{
promise_repaired => { "$(x)" };
promise_kept => { "$(x)" };
}
----------------
# ls /tmp/runfile.* /tmp/.done_run
/bin/ls: /tmp/runfile.*: No such file or directory
/bin/ls: /tmp/.done_run: No such file or directory
# cf-agent -f
/var/cf-masterfiles/config/branches/cf3/inputs/tests/test_filepattern.cf -K
Q: "...bin/mktemp /tmp": /tmp/runfile.LdxffjH28353
I: Last 1 QUOTEed lines were generated by promiser "/bin/mktemp
/tmp/runfile.XXXXXXXXXXXX"
I: Made in version 'not specified' of
'/var/cf-masterfiles/config/branches/cf3/inputs/tests/test_filepattern.cf'
near line 24
R: Command /bin/mktemp /tmp/runfile.XXXXXXXXXXXX ran successfully
R: Flag file /tmp/.done_run already exists, command not running
# ls /tmp/runfile.* /tmp/.done_run
/tmp/.done_run /tmp/runfile.LdxffjH28353
# cf-agent -f
/var/cf-masterfiles/config/branches/cf3/inputs/tests/test_filepattern.cf -K
R: Flag file /tmp/.done_run already exists, command not running
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine