131 lines
3.8 KiB
Ruby
131 lines
3.8 KiB
Ruby
require_relative '../pcmk_common'
|
|
|
|
Puppet::Type.type(:pcmk_remote).provide(:default) do
|
|
desc 'A remote resource definition for pacemaker resource'
|
|
|
|
def build_pcs_auth_cmd()
|
|
if @resource[:pcs_user] == '' or @resource[:pcs_password] == ''
|
|
raise(Puppet::Error, "When using the new pcs cluster node backend for remotes " +
|
|
"'pcs_user' and 'pcs_password must be both defined (#{@resource[:pcs_user]} " +
|
|
"#{@resource[:pcs_password]})")
|
|
end
|
|
# Build the 'pcs resource create' command. Check out the pcs man page :-)
|
|
cmd = 'host auth ' + @resource[:name]
|
|
if not_empty_string(@resource[:remote_address])
|
|
cmd += ' addr=' + @resource[:remote_address]
|
|
end
|
|
cmd += ' -u ' + @resource[:pcs_user] + ' -p "' + @resource[:pcs_password] + '"'
|
|
cmd
|
|
end
|
|
|
|
def build_pcs_remote_cmd()
|
|
resource_params = @resource[:resource_params]
|
|
meta_params = @resource[:meta_params]
|
|
op_params = @resource[:op_params]
|
|
|
|
# Build the 'pcs resource create' command. Check out the pcs man page :-)
|
|
cmd = 'cluster node add-remote ' + @resource[:name]
|
|
if not_empty_string(@resource[:remote_address])
|
|
cmd += ' ' + @resource[:remote_address]
|
|
end
|
|
if not_empty_string(resource_params)
|
|
cmd += ' ' + resource_params
|
|
end
|
|
if not_empty_string(meta_params)
|
|
cmd += ' meta ' + meta_params
|
|
end
|
|
if not_empty_string(op_params)
|
|
cmd += ' op ' + op_params
|
|
end
|
|
cmd
|
|
end
|
|
|
|
### overloaded methods
|
|
def initialize(*args)
|
|
super(*args)
|
|
Puppet.debug("puppet-pacemaker: initialize()")
|
|
# Hash to store the existance state of each resource
|
|
@resources_state = {}
|
|
end
|
|
|
|
def create
|
|
did_resource_exist = @resources_state[@resource[:name]] == PCMK_NOCHANGENEEDED
|
|
|
|
cmd_auth = build_pcs_auth_cmd()
|
|
cmd_remote = build_pcs_remote_cmd()
|
|
|
|
pcs_without_push('create', @resource[:name], cmd_auth, @resource[:tries],
|
|
@resource[:try_sleep], @resource[:post_success_sleep])
|
|
pcs_without_push('create', @resource[:name], cmd_remote, @resource[:tries],
|
|
@resource[:try_sleep], @resource[:post_success_sleep])
|
|
end
|
|
|
|
def destroy
|
|
cmd = 'cluster node delete-remote ' + @resource[:name]
|
|
pcs_without_push('delete', @resource[:name], cmd, @resource[:tries],
|
|
@resource[:try_sleep], @resource[:post_success_sleep])
|
|
end
|
|
|
|
def exists?
|
|
@resources_state[@resource[:name]] = resource_exists?
|
|
did_resource_exist = @resources_state[@resource[:name]] == PCMK_NOCHANGENEEDED
|
|
Puppet.debug("Exists: resource #{@resource[:name]} exists "\
|
|
"#{@resources_state[@resource[:name]]} "\
|
|
"resource deep_compare: #{@resource[:deep_compare]}")
|
|
if did_resource_exist
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
def resource_exists?
|
|
cmd = 'resource config ' + @resource[:name] + ' > /dev/null 2>&1'
|
|
ret = pcs('show', @resource[:name], cmd, @resource[:tries],
|
|
@resource[:try_sleep], false, @resource[:post_success_sleep])
|
|
if ret == false then
|
|
return PCMK_NOTEXISTS
|
|
end
|
|
return PCMK_NOCHANGENEEDED
|
|
end
|
|
|
|
### property methods
|
|
|
|
# It isn't an easy road if you want to make these true
|
|
# puppet-like resource properties. Here is a start if you are feeling brave:
|
|
# https://github.com/cwolferh/puppet-pacemaker/blob/pcmk_resource_improvements_try0/lib/puppet/provider/pcmk_resource/default.rb#L64
|
|
def resource_params
|
|
@resource[:resource_params]
|
|
end
|
|
|
|
def resource_params=(value)
|
|
end
|
|
|
|
def op_params
|
|
@resource[:op_params]
|
|
end
|
|
|
|
def op_params=(value)
|
|
end
|
|
|
|
def meta_params
|
|
@resource[:meta_params]
|
|
end
|
|
|
|
def meta_params=(value)
|
|
end
|
|
|
|
def reconnect_interval
|
|
@resource[:reconnect_interval]
|
|
end
|
|
|
|
def reconnect_interval=(value)
|
|
end
|
|
|
|
def remote_address
|
|
@resource[:remote_address]
|
|
end
|
|
|
|
def remote_address=(value)
|
|
end
|
|
end
|