Skip to content

Commit 4a292f1

Browse files
authored
Merge pull request #3498 from nickanderson/CFE-4583/mastger
CFE-4583: Enhanced default bodies documentation and examples
2 parents 347f9ae + 691ae21 commit 4a292f1

File tree

1 file changed

+57
-10
lines changed

1 file changed

+57
-10
lines changed

content/reference/language-concepts/bodies.markdown

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -170,21 +170,57 @@ Agents][Components]
170170

171171
#### Default bodies
172172

173-
CFEngine 3.9 introduced a way to create default bodies. It allows defining, for given
174-
promise and body types, a body that will be used each time no body is defined.
175-
To use a body as default, name it `<promise_type>_<body_type>` and put it
176-
in the `bodydefault` namespace. For example, a default `action` body for `files`
177-
promises will be named `files_action`, and in each `files` promise, if no
178-
`action` attribute is set, the `files_action` action will be used.
173+
Default bodies are automatically attached to promises not already using that
174+
body in the default namespace. To use a body as default, name it
175+
`<promise_type>_<body_type>` and put it in the `bodydefault` namespace.
176+
177+
```cf3
178+
body file control
179+
{
180+
# Default bodies /must/ be defined in the /bodydefault/ namespace
181+
namespace => "bodydefault";
182+
}
183+
184+
body <body_type> <promise_type>_<body_type>
185+
{
186+
# Attributes set for body <body_type> will be applied to all <promise_type>
187+
# promises that do not already have a body of <body_type> attached.
188+
}
189+
```
190+
191+
For example, a default `action` body for `files` promises will be named
192+
`files_action`, and in each `files` promise, if no `action` attribute is set,
193+
the `files_action` action will be used.
179194

180195
**Note:** The default bodies **only** apply to promises in the `default` namespace.
181196

182197
In the following example, we define a default `action` body for `files`
183-
promises, that specifies an `action_policy => "warn"` to prevent actually modifying files
184-
and to only warn about considered modifications. We define it once,
185-
and don't have to explicitly put this body in all our `files` promises.
198+
promises, that specifies an `action_policy => "warn"` to prevent actually
199+
modifying files and to only warn about considered modifications. We define it
200+
once, and don't have to explicitly put this body in all our `files` promises.
201+
The example also illustrates how promises in a non-`default` namespace are
202+
unaffected.
186203

187204
```cf3
205+
bundle agent example
206+
{
207+
files:
208+
209+
# Since the 'files_action' action body is defined in the 'bodydefault' namespce,
210+
# and since this promise is in the 'default' namespace (no alternate namespace is
211+
# declared previously) this promise will not actually modify the file content if
212+
# it is not as promised. Instead it will warn that a change wants to be made.
213+
214+
"/etc/motd"
215+
content => "There are, in fact, rules. You have been notified.";
216+
217+
# Since this promise has an action body attached, the default action body for
218+
# files will not be applied and this file would be fixed.
219+
220+
"/etc/issue.net"
221+
content => "WARNING: You are being monitored. We are all being monitored. This is a cry for help.",
222+
action => if_elapsed_day;
223+
}
188224
body file control
189225
{
190226
namespace => "bodydefault";
@@ -197,6 +233,17 @@ body action files_action
197233
198234
body file control
199235
{
200-
namespace => "default";
236+
namespace => "not_affected";
237+
}
238+
239+
bundle agent not_affected
240+
{
241+
files:
242+
"/etc/not-affected-by-bodydefault-files-action-body"
243+
content => "Hello world!";
201244
}
202245
```
246+
247+
**History:**
248+
249+
- Added in CFEngine 3.9.0

0 commit comments

Comments
 (0)