Skip to content

Commit 380cc45

Browse files
committed
Enhanced default bodies documentation and examples
Clarified the explanation of default bodies, added CFEngine code examples for their definition and application, and included historical context. Ticket: CFE-4583 Changelog: None
1 parent 433ba0d commit 380cc45

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 /default/ 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)