Add force parameter for all pcmk_ types

Currently only the property class supports the 'force' boolean to
add --force for all pcs calls. Let's add this support to the other
resource classes as well. Background for this is we want to be able
to create an OCF resource inside a bundle even when that OCF resource
does not exist on the host and in this case pcs requires --force
or it will fail with:

  Error: pcs -f /var/lib/pacemaker/cib/puppet-cib-backup20200219-57341-tcztxb create failed: Error: Agent
  'ocf:ovn:ovndb-servers' is not installed or does not provide valid metadata: Metadata query for ocf:ovn:ovndb-servers failed:
  Input/output error, use --force to override

Tested by deploying a full TripleO overcloud with a single OCF resource
passing 'force => true'.

Related-Bug: #1863442

Change-Id: I20eb78a061a334b20f6b2274591c5d313a0af532
This commit is contained in:
Michele Baldessari 2020-02-19 21:04:18 +01:00
parent 83d23b3f34
commit 2b6d519180
14 changed files with 85 additions and 2 deletions

View File

@ -43,8 +43,13 @@ Puppet::Type.type(:pcmk_bundle).provide(:default) do
docker_cmd = container_backend
end
if @resource[:force]
force_cmd = '--force '
else
force_cmd = ''
end
# Build the 'pcs resource create' command. Check out the pcs man page :-)
cmd = 'resource bundle ' + create_cmd + ' ' + @resource[:name] + ' container ' + docker_cmd + ' image=' + @resource[:image]
cmd = force_cmd + 'resource bundle ' + create_cmd + ' ' + @resource[:name] + ' container ' + docker_cmd + ' image=' + @resource[:image]
if replicas
cmd += " replicas=#{replicas}"
end

View File

@ -27,8 +27,13 @@ Puppet::Type.type(:pcmk_resource).provide(:default) do
create_cmd = ' create '
end
if @resource[:force]
force_cmd = '--force '
else
force_cmd = ''
end
# Build the 'pcs resource create' command. Check out the pcs man page :-)
cmd = 'resource' + create_cmd + @resource[:name] + ' ' + @resource[:resource_type]
cmd = force_cmd + 'resource' + create_cmd + @resource[:name] + ' ' + @resource[:resource_type]
if @resource[:resource_type] == 'remote'
if not_empty_string(@resource[:remote_address])
cmd += ' server=' + @resource[:remote_address]

View File

@ -74,6 +74,12 @@ Puppet::Type.newtype(:pcmk_bundle) do
defaultto false
end
newparam(:force, :boolean => true, :parent => Puppet::Parameter::Boolean) do
desc "Wheter to use --force with pcs"
defaultto false
end
newproperty(:image) do
desc "docker image"
end

View File

@ -38,6 +38,12 @@ Puppet::Type.newtype(:pcmk_remote) do
defaultto 0
end
newparam(:force, :boolean => true, :parent => Puppet::Parameter::Boolean) do
desc "Wheter to use --force with pcs"
defaultto false
end
## borrowed from exec.rb
newparam(:tries) do
desc "The number of times to attempt to create a pcs resource.

View File

@ -77,6 +77,12 @@ Puppet::Type.newtype(:pcmk_resource) do
defaultto false
end
newparam(:force, :boolean => true, :parent => Puppet::Parameter::Boolean) do
desc "Wheter to use --force with pcs"
defaultto false
end
newproperty(:op_params) do
desc "op parameters"
end

View File

@ -67,6 +67,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -130,6 +134,7 @@ define pacemaker::resource::bundle(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$container_backend = 'docker',
$deep_compare = hiera('pacemaker::resource::bundle::deep_compare', false),
@ -159,6 +164,7 @@ define pacemaker::resource::bundle(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
container_backend => $container_backend,
deep_compare => $deep_compare,

View File

@ -66,6 +66,10 @@
# (optional) Verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -132,6 +136,7 @@ define pacemaker::resource::filesystem(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$deep_compare = false,
$update_settle_secs = hiera('pacemaker::resource::filesystem::update_settle_secs', 600),
@ -156,6 +161,7 @@ define pacemaker::resource::filesystem(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,

View File

@ -61,6 +61,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -125,6 +129,7 @@ define pacemaker::resource::ip(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$deep_compare = hiera('pacemaker::resource::ip::deep_compare', false),
$update_settle_secs = hiera('pacemaker::resource::ip::update_settle_secs', 600),
@ -162,6 +167,7 @@ define pacemaker::resource::ip(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,

View File

@ -57,6 +57,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -120,6 +124,7 @@ define pacemaker::resource::lsb(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$deep_compare = false,
$update_settle_secs = hiera('pacemaker::resource::lsb::update_settle_secs', 600),
@ -137,6 +142,7 @@ define pacemaker::resource::lsb(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,

View File

@ -61,6 +61,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -125,6 +129,7 @@ define pacemaker::resource::ocf(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$deep_compare = hiera('pacemaker::resource::ocf::deep_compare', false),
$update_settle_secs = hiera('pacemaker::resource::ocf::update_settle_secs', 600),
@ -143,6 +148,7 @@ define pacemaker::resource::ocf(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,

View File

@ -46,6 +46,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -106,6 +110,7 @@ define pacemaker::resource::remote(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$pcs_user = 'hacluster',
$pcs_password = undef,
$location_rule = undef,
@ -126,6 +131,7 @@ define pacemaker::resource::remote(
pcs_password => $pcs_password,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,
force => $force,
}
} else {
pcmk_resource { $name:
@ -140,6 +146,7 @@ define pacemaker::resource::remote(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,

View File

@ -56,6 +56,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -119,6 +123,7 @@ define pacemaker::resource::route(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$deep_compare = false,
$update_settle_secs = hiera('pacemaker::resource::route::update_settle_secs', 600),
@ -155,6 +160,7 @@ define pacemaker::resource::route(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,

View File

@ -57,6 +57,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -120,6 +124,7 @@ define pacemaker::resource::service(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$deep_compare = false,
$update_settle_secs = hiera('pacemaker::resource::service::update_settle_secs', 600),
@ -141,6 +146,7 @@ define pacemaker::resource::service(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,

View File

@ -57,6 +57,10 @@
# (optional) Whether to verify creation of resource
# Defaults to false
#
# [*force*]
# (optional) Whether to force creation via pcs --force
# Defaults to false
#
# [*location_rule*]
# (optional) Add a location constraint before actually enabling
# the resource. Must be a hash like the following example:
@ -120,6 +124,7 @@ define pacemaker::resource::systemd(
$tries = 1,
$try_sleep = 0,
$verify_on_create = false,
$force = false,
$location_rule = undef,
$deep_compare = false,
$update_settle_secs = hiera('pacemaker::resource::systemd::update_settle_secs', 600),
@ -137,6 +142,7 @@ define pacemaker::resource::systemd(
tries => $tries,
try_sleep => $try_sleep,
verify_on_create => $verify_on_create,
force => $force,
location_rule => $location_rule,
deep_compare => $deep_compare,
update_settle_secs => $update_settle_secs,