Update parser functions to 4.x api
This change updates additional parser functions we have to use teh puppet 4.x function api. This includes some basic unit tests to ensure they continue to function as expected. Change-Id: Iebeb82b2890216bed139219441718fffc4004391 Related-Bug: #1799786
This commit is contained in:
parent
8d889af7d4
commit
4a576293c1
@ -18,22 +18,14 @@
|
|||||||
# "options" => "ro",
|
# "options" => "ro",
|
||||||
# }
|
# }
|
||||||
# }
|
# }
|
||||||
module Puppet::Parser::Functions
|
Puppet::Functions.create_function(:'docker_volumes_to_storage_maps') do
|
||||||
newfunction(:docker_volumes_to_storage_maps, :arity => 2, :type => :rvalue,
|
dispatch :docker_volumes_to_storage_maps do
|
||||||
:doc => <<-EOS
|
param 'Array', :docker_volumes
|
||||||
This function converts an array of docker volumes (SOURCE:TARGET[:OPTIONS])
|
param 'String', :prefix
|
||||||
to a pacemaker::resource::bundle storage_map (a hash).
|
return_type 'Hash'
|
||||||
EOS
|
end
|
||||||
) do |argv|
|
|
||||||
docker_volumes = argv[0]
|
|
||||||
prefix = argv[1]
|
|
||||||
|
|
||||||
unless docker_volumes.is_a?(Array)
|
def docker_volumes_to_storage_maps(docker_volumes, prefix)
|
||||||
raise Puppet::ParseError, "docker_volumes_to_storage_maps: Argument 'docker_volumes' must be an array. The value given was: #{docker_volumes}"
|
|
||||||
end
|
|
||||||
unless prefix.is_a?(String)
|
|
||||||
raise Puppet::ParseError, "docker_volumes_to_storage_maps: Argument 'prefix' must be an string. The value given was: #{prefix}"
|
|
||||||
end
|
|
||||||
storage_maps = Hash.new
|
storage_maps = Hash.new
|
||||||
docker_volumes.each do |docker_vol|
|
docker_volumes.each do |docker_vol|
|
||||||
source, target, options = docker_vol.split(":")
|
source, target, options = docker_vol.split(":")
|
@ -1,13 +1,16 @@
|
|||||||
# Custom function to extract the index from a list.
|
# Custom function to extract the index from a list.
|
||||||
# The list are a list of hostname, and the index is the n'th
|
# The list are a list of hostname, and the index is the n'th
|
||||||
# position of the host in list
|
# position of the host in list
|
||||||
module Puppet::Parser::Functions
|
Puppet::Functions.create_function(:extract_id) do
|
||||||
newfunction(:extract_id, :type => :rvalue) do |argv|
|
dispatch :extract_id do
|
||||||
hosts = argv[0]
|
param 'Variant[Array, String]', :hosts
|
||||||
|
param 'String', :hostname
|
||||||
|
end
|
||||||
|
|
||||||
|
def extract_id(hosts, hostname)
|
||||||
if hosts.class != Array
|
if hosts.class != Array
|
||||||
hosts = [hosts]
|
hosts = [hosts]
|
||||||
end
|
end
|
||||||
hostname = argv[1]
|
|
||||||
hash = Hash[hosts.map.with_index.to_a]
|
hash = Hash[hosts.map.with_index.to_a]
|
||||||
return hash[hostname].to_i + 1
|
return hash[hostname].to_i + 1
|
||||||
end
|
end
|
@ -18,14 +18,14 @@
|
|||||||
# Puppet parser.
|
# Puppet parser.
|
||||||
#
|
#
|
||||||
|
|
||||||
module Puppet::Parser::Functions
|
Puppet::Functions.create_function(:list_to_hash) do
|
||||||
newfunction(:list_to_hash, :type => :rvalue, :doc => <<-EOS
|
dispatch :list_to_hash do
|
||||||
This function returns an hash from a specified array
|
param 'Array', :arr1
|
||||||
EOS
|
param 'Array', :arr2
|
||||||
) do |argv|
|
end
|
||||||
arr1 = argv[0]
|
|
||||||
arr2 = argv[1]
|
def list_to_hash(arr1, arr2)
|
||||||
h = arr1.each_with_object({}) { |v,h| h[v] = arr2 }
|
hh = arr1.each_with_object({}) { |v,h| h[v] = arr2 }
|
||||||
return h
|
return hh
|
||||||
end
|
end
|
||||||
end
|
end
|
@ -3,12 +3,12 @@
|
|||||||
# because a not-so-good design of the puppet-midonet module
|
# because a not-so-good design of the puppet-midonet module
|
||||||
# and we hope to deprecate it soon.
|
# and we hope to deprecate it soon.
|
||||||
|
|
||||||
module Puppet::Parser::Functions
|
Puppet::Functions.create_function(:list_to_zookeeper_hash) do
|
||||||
newfunction(:list_to_zookeeper_hash, :type => :rvalue, :doc => <<-EOS
|
dispatch :list_to_zookeeper_hash do
|
||||||
This function returns Zookeper configuration list of hash
|
param 'Variant[Array, String]', :zk_list
|
||||||
EOS
|
end
|
||||||
) do |argv|
|
|
||||||
zk_list = argv[0]
|
def list_to_zookeeper_hash(zk_list)
|
||||||
if zk_list.class != Array
|
if zk_list.class != Array
|
||||||
zk_list = [zk_list]
|
zk_list = [zk_list]
|
||||||
end
|
end
|
@ -40,12 +40,14 @@ class Puppet::Provider::Noop < Puppet::Provider
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module Puppet::Parser::Functions
|
Puppet::Functions.create_function(:noop_resource) do
|
||||||
newfunction(:noop_resource, :type => :rvalue, :doc => "Create a default noop provider for the specified resource.") do |arg|
|
dispatch :noop_resource do
|
||||||
if arg[0].class == String
|
param 'String', :res
|
||||||
Puppet::Type.type(arg[0].downcase.to_sym).provide(:noop, :parent => Puppet::Provider::Noop) do
|
end
|
||||||
defaultfor :osfamily => :redhat
|
|
||||||
end
|
def noop_resource(res)
|
||||||
|
Puppet::Type.type(res.downcase.to_sym).provide(:noop, :parent => Puppet::Provider::Noop) do
|
||||||
|
defaultfor :osfamily => :redhat
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
27
lib/puppet/functions/tripleo_swift_devices.rb
Normal file
27
lib/puppet/functions/tripleo_swift_devices.rb
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Build Swift devices list from the parts, e.g. for:
|
||||||
|
# raw_disk_prefix = 'r1z1-'
|
||||||
|
# swift_storage_node_ips = ['192.168.1.12', '192.168.1.13']
|
||||||
|
# raw_disks = [':%PORT%/device1', ':%PORT%/device2']
|
||||||
|
#
|
||||||
|
# devices will be ['r1z1-192.168.1.12:%PORT%/device1',
|
||||||
|
# 'r1z1-192.168.1.12:%PORT%/device2'
|
||||||
|
# 'r1z1-192.168.1.13:%PORT%/device1'
|
||||||
|
# 'r1z1-192.168.1.13:%PORT%/device2']
|
||||||
|
Puppet::Functions.create_function(:tripleo_swift_devices) do
|
||||||
|
dispatch :tripleo_swift_devices do
|
||||||
|
param 'String', :raw_disk_prefix
|
||||||
|
param 'Array', :swift_node_ips
|
||||||
|
param 'Array', :raw_disks
|
||||||
|
end
|
||||||
|
|
||||||
|
def tripleo_swift_devices(raw_disk_prefix, swift_node_ips, raw_disks)
|
||||||
|
devices = []
|
||||||
|
for ip in swift_node_ips do
|
||||||
|
for disk in raw_disks do
|
||||||
|
devices << "#{raw_disk_prefix}#{ip}#{disk}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return devices
|
||||||
|
end
|
||||||
|
end
|
@ -1,39 +0,0 @@
|
|||||||
# Build Swift devices list from the parts, e.g. for:
|
|
||||||
# raw_disk_prefix = 'r1z1-'
|
|
||||||
# swift_storage_node_ips = ['192.168.1.12', '192.168.1.13']
|
|
||||||
# raw_disks = [':%PORT%/device1', ':%PORT%/device2']
|
|
||||||
#
|
|
||||||
# devices will be ['r1z1-192.168.1.12:%PORT%/device1',
|
|
||||||
# 'r1z1-192.168.1.12:%PORT%/device2'
|
|
||||||
# 'r1z1-192.168.1.13:%PORT%/device1'
|
|
||||||
# 'r1z1-192.168.1.13:%PORT%/device2']
|
|
||||||
module Puppet::Parser::Functions
|
|
||||||
newfunction(:tripleo_swift_devices, :arity =>3, :type => :rvalue,
|
|
||||||
:doc => ("Build list of swift devices the TripleO way:" +
|
|
||||||
"from a raw disk prefix, a list of swift storage" +
|
|
||||||
"node IPs, and a list of raw disks.")) do |args|
|
|
||||||
|
|
||||||
raw_disk_prefix = args[0]
|
|
||||||
swift_node_ips = args[1]
|
|
||||||
raw_disks = args[2]
|
|
||||||
|
|
||||||
unless raw_disk_prefix.is_a?(String)
|
|
||||||
raise Puppet::ParseError, "tripleo_swift_devices: Argument 'raw_disk_prefix' must be a string. The value given was: #{raw_disk_prefix}"
|
|
||||||
end
|
|
||||||
unless swift_node_ips.is_a?(Array)
|
|
||||||
raise Puppet::ParseError, "tripleo_swift_devices: Argument 'swift_node_ips' must be an array. The value given was: #{swift_node_ips}"
|
|
||||||
end
|
|
||||||
unless raw_disks.is_a?(Array)
|
|
||||||
raise Puppet::ParseError, "tripleo_swift_devices: Argument 'raw_disks' must be an array. The value given was: #{raw_disks}"
|
|
||||||
end
|
|
||||||
|
|
||||||
devices = []
|
|
||||||
for ip in swift_node_ips do
|
|
||||||
for disk in raw_disks do
|
|
||||||
devices << "#{raw_disk_prefix}#{ip}#{disk}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return devices
|
|
||||||
end
|
|
||||||
end
|
|
19
spec/functions/docker_volumes_to_storage_maps_spec.rb
Normal file
19
spec/functions/docker_volumes_to_storage_maps_spec.rb
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'docker_volumes_to_storage_maps' do
|
||||||
|
it {
|
||||||
|
should run.with_params(["/src/vol1:/tgt/vol1", "/src/vol2:/tgt/vol2:ro"], "my-prefix")
|
||||||
|
.and_return({
|
||||||
|
"my-prefix-src-vol1" => {
|
||||||
|
"source-dir" => "/src/vol1",
|
||||||
|
"target-dir" => "/tgt/vol1",
|
||||||
|
"options" => "rw",
|
||||||
|
},
|
||||||
|
"my-prefix-src-vol2" => {
|
||||||
|
"source-dir" => "/src/vol2",
|
||||||
|
"target-dir" => "/tgt/vol2",
|
||||||
|
"options" => "ro",
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
end
|
6
spec/functions/extract_id_spec.rb
Normal file
6
spec/functions/extract_id_spec.rb
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'extract_id' do
|
||||||
|
it { should run.with_params('127.0.0.1', '127.0.0.1').and_return(1) }
|
||||||
|
it { should run.with_params(["127.0.0.1", "127.0.0.2"], "127.0.0.2").and_return(2) }
|
||||||
|
end
|
11
spec/functions/list_to_hash_spec.rb
Normal file
11
spec/functions/list_to_hash_spec.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'list_to_hash' do
|
||||||
|
it {
|
||||||
|
should run.with_params(['192.168.0.1:5000', '192.168.0.2:5000'], ['transparent'])
|
||||||
|
.and_return({
|
||||||
|
'192.168.0.1:5000' => ['transparent'],
|
||||||
|
'192.168.0.2:5000' => ['transparent'],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
end
|
15
spec/functions/list_to_zookeeper_hash_spec.rb
Normal file
15
spec/functions/list_to_zookeeper_hash_spec.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'list_to_zookeeper_hash' do
|
||||||
|
it {
|
||||||
|
should run.with_params('127.0.0.1').and_return([
|
||||||
|
{ 'ip' => '127.0.0.1', 'port' => 2181 }
|
||||||
|
])
|
||||||
|
}
|
||||||
|
it {
|
||||||
|
should run.with_params(['127.0.0.1', '127.0.0.2']).and_return([
|
||||||
|
{ 'ip' => '127.0.0.1', 'port' => 2181 },
|
||||||
|
{ 'ip' => '127.0.0.2', 'port' => 2181 }
|
||||||
|
])
|
||||||
|
}
|
||||||
|
end
|
16
spec/functions/noop_resource_spec.rb
Normal file
16
spec/functions/noop_resource_spec.rb
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'noop_resource' do
|
||||||
|
it {
|
||||||
|
should run.with_params('nova_config').and_return(true)
|
||||||
|
}
|
||||||
|
context 'noop a puppet resource' do
|
||||||
|
let (:pre_condition) {
|
||||||
|
'noop_resource("file")
|
||||||
|
file { "bar": path => "/baz" }'
|
||||||
|
}
|
||||||
|
it {
|
||||||
|
expect(-> {catalogue}).to contain_file('bar')
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
13
spec/functions/tripleo_swift_devices_spec.rb
Normal file
13
spec/functions/tripleo_swift_devices_spec.rb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'tripleo_swift_devices' do
|
||||||
|
it {
|
||||||
|
should run.with_params('r1z1-', ['192.168.1.12', '192.168.1.13'], [':%PORT%/device1', ':%PORT%/device2'])
|
||||||
|
.and_return([
|
||||||
|
'r1z1-192.168.1.12:%PORT%/device1',
|
||||||
|
'r1z1-192.168.1.12:%PORT%/device2',
|
||||||
|
'r1z1-192.168.1.13:%PORT%/device1',
|
||||||
|
'r1z1-192.168.1.13:%PORT%/device2',
|
||||||
|
])
|
||||||
|
}
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user