heartbeat: import pacemaker scripts (closes: #4527)
This commit is contained in:
		
							
								
								
									
										3
									
								
								files/heartbeat/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								files/heartbeat/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # Pacemaker High Availability resource agents for OpenStack | ||||
|  | ||||
| https://github.com/madkiss/openstack-resource-agents | ||||
							
								
								
									
										345
									
								
								files/heartbeat/ceilometer-agent-central
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										345
									
								
								files/heartbeat/ceilometer-agent-central
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,345 @@ | ||||
| #!/bin/sh | ||||
| # | ||||
| # | ||||
| # OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) | ||||
| # | ||||
| # Description: Manages an OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) process as an HA resource | ||||
| # | ||||
| # Authors: Emilien Macchi | ||||
| # Mainly inspired by the Nova Scheduler resource agent written by Sebastien Han | ||||
| # | ||||
| # Support: openstack@lists.launchpad.net | ||||
| # License: Apache Software License (ASL) 2.0 | ||||
| # | ||||
| # | ||||
| # See usage() function below for more details ... | ||||
| # | ||||
| # OCF instance parameters: | ||||
| # OCF_RESKEY_binary | ||||
| # OCF_RESKEY_config | ||||
| # OCF_RESKEY_user | ||||
| # OCF_RESKEY_pid | ||||
| # OCF_RESKEY_monitor_binary | ||||
| # OCF_RESKEY_amqp_server_port | ||||
| # OCF_RESKEY_additional_parameters | ||||
| ####################################################################### | ||||
| # Initialization: | ||||
|  | ||||
| : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} | ||||
| . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs | ||||
|  | ||||
| ####################################################################### | ||||
|  | ||||
| # Fill in some defaults if no values are specified | ||||
|  | ||||
| OCF_RESKEY_binary_default="ceilometer-agent-central" | ||||
| OCF_RESKEY_config_default="/etc/ceilometer/ceilometer.conf" | ||||
| OCF_RESKEY_user_default="ceilometer" | ||||
| OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid" | ||||
| OCF_RESKEY_amqp_server_port_default="5672" | ||||
|  | ||||
| : ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}} | ||||
| : ${OCF_RESKEY_config=${OCF_RESKEY_config_default}} | ||||
| : ${OCF_RESKEY_user=${OCF_RESKEY_user_default}} | ||||
| : ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}} | ||||
| : ${OCF_RESKEY_amqp_server_port=${OCF_RESKEY_amqp_server_port_default}} | ||||
|  | ||||
| ####################################################################### | ||||
|  | ||||
| usage() { | ||||
|     cat <<UEND | ||||
|         usage: $0 (start|stop|validate-all|meta-data|status|monitor) | ||||
|  | ||||
|         $0 manages an OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) process as an HA resource | ||||
|  | ||||
|         The 'start' operation starts the scheduler service. | ||||
|         The 'stop' operation stops the scheduler service. | ||||
|         The 'validate-all' operation reports whether the parameters are valid | ||||
|         The 'meta-data' operation reports this RA's meta-data information | ||||
|         The 'status' operation reports whether the scheduler service is running | ||||
|         The 'monitor' operation reports whether the scheduler service seems to be working | ||||
|  | ||||
| UEND | ||||
| } | ||||
|  | ||||
| meta_data() { | ||||
|     cat <<END | ||||
| <?xml version="1.0"?> | ||||
| <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> | ||||
| <resource-agent name="ceilometer-agent-central"> | ||||
| <version>1.0</version> | ||||
|  | ||||
| <longdesc lang="en"> | ||||
| Resource agent for the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) | ||||
| May manage a ceilometer-agent-central instance or a clone set that | ||||
| creates a distributed ceilometer-agent-central cluster. | ||||
| </longdesc> | ||||
| <shortdesc lang="en">Manages the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central)</shortdesc> | ||||
| <parameters> | ||||
|  | ||||
| <parameter name="binary" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| Location of the OpenStack Ceilometer Central Agent server binary (ceilometer-agent-central) | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Ceilometer Central Agent server binary (ceilometer-agent-central)</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_binary_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="config" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| Location of the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) configuration file | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Ceilometer Central Agent (ceilometer-agent-central registry) config file</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_config_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="user" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| User running OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) user</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_user_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="pid" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| The pid file to use for this OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) instance | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) pid file</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_pid_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="amqp_server_port" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| The listening port number of the AMQP server. Use for monitoring purposes | ||||
| </longdesc> | ||||
| <shortdesc lang="en">AMQP listening port</shortdesc> | ||||
| <content type="integer" default="${OCF_RESKEY_amqp_server_port_default}" /> | ||||
| </parameter> | ||||
|  | ||||
|  | ||||
| <parameter name="additional_parameters" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| Additional parameters to pass on to the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) | ||||
| </longdesc> | ||||
| <shortdesc lang="en">Additional parameters for ceilometer-agent-central</shortdesc> | ||||
| <content type="string" /> | ||||
| </parameter> | ||||
|  | ||||
| </parameters> | ||||
|  | ||||
| <actions> | ||||
| <action name="start" timeout="20" /> | ||||
| <action name="stop" timeout="20" /> | ||||
| <action name="status" timeout="20" /> | ||||
| <action name="monitor" timeout="30" interval="20" /> | ||||
| <action name="validate-all" timeout="5" /> | ||||
| <action name="meta-data" timeout="5" /> | ||||
| </actions> | ||||
| </resource-agent> | ||||
| END | ||||
| } | ||||
|  | ||||
| ####################################################################### | ||||
| # Functions invoked by resource manager actions | ||||
|  | ||||
| ceilometer_agent_central_check_port() { | ||||
| # This function has been taken from the squid RA and improved a bit | ||||
| # The length of the integer must be 4 | ||||
| # Examples of valid port: "1080", "0080" | ||||
| # Examples of invalid port: "1080bad", "0", "0000", "" | ||||
|  | ||||
|     local int | ||||
|     local cnt | ||||
|      | ||||
|     int="$1" | ||||
|     cnt=${#int} | ||||
|     echo $int |egrep -qx '[0-9]+(:[0-9]+)?(,[0-9]+(:[0-9]+)?)*' | ||||
|  | ||||
|     if [ $? -ne 0 ] || [ $cnt -ne 4 ]; then | ||||
|         ocf_log err "Invalid port number: $1" | ||||
|         exit $OCF_ERR_CONFIGURED | ||||
|     fi | ||||
| } | ||||
|  | ||||
| ceilometer_agent_central_validate() { | ||||
|     local rc | ||||
|  | ||||
|     check_binary $OCF_RESKEY_binary | ||||
|     check_binary netstat | ||||
|     ceilometer_agent_central_check_port $OCF_RESKEY_amqp_server_port | ||||
|      | ||||
|     # A config file on shared storage that is not available | ||||
|     # during probes is OK. | ||||
|     if [ ! -f $OCF_RESKEY_config ]; then | ||||
|         if ! ocf_is_probe; then | ||||
|             ocf_log err "Config $OCF_RESKEY_config doesn't exist" | ||||
|             return $OCF_ERR_INSTALLED | ||||
|         fi | ||||
|         ocf_log_warn "Config $OCF_RESKEY_config not available during a probe" | ||||
|     fi | ||||
|  | ||||
|     getent passwd $OCF_RESKEY_user >/dev/null 2>&1 | ||||
|     rc=$? | ||||
|     if [ $rc -ne 0 ]; then | ||||
|         ocf_log err "User $OCF_RESKEY_user doesn't exist" | ||||
|         return $OCF_ERR_INSTALLED | ||||
|     fi | ||||
|  | ||||
|     true | ||||
| } | ||||
|  | ||||
| ceilometer_agent_central_status() { | ||||
|     local pid | ||||
|     local rc | ||||
|  | ||||
|     if [ ! -f $OCF_RESKEY_pid ]; then | ||||
|         ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) is not running" | ||||
|         return $OCF_NOT_RUNNING | ||||
|     else | ||||
|         pid=`cat $OCF_RESKEY_pid` | ||||
|     fi | ||||
|  | ||||
|     ocf_run -warn kill -s 0 $pid | ||||
|     rc=$? | ||||
|     if [ $rc -eq 0 ]; then | ||||
|         return $OCF_SUCCESS | ||||
|     else | ||||
|         ocf_log info "Old PID file found, but OpenStack Ceilometer Central Agent (ceilometer-agent-central) is not running" | ||||
|         return $OCF_NOT_RUNNING | ||||
|     fi | ||||
| } | ||||
|  | ||||
| ceilometer_agent_central_monitor() { | ||||
|     local rc | ||||
|     local pid | ||||
|     local scheduler_amqp_check | ||||
|  | ||||
|     ceilometer_agent_central_status | ||||
|     rc=$? | ||||
|  | ||||
|     # If status returned anything but success, return that immediately | ||||
|     if [ $rc -ne $OCF_SUCCESS ]; then | ||||
|         return $rc | ||||
|     fi | ||||
|  | ||||
|     # Check the connections according to the PID. | ||||
|     # We are sure to hit the scheduler process and not other Cinder process with the same connection behavior (for example cinder-api) | ||||
|         pid=`cat $OCF_RESKEY_pid` | ||||
|         scheduler_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"` | ||||
|         rc=$? | ||||
|         if [ $rc -ne 0 ]; then | ||||
|         ocf_log err "Central Agent is not connected to the AMQP server : $rc" | ||||
|         return $OCF_NOT_RUNNING | ||||
|         fi | ||||
|  | ||||
|     ocf_log debug "OpenStack Ceilometer Central Agent (ceilometer-agent-central) monitor succeeded" | ||||
|     return $OCF_SUCCESS | ||||
| } | ||||
|  | ||||
| ceilometer_agent_central_start() { | ||||
|     local rc | ||||
|  | ||||
|     ceilometer_agent_central_status | ||||
|     rc=$? | ||||
|     if [ $rc -eq $OCF_SUCCESS ]; then | ||||
|         ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) already running" | ||||
|         return $OCF_SUCCESS | ||||
|     fi | ||||
|  | ||||
|     # run the actual ceilometer-agent-central daemon. Don't use ocf_run as we're sending the tool's output | ||||
|     # straight to /dev/null anyway and using ocf_run would break stdout-redirection here. | ||||
|     su ${OCF_RESKEY_user} -s /bin/sh -c "${OCF_RESKEY_binary} --config-file=$OCF_RESKEY_config \ | ||||
|        $OCF_RESKEY_additional_parameters"' >> /dev/null 2>&1 & echo $!' > $OCF_RESKEY_pid | ||||
|  | ||||
|     # Spin waiting for the server to come up. | ||||
|     while true; do | ||||
|     ceilometer_agent_central_monitor | ||||
|     rc=$? | ||||
|     [ $rc -eq $OCF_SUCCESS ] && break | ||||
|     if [ $rc -ne $OCF_NOT_RUNNING ]; then | ||||
|         ocf_log err "OpenStack Ceilometer Central Agent (ceilometer-agent-central) start failed" | ||||
|         exit $OCF_ERR_GENERIC | ||||
|     fi | ||||
|     sleep 1 | ||||
|     done | ||||
|  | ||||
|     ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) started" | ||||
|     return $OCF_SUCCESS | ||||
| } | ||||
|  | ||||
| ceilometer_agent_central_stop() { | ||||
|     local rc | ||||
|     local pid | ||||
|  | ||||
|     ceilometer_agent_central_status | ||||
|     rc=$? | ||||
|     if [ $rc -eq $OCF_NOT_RUNNING ]; then | ||||
|         ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) already stopped" | ||||
|         return $OCF_SUCCESS | ||||
|     fi | ||||
|  | ||||
|     # Try SIGTERM | ||||
|     pid=`cat $OCF_RESKEY_pid` | ||||
|     ocf_run kill -s TERM $pid | ||||
|     rc=$? | ||||
|     if [ $rc -ne 0 ]; then | ||||
|         ocf_log err "OpenStack Ceilometer Central Agent (ceilometer-agent-central) couldn't be stopped" | ||||
|         exit $OCF_ERR_GENERIC | ||||
|     fi | ||||
|  | ||||
|     # stop waiting | ||||
|     shutdown_timeout=15 | ||||
|     if [ -n "$OCF_RESKEY_CRM_meta_timeout" ]; then | ||||
|         shutdown_timeout=$((($OCF_RESKEY_CRM_meta_timeout/1000)-5)) | ||||
|     fi | ||||
|     count=0 | ||||
|     while [ $count -lt $shutdown_timeout ]; do | ||||
|         ceilometer_agent_central_status | ||||
|         rc=$? | ||||
|         if [ $rc -eq $OCF_NOT_RUNNING ]; then | ||||
|             break | ||||
|         fi | ||||
|         count=`expr $count + 1` | ||||
|         sleep 1 | ||||
|         ocf_log debug "OpenStack Ceilometer Central Agent (ceilometer-agent-central) still hasn't stopped yet. Waiting ..." | ||||
|     done | ||||
|  | ||||
|     ceilometer_agent_central_status | ||||
|     rc=$? | ||||
|     if [ $rc -ne $OCF_NOT_RUNNING ]; then | ||||
|         # SIGTERM didn't help either, try SIGKILL | ||||
|         ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) failed to stop after ${shutdown_timeout}s \ | ||||
|           using SIGTERM. Trying SIGKILL ..." | ||||
|         ocf_run kill -s KILL $pid | ||||
|     fi | ||||
|  | ||||
|     ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) stopped" | ||||
|  | ||||
|     rm -f $OCF_RESKEY_pid | ||||
|  | ||||
|     return $OCF_SUCCESS | ||||
| } | ||||
|  | ||||
| ####################################################################### | ||||
|  | ||||
| case "$1" in | ||||
|   meta-data) meta_data | ||||
|                 exit $OCF_SUCCESS;; | ||||
|   usage|help) usage | ||||
|                 exit $OCF_SUCCESS;; | ||||
| esac | ||||
|  | ||||
| # Anything except meta-data and help must pass validation | ||||
| ceilometer_agent_central_validate || exit $? | ||||
|  | ||||
| # What kind of method was invoked? | ||||
| case "$1" in | ||||
|   start) ceilometer_agent_central_start;; | ||||
|   stop) ceilometer_agent_central_stop;; | ||||
|   status) ceilometer_agent_central_status;; | ||||
|   monitor) ceilometer_agent_central_monitor;; | ||||
|   validate-all) ;; | ||||
|   *) usage | ||||
|                 exit $OCF_ERR_UNIMPLEMENTED;; | ||||
| esac | ||||
							
								
								
									
										952
									
								
								files/heartbeat/heat-engine
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										952
									
								
								files/heartbeat/heat-engine
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										329
									
								
								files/heartbeat/neutron-metadata-agent
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										329
									
								
								files/heartbeat/neutron-metadata-agent
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,329 @@ | ||||
| #!/bin/sh | ||||
| # | ||||
| # | ||||
| # OpenStack Neutron Metadata Agent (neutron-metadata-agent) | ||||
| # | ||||
| # Description:  Manages an OpenStack Volumes (neutron-metadata-agent) process as an HA resource | ||||
| # | ||||
| # Authors:      Sébastien Han | ||||
| # Mainly inspired by the Glance API resource agent written by Martin Gerhard Loschwitz from Hastexo: http://goo.gl/whLpr | ||||
| # | ||||
| # Support:      openstack@lists.launchpad.net | ||||
| # License:      Apache Software License (ASL) 2.0 | ||||
| # | ||||
| # | ||||
| # See usage() function below for more details ... | ||||
| # | ||||
| # OCF instance parameters: | ||||
| #   OCF_RESKEY_binary | ||||
| #   OCF_RESKEY_config | ||||
| #   OCF_RESKEY_agent_config | ||||
| #   OCF_RESKEY_user | ||||
| #   OCF_RESKEY_pid | ||||
| #   OCF_RESKEY_additional_parameters | ||||
| ####################################################################### | ||||
| # Initialization: | ||||
|  | ||||
| : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} | ||||
| . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs | ||||
|  | ||||
| ####################################################################### | ||||
|  | ||||
| # Fill in some defaults if no values are specified | ||||
|  | ||||
| OCF_RESKEY_binary_default="neutron-metadata-agent" | ||||
| OCF_RESKEY_config_default="/etc/neutron/neutron.conf" | ||||
| OCF_RESKEY_agent_config_default="/etc/neutron/metadata_agent.ini" | ||||
| OCF_RESKEY_user_default="neutron" | ||||
| OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid" | ||||
|  | ||||
| : ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}} | ||||
| : ${OCF_RESKEY_config=${OCF_RESKEY_config_default}} | ||||
| : ${OCF_RESKEY_agent_config=${OCF_RESKEY_agent_config_default}} | ||||
| : ${OCF_RESKEY_user=${OCF_RESKEY_user_default}} | ||||
| : ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}} | ||||
|  | ||||
| ####################################################################### | ||||
|  | ||||
| usage() { | ||||
|     cat <<UEND | ||||
|         usage: $0 (start|stop|validate-all|meta-data|status|monitor) | ||||
|  | ||||
|         $0 manages an OpenStack Neutron Metadata Agent (neutron-metadata-agent) process as an HA resource | ||||
|  | ||||
|         The 'start' operation starts the volume service. | ||||
|         The 'stop' operation stops the volume service. | ||||
|         The 'validate-all' operation reports whether the parameters are valid | ||||
|         The 'meta-data' operation reports this RA's meta-data information | ||||
|         The 'status' operation reports whether the volume service is running | ||||
|         The 'monitor' operation reports whether the volume service seems to be working | ||||
|  | ||||
| UEND | ||||
| } | ||||
|  | ||||
| meta_data() { | ||||
|     cat <<END | ||||
| <?xml version="1.0"?> | ||||
| <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> | ||||
| <resource-agent name="neutron-metadata-agent"> | ||||
| <version>1.0</version> | ||||
|  | ||||
| <longdesc lang="en"> | ||||
| Resource agent for the OpenStack Neutron Metadata Agent (neutron-metadata-agent) | ||||
| May manage a neutron-metadata-agent instance or a clone set that | ||||
| creates a distributed neutron-metadata-agent cluster. | ||||
| </longdesc> | ||||
| <shortdesc lang="en">Manages the OpenStack Neutron Metadata Agent (neutron-metadata-agent)</shortdesc> | ||||
| <parameters> | ||||
|  | ||||
| <parameter name="binary" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| Location of the OpenStack Neutron Metadata Agent server binary (neutron-metadata-agent) | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Neutron Metadata Agent server binary (neutron-metadata-agent)</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_binary_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="config" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| Location of the OpenStack Neutron Metadata Agent (neutron-metadata-agent) configuration file | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Neutron Metadata Agent (neutron-metadata-agent) config file</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_config_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="user" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| User running OpenStack Neutron Metadata Agent (neutron-metadata-agent) | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Neutron Metadata Agent (neutron-metadata-agent) user</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_user_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="agent_config" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| Location of the OpenStack Metadata agent configuration file | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Metadata (neutron-metadata-agent) config file</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_agent_config_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="pid" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| The pid file to use for this OpenStack Neutron Metadata Agent (neutron-metadata-agent) instance | ||||
| </longdesc> | ||||
| <shortdesc lang="en">OpenStack Neutron Metadata Agent (neutron-metadata-agent) pid file</shortdesc> | ||||
| <content type="string" default="${OCF_RESKEY_pid_default}" /> | ||||
| </parameter> | ||||
|  | ||||
| <parameter name="amqp_server_port" unique="0" required="0">                                                                                                                                                               | ||||
| <longdesc lang="en">                                                                                                                                                                                                       | ||||
| The listening port number of the AMQP server. Mandatory to perform a monitor check                                                                                                                                         | ||||
| </longdesc>                                                                                                                                                                                                                | ||||
| <shortdesc lang="en">AMQP listening port</shortdesc>                                                                                                                                                                       | ||||
| <content type="integer" default="${OCF_RESKEY_amqp_server_port_default}" />                                                                                                                                               | ||||
| </parameter>       | ||||
|   | ||||
|  | ||||
| <parameter name="additional_parameters" unique="0" required="0"> | ||||
| <longdesc lang="en"> | ||||
| Additional parameters to pass on to the OpenStack Neutron Metadata Agent (neutron-metadata-agent) | ||||
| </longdesc> | ||||
| <shortdesc lang="en">Additional parameters for neutron-metadata-agent</shortdesc> | ||||
| <content type="string" /> | ||||
| </parameter> | ||||
|  | ||||
| </parameters> | ||||
|  | ||||
| <actions> | ||||
| <action name="start" timeout="10" /> | ||||
| <action name="stop" timeout="10" /> | ||||
| <action name="status" timeout="10" /> | ||||
| <action name="monitor" timeout="5" interval="10" /> | ||||
| <action name="validate-all" timeout="5" /> | ||||
| <action name="meta-data" timeout="5" /> | ||||
| </actions> | ||||
| </resource-agent> | ||||
| END | ||||
| } | ||||
|  | ||||
| ####################################################################### | ||||
| # Functions invoked by resource manager actions | ||||
|  | ||||
| neutron_metadata_agent_validate() { | ||||
|     local rc | ||||
|  | ||||
|     check_binary $OCF_RESKEY_binary | ||||
|     check_binary netstat | ||||
|      | ||||
|     # A config file on shared storage that is not available | ||||
|     # during probes is OK. | ||||
|     if [ ! -f $OCF_RESKEY_config ]; then | ||||
|         if ! ocf_is_probe; then | ||||
|             ocf_log err "Config $OCF_RESKEY_config doesn't exist" | ||||
|             return $OCF_ERR_INSTALLED | ||||
|         fi | ||||
|         ocf_log_warn "Config $OCF_RESKEY_config not available during a probe" | ||||
|     fi | ||||
|  | ||||
|     getent passwd $OCF_RESKEY_user >/dev/null 2>&1 | ||||
|     rc=$? | ||||
|     if [ $rc -ne 0 ]; then | ||||
|         ocf_log err "User $OCF_RESKEY_user doesn't exist" | ||||
|         return $OCF_ERR_INSTALLED | ||||
|     fi | ||||
|  | ||||
|     true | ||||
| } | ||||
|  | ||||
| neutron_metadata_agent_status() { | ||||
|     local pid | ||||
|     local rc | ||||
|  | ||||
|     if [ ! -f $OCF_RESKEY_pid ]; then | ||||
|         ocf_log info "OpenStack Neutron Metadata Agent (neutron-metadata-agent) is not running" | ||||
|         return $OCF_NOT_RUNNING | ||||
|     else | ||||
|         pid=`cat $OCF_RESKEY_pid` | ||||
|     fi | ||||
|  | ||||
|     ocf_run -warn kill -s 0 $pid | ||||
|     rc=$? | ||||
|     if [ $rc -eq 0 ]; then | ||||
|         return $OCF_SUCCESS | ||||
|     else | ||||
|         ocf_log info "Old PID file found, but OpenStack Neutron Metadata Agent (neutron-metadata-agent) is not running" | ||||
|         return $OCF_NOT_RUNNING | ||||
|     fi | ||||
| } | ||||
|  | ||||
| neutron_metadata_agent_monitor() { | ||||
|     local pid | ||||
|     local rc | ||||
|  | ||||
|     if [ ! -f $OCF_RESKEY_pid ]; then | ||||
|         ocf_log info "OpenStack Neutron Metadata Agent (neutron-metadata-agent) is not running" | ||||
|         return $OCF_NOT_RUNNING | ||||
|     else | ||||
|         pid=`cat $OCF_RESKEY_pid` | ||||
|     fi | ||||
|  | ||||
|     ocf_run -warn kill -s 0 $pid | ||||
|     rc=$? | ||||
|     if [ $rc -eq 0 ]; then | ||||
|         return $OCF_SUCCESS | ||||
|     else | ||||
|         ocf_log info "Old PID file found, but OpenStack Neutron Metadata Agent (neutron-metadata-agent) is not running" | ||||
|         return $OCF_NOT_RUNNING | ||||
|     fi | ||||
| } | ||||
|  | ||||
| neutron_metadata_agent_start() { | ||||
|     local rc | ||||
|  | ||||
|     neutron_metadata_agent_status | ||||
|     rc=$? | ||||
|     if [ $rc -eq $OCF_SUCCESS ]; then | ||||
|         ocf_log info "OpenStack Neutron Metadata Agent (neutron-metadata-agent) already running" | ||||
|         return $OCF_SUCCESS | ||||
|     fi | ||||
|  | ||||
|     # run the actual neutron-server daemon with correct configurations files (server + plugin) | ||||
|     # Don't use ocf_run as we're sending the tool's output | ||||
|     # straight to /dev/null anyway and using ocf_run would break stdout-redirection here. | ||||
|     su ${OCF_RESKEY_user} -s /bin/sh -c "${OCF_RESKEY_binary} --config-file=$OCF_RESKEY_config \ | ||||
|        	--config-file=$OCF_RESKEY_agent_config --log-file=/var/log/neutron/metadata.log $OCF_RESKEY_additional_parameters"' >> \ | ||||
| 	/dev/null 2>&1 & echo $!' > $OCF_RESKEY_pid | ||||
|  | ||||
|     # Spin waiting for the server to come up. | ||||
|     # Let the CRM/LRM time us out if required | ||||
|     while true; do | ||||
|     neutron_metadata_agent_monitor | ||||
|     rc=$? | ||||
|     [ $rc -eq $OCF_SUCCESS ] && break | ||||
|     if [ $rc -ne $OCF_NOT_RUNNING ]; then | ||||
|         ocf_log err "OpenStack Neutron Metadata Agent (neutron-metadata-agent) start failed" | ||||
|         exit $OCF_ERR_GENERIC | ||||
|     fi | ||||
|     sleep 1 | ||||
|     done | ||||
|  | ||||
|     ocf_log info "OpenStack Neutron Metadata Agent (neutron-metadata-agent) started" | ||||
|     return $OCF_SUCCESS | ||||
| } | ||||
|  | ||||
| neutron_metadata_agent_stop() { | ||||
|     local rc | ||||
|     local pid | ||||
|  | ||||
|     neutron_metadata_agent_status | ||||
|     rc=$? | ||||
|     if [ $rc -eq $OCF_NOT_RUNNING ]; then | ||||
|         ocf_log info "OpenStack Neutron Metadata Agent (neutron-metadata-agent) already stopped" | ||||
|         return $OCF_SUCCESS | ||||
|     fi | ||||
|  | ||||
|     # Try SIGTERM | ||||
|     pid=`cat $OCF_RESKEY_pid` | ||||
|     ocf_run kill -s TERM $pid | ||||
|     rc=$? | ||||
|     if [ $rc -ne 0 ]; then | ||||
|         ocf_log err "OpenStack Neutron Metadata Agent (neutron-metadata-agent) couldn't be stopped" | ||||
|         exit $OCF_ERR_GENERIC | ||||
|     fi | ||||
|  | ||||
|     # stop waiting | ||||
|     shutdown_timeout=15 | ||||
|     if [ -n "$OCF_RESKEY_CRM_meta_timeout" ]; then | ||||
|         shutdown_timeout=$((($OCF_RESKEY_CRM_meta_timeout/1000)-5)) | ||||
|     fi | ||||
|     count=0 | ||||
|     while [ $count -lt $shutdown_timeout ]; do | ||||
|         neutron_metadata_agent_status | ||||
|         rc=$? | ||||
|         if [ $rc -eq $OCF_NOT_RUNNING ]; then | ||||
|             break | ||||
|         fi | ||||
|         count=`expr $count + 1` | ||||
|         sleep 1 | ||||
|         ocf_log debug "OpenStack Neutron Metadata Agent (neutron-metadata-agent) still hasn't stopped yet. Waiting ..." | ||||
|     done | ||||
|  | ||||
|     neutron_metadata_agent_status | ||||
|     rc=$? | ||||
|     if [ $rc -ne $OCF_NOT_RUNNING ]; then | ||||
|         # SIGTERM didn't help either, try SIGKILL | ||||
|         ocf_log info "OpenStack Neutron Metadata Agent (neutron-metadata-agent) failed to stop after ${shutdown_timeout}s \ | ||||
|           using SIGTERM. Trying SIGKILL ..." | ||||
|         ocf_run kill -s KILL $pid | ||||
|     fi | ||||
|  | ||||
|     ocf_log info "OpenStack Neutron Metadata Agent (neutron-metadata-agent) stopped" | ||||
|  | ||||
|     rm -f $OCF_RESKEY_pid | ||||
|  | ||||
|     return $OCF_SUCCESS | ||||
| } | ||||
|  | ||||
| ####################################################################### | ||||
|  | ||||
| case "$1" in | ||||
|   meta-data)    meta_data | ||||
|                 exit $OCF_SUCCESS;; | ||||
|   usage|help)   usage | ||||
|                 exit $OCF_SUCCESS;; | ||||
| esac | ||||
|  | ||||
| # Anything except meta-data and help must pass validation | ||||
| neutron_metadata_agent_validate || exit $? | ||||
|  | ||||
| # What kind of method was invoked? | ||||
| case "$1" in | ||||
|   start)        neutron_metadata_agent_start;; | ||||
|   stop)         neutron_metadata_agent_stop;; | ||||
|   status)       neutron_metadata_agent_status;; | ||||
|   monitor)      neutron_metadata_agent_monitor;; | ||||
|   validate-all) ;; | ||||
|   *)            usage | ||||
|                 exit $OCF_ERR_UNIMPLEMENTED;; | ||||
| esac | ||||
| @@ -41,16 +41,11 @@ class privatecloud::spof( | ||||
|   } | ||||
|  | ||||
|   # Resources managed by Corosync as Active / Passive | ||||
|   vcsrepo { '/usr/lib/ocf/resource.d/openstack/': | ||||
|     ensure   => latest, | ||||
|     provider => git, | ||||
|     source   => 'https://github.com/madkiss/openstack-resource-agents', | ||||
|     revision => 'master', | ||||
|   } | ||||
|   # https://github.com/madkiss/openstack-resource-agents | ||||
|  | ||||
|   Package['corosync'] -> | ||||
|   file { '/usr/lib/ocf/resource.d/heartbeat/ceilometer-agent-central': | ||||
|     source  => '/usr/lib/ocf/resource.d/openstack/ceilometer-agent-central', | ||||
|     source  => 'puppet:///privatecloud/heartbeat/ceilometer-agent-central', | ||||
|     mode    => '0755', | ||||
|     owner   => 'root', | ||||
|     group   => 'root', | ||||
| @@ -74,7 +69,7 @@ class privatecloud::spof( | ||||
|  | ||||
|   Package['corosync'] -> | ||||
|   file { '/usr/lib/ocf/resource.d/heartbeat/neutron-metadata-agent': | ||||
|     source  => '/usr/lib/ocf/resource.d/openstack/neutron-metadata-agent', | ||||
|     source  => 'puppet:///privatecloud/heartbeat/neutron-metadata-agent', | ||||
|     mode    => '0755', | ||||
|     owner   => 'root', | ||||
|     group   => 'root', | ||||
| @@ -98,7 +93,7 @@ class privatecloud::spof( | ||||
|  | ||||
|   Package['corosync'] -> | ||||
|   file { '/usr/lib/ocf/resource.d/heartbeat/heat-engine': | ||||
|     source  => '/usr/lib/ocf/resource.d/openstack/heat-engine', | ||||
|     source  => 'puppet:///privatecloud/heartbeat/heat-engine', | ||||
|     mode    => '0755', | ||||
|     owner   => 'root', | ||||
|     group   => 'root', | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sebastien Badia
					Sebastien Badia