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