1#  Copyright 2020 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 => { holder, test };
27}
28
29bundle common holder
30{
31  classes:
32      "holderclass" expression => "any"; # will be global
33
34  vars:
35      "s" string => "Hello!";
36      "d" data => parsejson('[4,5,6]');
37      "list" slist => { "element1", "element2" };
38}
39
40bundle agent test
41{
42  vars:
43      "state" data => datastate();
44
45      # all the variables in bundle "holder" defined as of the execution of datastate() will be here
46      "holderstate" string => format("%S", "state[vars][holder]");
47      # all the classes defined as of the execution of datastate() will be here
48      "allclasses" slist => getindices("state[classes]");
49
50  classes:
51      "have_holderclass" expression => some("holderclass", allclasses);
52
53  reports:
54      "holder vars = $(holderstate)";
55    have_holderclass::
56      "I have the holder class";
57}
58#+end_src
59###############################################################################
60#+begin_src example_output
61#@ ```
62#@ R: holder vars = {"d":[4,5,6],"list":["element1","element2"],"s":"Hello!"}
63#@ R: I have the holder class
64#@ ```
65#+end_src
66