puppet-pacemaker/manifests/new/wrapper.pp

215 lines
5.5 KiB
Puppet

# == Define: pacemaker::new::wrapper
#
# This definition can be added to a simple service to turn it into
# a Pacemaker service together with Pacemaker resource and handler creation.
#
# [*ensure*]
# (optional) Create or remove the files
# Default: present
#
# [*ocf_root_path*]
# (optional) Path to the ocf folder
# Default: /usr/lib/ocf
#
# [*primitive_class*]
# Class of the created primitive
# Default: ocf
#
# [*primitive_provider*]
# (optional) Provider of the created primitive
# Default: undef
#
# [*primitive_type*]
# Type of the created primitive. Set this to your OCF script.
# Default: undef
#
# [*prefix*]
# (optional) Use p_ prefix for the Pacemaer primitive
# Default: false
#
# [*service*]
# Set the rela name of the service. The title will be used unless set.
# Default: undef
#
# [*parameters*]
# (optional) Instance attributes hash of the primitive
# Default: undef
#
# [*operations*]
# (optional) Operations hash of the primitive
# Default: undef
#
# [*metadata*]
# (optional) Primitive meta-attributes hash
# Default: undef
#
# [*complex_metadata*]
# (optional) Meta-attributes of the complex primitive
# Default: undef
#
# [*complex_type*]
# (optional) Set this to 'clone' or 'master' to create a complex primitive
# Default: undef
#
# [*use_handler*]
# (optional) Should the handler script be created
# Default: true
#
# [*handler_root_path*]
# (optional) Where the handler should be placed
# Default: /usr/local/bin
#
# [*ocf_script_template*]
# (optional) Generate the OCF script from this template
# Default: undef
#
# [*ocf_script_file*]
# (optional) Download the OCF script from this file
# Default: undef
#
# [*create_primitive*]
# (optional) Should the Pcemaker primitive be created
# Default: true
#
# [*service_override*]
# Should the service provider be overridden?
# Default: true
#
# [*service_provider*]
# (optional) The name of Pacemaker service provider
# to be set to this service.
# Default: pacemaker_xml
#
define pacemaker::new::wrapper (
$ensure = 'present',
$ocf_root_path = '/usr/lib/ocf',
$primitive_class = 'ocf',
$primitive_provider = undef,
$primitive_type = undef,
$prefix = false,
$service = undef,
$parameters = undef,
$operations = undef,
$metadata = undef,
$complex_metadata = undef,
$complex_type = undef,
$use_handler = true,
$handler_root_path = '/usr/local/bin',
$ocf_script_template = undef,
$ocf_script_file = undef,
$create_primitive = true,
$service_override = true,
$service_provider = 'pacemaker_xml'
) {
validate_absolute_path($ocf_root_path)
validate_string($primitive_class)
validate_string($primitive_type)
validate_bool($prefix)
validate_absolute_path($handler_root_path)
validate_bool($create_primitive)
validate_bool($service_override)
if empty($primitive_type) or empty($primitive_class) {
fail 'Both primitive_type and primitive_class should be set!'
}
$service_name = pick($service, $name)
if $prefix {
$primitive_name = "p_${service_name}"
} else {
$primitive_name = $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}"
if $service_override {
Service <| title == $service_name |> {
provider => $service_provider,
}
Service <| name == $service_name |> {
provider => $service_provider,
}
}
if $create_primitive {
pacemaker_resource { $primitive_name :
ensure => $ensure,
primitive_class => $primitive_class,
primitive_type => $primitive_type,
primitive_provider => $primitive_provider,
parameters => $parameters,
operations => $operations,
metadata => $metadata,
complex_metadata => $complex_metadata,
complex_type => $complex_type,
}
}
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 => $ensure,
path => $ocf_handler_path,
owner => 'root',
group => 'root',
mode => '0700',
content => template('pacemaker/ocf_handler.sh.erb'),
}
}
File <| title == $ocf_script_name |> ->
Pacemaker_resource <| title == $primitive_name |>
File <| title == $ocf_script_name |> ~>
Service <| title == $service_name |>
Pacemaker_resource <| title == $primitive_name |> ->
Service <| title == $service_name |>
File <| title == $ocf_handler_name |> ->
Service <| title == $service_name |>
File <| title == $ocf_script_name |> ~>
Service <| name == $service_name |>
Pacemaker_resource <| title == $primitive_name |> ->
Service <| name == $service_name |>
File <| title == $ocf_handler_name |> ->
Service <| name == $service_name |>
}