Manage access project for nova flavors
Add a new 'project' parameter to nova_flavor. This way we can manage to create flavors for specific tenants / projects. Change-Id: Ib2fcc4d73557c199d1b1e7d744f64a335d5b17f4 Signed-off-by: Arnaud Morin <arnaud.morin@corp.ovh.com>
This commit is contained in:
parent
99dc3ba634
commit
14f1029125
|
@ -13,6 +13,7 @@ Puppet::Type.type(:nova_flavor).provide(
|
||||||
def initialize(value={})
|
def initialize(value={})
|
||||||
super(value)
|
super(value)
|
||||||
@property_flush = {}
|
@property_flush = {}
|
||||||
|
@project_flush = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@ -31,6 +32,11 @@ Puppet::Type.type(:nova_flavor).provide(
|
||||||
prop_opts << props_to_s(@resource[:properties])
|
prop_opts << props_to_s(@resource[:properties])
|
||||||
self.class.request('flavor', 'set', prop_opts)
|
self.class.request('flavor', 'set', prop_opts)
|
||||||
end
|
end
|
||||||
|
if @resource[:project]
|
||||||
|
proj_opts = [@resource[:name]]
|
||||||
|
proj_opts << '--project' << @resource[:project]
|
||||||
|
self.class.request('flavor', 'set', proj_opts)
|
||||||
|
end
|
||||||
@property_hash[:ensure] = :present
|
@property_hash[:ensure] = :present
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -76,8 +82,19 @@ Puppet::Type.type(:nova_flavor).provide(
|
||||||
@property_flush[:properties] = value
|
@property_flush[:properties] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def project=(value)
|
||||||
|
@project_flush[:project] = value
|
||||||
|
end
|
||||||
|
|
||||||
def self.instances
|
def self.instances
|
||||||
request('flavor', 'list', ['--long', '--all']).collect do |attrs|
|
request('flavor', 'list', ['--long', '--all']).collect do |attrs|
|
||||||
|
project = request('flavor', 'show', [attrs[:id], '-c', 'access_project_ids'])
|
||||||
|
# Client can return None and this should be considered as ''
|
||||||
|
if project[:access_project_ids].downcase.chomp == 'none'
|
||||||
|
project_value = ''
|
||||||
|
else
|
||||||
|
project_value = project[:access_project_ids]
|
||||||
|
end
|
||||||
properties = Hash[attrs[:properties].scan(/(\S+)='([^']*)'/)] rescue nil
|
properties = Hash[attrs[:properties].scan(/(\S+)='([^']*)'/)] rescue nil
|
||||||
new(
|
new(
|
||||||
:ensure => :present,
|
:ensure => :present,
|
||||||
|
@ -90,7 +107,8 @@ Puppet::Type.type(:nova_flavor).provide(
|
||||||
:is_public => attrs[:is_public].downcase.chomp == 'true'? true : false,
|
:is_public => attrs[:is_public].downcase.chomp == 'true'? true : false,
|
||||||
:swap => attrs[:swap],
|
:swap => attrs[:swap],
|
||||||
:rxtx_factor => attrs[:rxtx_factor],
|
:rxtx_factor => attrs[:rxtx_factor],
|
||||||
:properties => properties
|
:properties => properties,
|
||||||
|
:project => project_value
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -112,6 +130,17 @@ Puppet::Type.type(:nova_flavor).provide(
|
||||||
self.class.request('flavor', 'set', opts)
|
self.class.request('flavor', 'set', opts)
|
||||||
@property_flush.clear
|
@property_flush.clear
|
||||||
end
|
end
|
||||||
|
unless @project_flush.empty?
|
||||||
|
opts = [@resource[:name]]
|
||||||
|
unless @project_flush[:project]
|
||||||
|
opts << '--project' << @project_flush[:project]
|
||||||
|
self.class.request('flavor', 'set', opts)
|
||||||
|
else
|
||||||
|
opts << '--project' << @property_hash[:project]
|
||||||
|
self.class.request('flavor', 'unset', opts)
|
||||||
|
end
|
||||||
|
@project_flush.clear
|
||||||
|
end
|
||||||
end
|
end
|
||||||
private
|
private
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,11 @@
|
||||||
# A key => value hash used to set the properties for the flavor. This is
|
# 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.
|
# the only parameter that can be updated after the creation of the flavor.
|
||||||
# Optional
|
# 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'
|
require 'puppet'
|
||||||
|
|
||||||
Puppet::Type.newtype(:nova_flavor) do
|
Puppet::Type.newtype(:nova_flavor) do
|
||||||
|
@ -100,7 +105,7 @@ Puppet::Type.newtype(:nova_flavor) do
|
||||||
end
|
end
|
||||||
|
|
||||||
newparam(:is_public) do
|
newparam(:is_public) do
|
||||||
desc "Whether the image is public or not. Default true"
|
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)
|
newvalues(/(y|Y)es/, /(n|N)o/, /(t|T)rue/, /(f|F)alse/, true, false)
|
||||||
defaultto(true)
|
defaultto(true)
|
||||||
munge do |v|
|
munge do |v|
|
||||||
|
@ -114,6 +119,11 @@ Puppet::Type.newtype(:nova_flavor) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
newproperty(:project) do
|
||||||
|
desc 'Set flavor access to project (name or ID).'
|
||||||
|
defaultto('')
|
||||||
|
end
|
||||||
|
|
||||||
newproperty(:properties) do
|
newproperty(:properties) do
|
||||||
desc "The set of flavor properties"
|
desc "The set of flavor properties"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue