53 lines
1.7 KiB
Ruby
53 lines
1.7 KiB
Ruby
# This custom function converts an array of docker volumes to the storage_maps
|
|
# hash required by the pacemaker::resource::bundle resource. A prefix is added
|
|
# to each entry in the storage map to ensure the Puppet resources are unique.
|
|
#
|
|
# Given:
|
|
# docker_volumes = ["/src/vol1:/tgt/vol1", "/src/vol2:/tgt/vol2:ro"]
|
|
# prefix = "my-prefix"
|
|
# Returns:
|
|
# storage_maps = {
|
|
# "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",
|
|
# }
|
|
# }
|
|
module Puppet::Parser::Functions
|
|
newfunction(:docker_volumes_to_storage_maps, :arity => 2, :type => :rvalue,
|
|
:doc => <<-EOS
|
|
This function converts an array of docker volumes (SOURCE:TARGET[:OPTIONS])
|
|
to a pacemaker::resource::bundle storage_map (a hash).
|
|
EOS
|
|
) do |argv|
|
|
docker_volumes = argv[0]
|
|
prefix = argv[1]
|
|
|
|
unless docker_volumes.is_a?(Array)
|
|
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
|
|
docker_volumes.each do |docker_vol|
|
|
source, target, options = docker_vol.split(":")
|
|
unless options
|
|
options = "rw"
|
|
end
|
|
storage_maps[prefix + source.gsub("/", "-")] = {
|
|
"source-dir" => source,
|
|
"target-dir" => target,
|
|
"options" => options,
|
|
}
|
|
end
|
|
return storage_maps
|
|
end
|
|
end
|
|
|