forked from ungleich-public/cdist
		
	
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
cdist-messaging(7)
 | 
						|
==================
 | 
						|
How the initial manifest and types can communication
 | 
						|
 | 
						|
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
						|
 | 
						|
DESCRIPTION
 | 
						|
-----------
 | 
						|
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 
 | 
						|
between the different objects (see cdist-manifest(7)) and thus you
 | 
						|
can only react reliably on messages by objects that you depend on.
 | 
						|
 | 
						|
 | 
						|
AVAILABILITY
 | 
						|
------------
 | 
						|
Messaging is possible between all **local** scripts:
 | 
						|
 | 
						|
- initial manifest
 | 
						|
- type/manifest
 | 
						|
- type/gencode-local
 | 
						|
- type/gencode-remote
 | 
						|
 | 
						|
 | 
						|
EXAMPLES
 | 
						|
--------
 | 
						|
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
 | 
						|
 | 
						|
 | 
						|
SEE ALSO
 | 
						|
--------
 | 
						|
- `cdist(1) <../man1/cdist.html>`_
 | 
						|
- `cdist-manifest(7) <cdist-manifest.html>`_
 | 
						|
- `cdist-reference(7) <cdist-reference.html>`_
 | 
						|
- `cdist-type(7) <cdist-type.html>`_
 | 
						|
 | 
						|
 | 
						|
COPYING
 | 
						|
-------
 | 
						|
Copyright \(C) 2013 Nico Schottelius. Free use of this software is
 | 
						|
granted under the terms of the GNU General Public License version 3 (GPLv3).
 |