forked from ungleich-public/cdist
		
	
		
			
				
	
	
		
			114 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| cdist-messaging(7)
 | |
| ==================
 | |
| Nico Schottelius <nico-cdist--@--schottelius.org>
 | |
| 
 | |
| NAME
 | |
| ----
 | |
| cdist-messaging - How the initial manifest and types can communication
 | |
| 
 | |
| 
 | |
| 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:
 | |
| 
 | |
| --------------------------------------------------------------------------------
 | |
| echo "something" >> "$__messages_out"
 | |
| --------------------------------------------------------------------------------
 | |
| 
 | |
| When you want to react on a message use:
 | |
| 
 | |
| --------------------------------------------------------------------------------
 | |
| if grep -q "^__your_type/object/id:something" "$__messages_in"; then
 | |
|     echo "I do something else"
 | |
| fi
 | |
| --------------------------------------------------------------------------------
 | |
| 
 | |
| Some real life examples:
 | |
| --------------------------------------------------------------------------------
 | |
| # 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
 | |
| --------------------------------------------------------------------------------
 | |
| 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)
 | |
| - cdist-manifest(7)
 | |
| - cdist-reference(7)
 | |
| - cdist-type(7)
 | |
| 
 | |
| 
 | |
| 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).
 |