Re: Template validation
"'Lars Erik Wik' via help-cfengine" <[email protected]> Fri, 15 Mar 2024 07:25:57 -0700 (PDT)
| Newsgroups | gmane.comp.sysutils.cfengine.general |
|---|---|
| Message-ID | <[email protected]> |
Hi Markus,
We don't have an attribute like `validate` in CFEngine as far as I know.
However, the same functionality can be achieved by splitting up the
promise. One promise for rendering a temporary file, another for copying
that file into the final destination. Here is an example:
```cf3
body copy_from cp(source) {
source => "$(source)";
}
bundle agent main {
vars:
"temp_file"
string => "/tmp/TEMP.cfengine";
"dest_file_1"
string => "/tmp/file-1.txt";
"dest_file_2"
string => "/tmp/file-2.txt";
files:
"$(temp_file)"
content => "Hello CFEngine";
"$(dest_file_1)" # This file will pass validation
copy_from => cp("$(temp_file)"),
if => fileexists($(temp_file)),
unless => not(returnszero("/usr/bin/grep --quiet 'Hello CFEngine'
$(temp_file)", noshell));
"$(dest_file_2)" # This file will not pass validation
copy_from => cp("$(temp_file)"),
if => fileexists($(temp_file)),
unless => not(returnszero("/usr/bin/grep --quiet 'Hello World'
$(temp_file)", noshell));
}
```
I used the `if` attribute to make sure the file is created before I running
the command in the `unless` attribute. I use them in this order, because
`if` is executed before `unless`.
By running the example, we can see that only '/tmp/file-1.txt' was created
(with the exception of '/tmp/TEMP.cfengine' ofc.)
```
# cf-agent -KIf ~/example.cf
info: Created file '/tmp/TEMP.cfengine', mode 0600
info: Updated file '/tmp/TEMP.cfengine' with content 'Hello CFEngine'
info: Copied file '/tmp/TEMP.cfengine' to '/tmp/file-1.txt.cfnew' (mode
'600')
info: Moved '/tmp/file-1.txt.cfnew' to '/tmp/file-1.txt'
info: Updated file '/tmp/file-1.txt' from 'localhost:/tmp/TEMP.cfengine'
```
However, this is quite a bit of code which compared to Ansibles one liner.
The validate attribute sounds like a very nice feature, thus I created a
ticket (see https://northerntech.atlassian.net/browse/CFE-4356) to add it
to CFEngine as well. If you plan on using this multiple places, you can
consider putting it into a bundle for reusability.
On Friday, March 15, 2024 at 9:37:29 AM UTC+1 Markus Rexhepi-Lindberg wrote:
> Hi,
>
> Is there something equivalent to the validate function that is used for
> the template module in Ansible [1] for CFEngine's template engine? I have
> built some logic to validate the `/etc/ssh/sshd_config` config file for the
> sshd application before writing to it in one of my CFEngine policies but it
> has some drawbacks and it is not really an elegant solution.
>
> [1]
> https://docs.ansible.com/ansible/latest/collections/ansible/builtin/template_module.html#parameter-validate
>
--
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/54c274ee-8efd-4c49-aba5-478eb5508891n%40googlegroups.com.