# == Class: openstack_extras::pacemaker::service # # Configures Pacemaker resource for a specified service and # overrides its service provider to Pacemaker. # Assumes there is a service already exists in the Puppet catalog. # For example, the one, such as nova-api, heat-engine, neutron-agent-l3 # and so on, created by other core Puppet modules for Openstack. # # === Parameters # # [*ensure*] # (optional) The state of the service provided by Pacemaker # Defaults to present # # [*ocf_root_path*] # (optional) The path for OCF scripts # Defaults to /usr/lib/ocf # # [*primitive_class*] # (optional) The class of Pacemaker resource (primitive) # Defaults to ocf # # [*primitive_provider*] # (optional) The provider of OCF scripts # Defaults to pacemaker # # [*primitive_type*] # (optional) The type of the primitive (OCF file name). # Used with the other parameters as a full path to OCF script: # primitive_class/primitive_provider/primitive_type # resided at ocf_root_path/resource.d # Defaults to false # # [*parameters*] # (optional) The hash of parameters for a primitive # Defaults to false # # [*operations*] # (optional) The hash of operations for a primitive # Defaults to false # # [*metadata*] # (optional) The hash of metadata for a primitive # Defaults to false # # [*ms_metadata*] # (optional) The hash of ms_metadata for a primitive # Defaults to false # # [*use_handler*] # (optional) The handler (wrapper script) for OCF script # Could be useful for debug and informational purposes. # It sets some default values like OCF_ROOT in order to # simplify debugging of OCF scripts # Defaults to true # # [*handler_root_path*] # (optional) The path for a handler script # Defaults to /usr/local/bin # # [*ocf_script_template*] # (optional) ERB template for OCF script for Pacemaker # resource # Defaults to false # # [*ocf_script_file*] # (optional) OCF file for Pacemaker resource # Defaults to false # # [*create_primitive*] # (optional) Controls Pacemaker primitive creation # Defaults to true # # === Examples # # Will create resource and ensure Pacemaker provider for # 'some-api-service' with the given OCF scripte template and # parameters: # # $metadata = { # 'resource-stickiness' => '1' # } # $operations = { # 'monitor' => { # 'interval' => '20', # 'timeout' => '30', # }, # 'start' => { # 'timeout' => '60', # }, # 'stop' => { # 'timeout' => '60', # }, # } # $ms_metadata = { # 'interleave' => true, # } # # openstack_extras::pacemaker::service { 'some-api-service' : # primitive_type => 'some-api-service', # metadata => $metadata, # ms_metadata => $ms_metadata, # operations => $operations, # ocf_script_template => 'some_module/some_api_service.ocf.erb', # } # define openstack_extras::pacemaker::service ( $ensure = 'present', $ocf_root_path = '/usr/lib/ocf', $primitive_class = 'ocf', $primitive_provider = 'pacemaker', $primitive_type = false, $parameters = false, $operations = false, $metadata = false, $ms_metadata = false, $use_handler = true, $handler_root_path = '/usr/local/bin', $ocf_script_template = false, $ocf_script_file = false, $create_primitive = true, ) { $service_name = $title $primitive_name = "p_${service_name}" $ocf_script_name = "${service_name}-ocf-file" $ocf_handler_name = "ocf_handler_${service_name}" $ocf_dir_path = "${ocf_root_path}/resource.d" $ocf_script_path = "${ocf_dir_path}/${primitive_provider}/${$primitive_type}" $ocf_handler_path = "${handler_root_path}/${ocf_handler_name}" Service<| title == $service_name |> { provider => 'pacemaker', } Service<| name == $service_name |> { provider => 'pacemaker', } if $create_primitive { cs_primitive { $primitive_name : ensure => $ensure, primitive_class => $primitive_class, primitive_type => $primitive_type, provided_by => $primitive_provider, parameters => $parameters, operations => $operations, metadata => $metadata, ms_metadata => $ms_metadata, } } if $ocf_script_template or $ocf_script_file { file { $ocf_script_name : ensure => $ensure, path => $ocf_script_path, mode => '0755', owner => 'root', group => 'root', } if $ocf_script_template { File[$ocf_script_name] { content => template($ocf_script_template), } } elsif $ocf_script_file { File[$ocf_script_name] { source => "puppet:///modules/${ocf_script_file}", } } } if ($primitive_class == 'ocf') and ($use_handler) { file { $ocf_handler_name : ensure => present, path => $ocf_handler_path, owner => 'root', group => 'root', mode => '0700', content => template('openstack_extras/ocf_handler.erb'), } } File<| title == $ocf_script_name |> -> Cs_primitive<| title == $primitive_name |> File<| title == $ocf_script_name |> ~> Service[$service_name] Cs_primitive<| title == $primitive_name |> -> Service[$service_name] File<| title == $ocf_handler_name |> -> Service[$service_name] }