1#  Copyright 2021 Northern.tech AS
2
3#  This file is part of CFEngine 3 - written and maintained by Northern.tech AS.
4
5#  This program is free software; you can redistribute it and/or modify it
6#  under the terms of the GNU General Public License as published by the
7#  Free Software Foundation; version 3.
8
9#  This program is distributed in the hope that it will be useful,
10#  but WITHOUT ANY WARRANTY; without even the implied warranty of
11#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12#  GNU General Public License for more details.
13
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
17
18# To the extent this program is licensed as part of the Enterprise
19# versions of Cfengine, the applicable Commercial Open Source License
20# (COSL) may apply to this file if you as a licensee so wish it. See
21# included file COSL.txt.
22
23#+begin_src cfengine3
24body common control
25{
26      bundlesequence => { "run" };
27}
28
29bundle agent run
30{
31  vars:
32      "v" string => "2.5.6";
33      "vlist" slist => splitstring($(v), "\.", 3);
34      "padded" string => format("%04d%04d%04d", nth("vlist", 0), nth("vlist", 1), nth("vlist", 2));
35      "a" string => format("%10.10s", "x");
36      "b" string => format("%-10.10s", "x");
37      "c" string => format("%04d", 1);
38      "d" string => format("%07.2f", 1);
39      "e" string => format("hello my name is %s %s", "Inigo", "Montoya");
40
41      "container" data => parsejson('{ "x": "y", "z": true }');
42
43      "packed" string => format("slist = %S, container = %S", vlist, container);
44
45  reports:
46      "version $(v) => padded $(padded)";
47      "%10.10s on 'x' => '$(a)'";
48      "%-10.10s on 'x' => '$(b)'";
49      "%04d on '1' => '$(c)'";
50      "%07.2f on '1' => '$(d)'";
51      "you killed my father... => '$(e)'";
52      "$(packed)";
53}
54#+end_src
55###############################################################################
56#+begin_src example_output
57#@ ```
58#@ R: version 2.5.6 => padded 000200050006
59#@ R: %10.10s on 'x' => '         x'
60#@ R: %-10.10s on 'x' => 'x         '
61#@ R: %04d on '1' => '0001'
62#@ R: %07.2f on '1' => '0001.00'
63#@ R: you killed my father... => 'hello my name is Inigo Montoya'
64#@ R: slist = { "2", "5", "6" }, container = {"x":"y","z":true}
65#@ ```
66#+end_src
67