155 lines
3.5 KiB
Ruby
155 lines
3.5 KiB
Ruby
# nova_flavor type
|
|
#
|
|
# == Parameters
|
|
# [*name*]
|
|
# Name for the flavor
|
|
# Required
|
|
#
|
|
# [*id*]
|
|
# Unique ID (integer or UUID) for the flavor.
|
|
# Optional
|
|
#
|
|
# [*ram*]
|
|
# Amount of RAM to use (in megabytes).
|
|
# Optional
|
|
#
|
|
# [*disk*]
|
|
# Amount of disk space (in gigabytes) to use for the root (/) partition.
|
|
# Optional
|
|
#
|
|
# [*vcpus*]
|
|
# Number of virtual CPUs to use.
|
|
# Optional
|
|
#
|
|
# [*ephemeral*]
|
|
# Amount of disk space (in gigabytes) to use for the ephemeral partition.
|
|
# Optional
|
|
#
|
|
# [*swap*]
|
|
# Amount of swap space (in megabytes) to use.
|
|
# Optional
|
|
#
|
|
# [*rxtx_factor*]
|
|
# The slice of bandwidth that the instances with this flavor can use
|
|
# (through the Virtual Interface (vif) creation in the hypervisor)
|
|
# Optional
|
|
#
|
|
# [*is_public*]
|
|
# A boolean to indicate visibility
|
|
# Optional
|
|
#
|
|
# [*properties*]
|
|
# A key => value hash used to set the properties for the flavor. This is
|
|
# the only parameter that can be updated after the creation of the flavor.
|
|
# Optional
|
|
#
|
|
# [*project*]
|
|
# Set flavor access to project (name or ID).
|
|
# If you set this option, take care to set is_public to false.
|
|
# Optional
|
|
require 'puppet'
|
|
|
|
Puppet::Type.newtype(:nova_flavor) do
|
|
|
|
@doc = "Manage creation of nova flavors."
|
|
|
|
ensurable
|
|
|
|
autorequire(:nova_config) do
|
|
['www_authenticate_uri', 'project_name', 'username', 'password']
|
|
end
|
|
|
|
# Require the nova-api service to be running
|
|
autorequire(:service) do
|
|
['nova-api']
|
|
end
|
|
|
|
newparam(:name, :namevar => true) do
|
|
desc 'Name for the flavor'
|
|
validate do |value|
|
|
if not value.is_a? String
|
|
raise ArgumentError, "name parameter must be a String"
|
|
end
|
|
unless value =~ /^[a-zA-Z0-9\-\._]+$/
|
|
raise ArgumentError, "#{value} is not a valid name"
|
|
end
|
|
end
|
|
end
|
|
|
|
newparam(:id) do
|
|
desc 'Unique ID (integer or UUID) for the flavor.'
|
|
end
|
|
|
|
newparam(:ram) do
|
|
desc 'Amount of RAM to use (in megabytes).'
|
|
end
|
|
|
|
newparam(:disk) do
|
|
desc 'Amount of disk space (in gigabytes) to use for the root (/) partition.'
|
|
end
|
|
|
|
newparam(:vcpus) do
|
|
desc 'Number of virtual CPUs to use.'
|
|
end
|
|
|
|
newparam(:ephemeral) do
|
|
desc 'Amount of disk space (in gigabytes) to use for the ephemeral partition.'
|
|
end
|
|
|
|
newparam(:swap) do
|
|
desc 'Amount of swap space (in megabytes) to use.'
|
|
end
|
|
|
|
newparam(:rxtx_factor) do
|
|
desc 'The slice of bandwidth that the instances with this flavor can use (through the Virtual Interface (vif) creation in the hypervisor)'
|
|
end
|
|
|
|
newparam(:is_public) do
|
|
desc "Whether the flavor is public or not. Default true"
|
|
newvalues(/(y|Y)es/, /(n|N)o/, /(t|T)rue/, /(f|F)alse/, true, false)
|
|
defaultto(true)
|
|
munge do |v|
|
|
if v =~ /^(y|Y)es$/
|
|
:true
|
|
elsif v =~ /^(n|N)o$/
|
|
:false
|
|
else
|
|
v.to_s.downcase.to_sym
|
|
end
|
|
end
|
|
end
|
|
|
|
newproperty(:project) do
|
|
desc 'Set flavor access to project (name or ID).'
|
|
defaultto('')
|
|
end
|
|
|
|
newproperty(:properties) do
|
|
desc "The set of flavor properties"
|
|
|
|
munge do |value|
|
|
return value if value.is_a? Hash
|
|
|
|
# wrap property value in commas
|
|
value.gsub!(/=(\w+)/, '=\'\1\'')
|
|
Hash[value.scan(/(\S+)='([^']*)'/)]
|
|
end
|
|
|
|
validate do |value|
|
|
return true if value.is_a? Hash
|
|
|
|
value.split(',').each do |property|
|
|
raise ArgumentError, "Key/value pairs should be separated by an =" unless property.include?('=')
|
|
end
|
|
end
|
|
end
|
|
|
|
validate do
|
|
unless self[:name]
|
|
raise(ArgumentError, 'Name must be set')
|
|
end
|
|
end
|
|
|
|
end
|
|
|