puppet-tripleo/lib/puppet/parser/functions/docker_volumes_to_storage_m...

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