Re: Policy/Promise to agents
Nick Anderson <[email protected]>
| Newsgroups | gmane.comp.sysutils.cfengine.general |
|---|---|
| Message-ID | <[email protected]> |
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 ,---- | #!/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."; `---- Listing 1: File content 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]). 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] ( `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] to actuate your `bundle agent create_test_file'. So, you end up with this: ,---- | #!/var/cfengine/bin/cf-agent --no-lock | bundle 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."; | } `---- Listing 2: Example Policy 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]) 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]. 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] 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]. This tun-able is [documented here] 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] series. [here] <https://docs.cfengine.com/docs/master/reference-masterfiles-policy-framework.html> [library main bundle] <https://docs.cfengine.com/docs/master/reference-language-concepts-bundles.html#library-main-bundles> [methods type promise] <https://docs.cfengine.com/docs/master/reference-promise-types-methods.html> [ob-cfengine3] <https://github.com/nickanderson/ob-cfengine3> [Augments] <https://docs.cfengine.com/docs/master/reference-language-concepts-augments.html> [the components] <https://docs.cfengine.com/docs/master/reference-components-cf-monitord.html> [body common control bundlesequence] <https://github.com/cfengine/masterfiles/blob/7bd864a8848180f3650940d4d353148083f8cfea/promises.cf.in#L61> [documented here] <https://docs.cfengine.com/docs/master/reference-masterfiles-policy-framework.html#append-to-the-main-bundlesequence> [The Agent is In] <https://www.youtube.com/watch?v=YYS1CUggomU&list=PLh71Vl9YjMaji_jnHFZ3k4mDbyOCE3A2x> -- 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/87sfm5c9fi.fsf%40precision-5570.home.cmdln.org. -- Nick Anderson -- 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/87sfm5c9fi.fsf%40precision-5570.home.cmdln.org.