Re: Policy/Promise to agents
Rakesh Patel <[email protected]>
| Newsgroups | gmane.comp.sysutils.cfengine.general |
|---|---|
| Message-ID | <[email protected]> |
Thank you, I will give this a go. On Tuesday, August 9, 2022 at 5:58:53 PM UTC-5 [email protected] wrote: > Ugh, ignore the links to promises.cf and creat_a_file.cf, something is > trying to be helpful and make links to things that shouldn't be links. > > On Tuesday, August 9, 2022 at 5:57:11 PM UTC-5 Nick Anderson wrote: > >> Rakesh Patel <[email protected]> writes: >> >> First new to cf CFengine. >> >> Hi Rakesh, Welcome! I hope you enjoy your stay. >> >> I have a sample file called creat_a_file.cf in the /var/cfengine/master >> directory on the hub server. >> >> File content >> >> Listing 1: File content >> >> #!/var/cfengine/bin/cf-agent --no-lock >> body common control{ >> bundlesequence =>{"create_test_file"};} >> bundle agent create_test_file{ >> files: >> "/tmp/test-cfengine/test-file" >> >> edit_line => addline, >> create => "true";} >> bundle edit_line addline{ >> insert_lines: "Cfengine is running nicely."; >> >> This policy above seems to have been truncated early (it's missing a >> trailing }, probably just a copy pasta error since you said that you get >> the output you expect if you run the file directly. >> >> The file is copying to the agents but not executing. I can manually run >> the file and get the expected output but again not automatically. What am I >> missing. I have read that I need to modify the promise.cf file on the >> hub server but where and what? >> >> What you read probably mentioned promises.cf (note the s). It's in the >> root of the policy set. promises.cf is the first policy file read by >> cfengine components if one is not specified. >> >> However, that's rather old advice, at least if you are running the >> Masterfiles Policy Framework (MPF), which is the default policy set you get >> with CFEngine. >> >> I assume you are running the MPF (documentation here >> <https://docs.cfengine.com/docs/master/reference-masterfiles-policy-framework.html>). >> >> >> Now, to what you are missing … >> >> First, your snippet is written as a *standalone* policy. It's got a body >> common control and there can only be one of those per policy entry >> (policy entry is the first policy file read, e.g. promises.cf or >> whatever you give to -f or --file options to the component like cf-agent >> -f update.cf). So, if this policy file were included into the main >> policy (promises.cf) you would get errors. So, start by stripping out >> body common control from the file. Let's replace it with a library main >> bundle >> <https://docs.cfengine.com/docs/master/reference-language-concepts-bundles.html#library-main-bundles> >> ( bundle agent __main__, a bundle that gets called as part of the >> default bundlesequence if none is provided). In that bundle, let's add a methods >> type promise >> <https://docs.cfengine.com/docs/master/reference-promise-types-methods.html> >> to actuate your bundle agent create_test_file. >> >> So, you end up with this: >> Listing 2: Example Policy >> >> #!/var/cfengine/bin/cf-agent --no-lockbundle agent __main__{ >> methods: >> >> >> "create_test_file";}bundle agent create_test_file{ >> files: >> "/tmp/test-cfengine/test-file" >> edit_line => addline, >> create => "true";} >> bundle edit_line addline{ >> insert_lines: "Cfengine is running nicely.";} >> >> Now, when you run the policy file directly it should still work as >> expected: >> >> >> # cf-agent --no-lock --log-level info --file /home/nickanderson/org/roam/daily/work/cfengine3-yn06AG >> info: Created directory for '/tmp/test-cfengine/test-file' >> info: Created file '/tmp/test-cfengine/test-file', mode 0600 >> info: Inserted the promised line 'Cfengine is running nicely.' into '/tmp/test-cfengine/test-file' after locator >> info: insert_lines promise 'Cfengine is running nicely.' repaired >> info: Edited file '/tmp/test-cfengine/test-file' >> >> Note: Pay no attention to my filename there, it's just a temporary file >> that I stuck your policy into when I ran it with (ob-cfengine3 >> <https://github.com/nickanderson/ob-cfengine3>) >> >> Now, you want to include this policy file as part of your larger policy >> set (you want it to run with promises.cf runs). >> >> For this I recommend using Augments >> <https://docs.cfengine.com/docs/master/reference-language-concepts-augments.html>. >> Create /var/cfengine/masterfiles/def.json with the following content. >> >> { >> "inputs": [ "creat_a_file.cf" ], >> "vars": { >> "control_common_bundlesequence_end": [ "create_test_file" ] >> }} >> >> The *inputs* key is relative to the policy entry or a fully qualified >> path. You said you have creat_a_file.cf in /var/cfengine/masterfiles/. >> *masterfiles* is the *distribution* point. The update.cf policy copies >> things to /var/cfengine/inputs and the components >> <https://docs.cfengine.com/docs/master/reference-components-cf-monitord.html> >> all read from /var/cfengine/inputs by default. So here you would either >> specify /var/cfengine/inputs/creat_a_file.cf or simply creat_a_file.cf >> as shown. Also, the inputs key is used only by the promises.cf policy >> entry. >> >> Next we defined control_common_bundlesequence_end this gets defined as >> default:def.control_common_bundlesequence_end (the default namespace, >> bundle def, variable control_common_bundlesequence_end). Which the MPF >> uses as the last entry in it's body common control bundlesequence >> <https://github.com/cfengine/masterfiles/blob/7bd864a8848180f3650940d4d353148083f8cfea/promises.cf.in#L61>. >> This tun-able is documented here >> <https://docs.cfengine.com/docs/master/reference-masterfiles-policy-framework.html#append-to-the-main-bundlesequence> >> in the Masterfiles Policy Framework section of the Reference MPF Reference. >> >> Also, I know the agents update every 5 minutes, but how can I force to >> update it manually? >> >> After you have made the above changes force a policy update (/var/cfengine/bin/cf-agent >> -KIf update.cf) then try a normal policy run, perhaps with -K (aka >> --no-lock) and -I (aka --inform, or --log-level=info). >> >> I hope you find this helpful, good luck on your journey! >> >> You might also enjoy the ongoing The Agent is In >> <https://www.youtube.com/watch?v=YYS1CUggomU&list=PLh71Vl9YjMaji_jnHFZ3k4mDbyOCE3A2x> >> series. >> > -- You received this message because you are subscribed to the Google Groups "help-cfengine" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/help-cfengine/6bef7b9f-7a95-4df1-834e-2ad1c202c815n%40googlegroups.com.