2016-06-17 19:28:16 +00:00
|
|
|
Messaging
|
|
|
|
=========
|
2016-06-23 14:08:59 +00:00
|
|
|
|
2016-06-17 19:28:16 +00:00
|
|
|
Description
|
2016-05-20 06:50:56 +00:00
|
|
|
-----------
|
|
|
|
cdist has a simple but powerful way of allowing communication between
|
|
|
|
the initial manifest and types as well as types and types.
|
|
|
|
|
|
|
|
Whenever execution is passed from cdist to one of the
|
|
|
|
scripts described below, cdist generate 2 new temporary files
|
|
|
|
and exports the environment variables **__messages_in** and
|
|
|
|
**__messages_out** to point to them.
|
|
|
|
|
|
|
|
Before handing over the control, the content of the global message
|
|
|
|
file is copied into the file referenced by **$__messages_in**.
|
|
|
|
|
|
|
|
After cdist gained control back, the content of the file referenced
|
|
|
|
by **$__messages_out** is appended to the global message file.
|
|
|
|
|
|
|
|
This way overwriting any of the two files by accident does not
|
|
|
|
interfere with other types.
|
|
|
|
|
|
|
|
The order of execution is not defined unless you create dependencies
|
2016-06-17 19:28:16 +00:00
|
|
|
between the different objects (see `cdist manifest <cdist-manifest.html>`_) and thus you
|
2016-05-20 06:50:56 +00:00
|
|
|
can only react reliably on messages by objects that you depend on.
|
|
|
|
|
|
|
|
|
2016-06-17 19:28:16 +00:00
|
|
|
Availability
|
2016-05-20 06:50:56 +00:00
|
|
|
------------
|
|
|
|
Messaging is possible between all **local** scripts:
|
|
|
|
|
|
|
|
- initial manifest
|
|
|
|
- type/manifest
|
|
|
|
- type/gencode-local
|
|
|
|
- type/gencode-remote
|
|
|
|
|
|
|
|
|
2016-06-17 19:28:16 +00:00
|
|
|
Examples
|
2016-05-20 06:50:56 +00:00
|
|
|
--------
|
|
|
|
When you want to emit a message use:
|
|
|
|
|
|
|
|
.. code-block:: sh
|
|
|
|
|
|
|
|
echo "something" >> "$__messages_out"
|
|
|
|
|
|
|
|
When you want to react on a message use:
|
|
|
|
|
|
|
|
.. code-block:: sh
|
|
|
|
|
|
|
|
if grep -q "^__your_type/object/id:something" "$__messages_in"; then
|
|
|
|
echo "I do something else"
|
|
|
|
fi
|
|
|
|
|
|
|
|
Some real life examples:
|
|
|
|
|
|
|
|
.. code-block:: sh
|
|
|
|
|
|
|
|
# Reacting on changes from block for keepalive
|
|
|
|
if grep -q "^__block/keepalive-vrrp" "$__messages_in"; then
|
|
|
|
echo /etc/init.d/keepalived restart
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Reacting on changes of configuration files
|
|
|
|
if grep -q "^__file/etc/one" $__messages_in; then
|
|
|
|
echo 'for init in /etc/init.d/opennebula*; do $init restart; done'
|
|
|
|
fi
|
|
|
|
|
|
|
|
Restart sshd on changes
|
|
|
|
|
|
|
|
.. code-block:: sh
|
|
|
|
|
|
|
|
os="$(cat "$__global/explorer/os")"
|
|
|
|
|
|
|
|
case "$os" in
|
|
|
|
centos|redhat|suse)
|
|
|
|
restart="/etc/init.d/sshd restart"
|
|
|
|
;;
|
|
|
|
debian|ubuntu)
|
|
|
|
restart="/etc/init.d/ssh restart"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
cat << eof >&2
|
|
|
|
Unsupported os $os.
|
|
|
|
If you would like to have this type running on $os,
|
|
|
|
you can either develop the changes and send a pull
|
|
|
|
request or ask for a quote at www.ungleich.ch
|
|
|
|
eof
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
if grep -q "^__key_value/PermitRootLogin" "$__messages_in"; then
|
|
|
|
echo $restart
|
|
|
|
fi
|