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).
							 |