8a85bb0860
This allows to gain access to all neutron commands using composability, see[1] for an example. It removes some redundancy as well. Finally, it looks more like the openstacklib/**/openstack.rb provider code. [1] https://review.openstack.org/#/c/347468/ Change-Id: Iad0354f5babd86822e37053f3f7a1134803fd4f8
88 lines
2.3 KiB
Ruby
88 lines
2.3 KiB
Ruby
require File.join(File.dirname(__FILE__), '..','..','..',
|
|
'puppet/provider/neutron')
|
|
|
|
Puppet::Type.type(:neutron_router_interface).provide(
|
|
:neutron,
|
|
:parent => Puppet::Provider::Neutron
|
|
) do
|
|
desc <<-EOT
|
|
Neutron provider to manage neutron_router_interface type.
|
|
|
|
Assumes that the neutron service is configured on the same host.
|
|
|
|
It is not possible to manage an interface for the subnet used by
|
|
the gateway network, and such an interface will appear in the list
|
|
of resources ('puppet resource [type]'). Attempting to manage the
|
|
gateway interfae will result in an error.
|
|
|
|
EOT
|
|
|
|
mk_resource_methods
|
|
|
|
def self.instances
|
|
subnet_name_hash = {}
|
|
Puppet::Type.type('neutron_subnet').instances.each do |instance|
|
|
subnet_name_hash[instance.provider.id] = instance.provider.name
|
|
end
|
|
instances_ = []
|
|
Puppet::Type.type('neutron_router').instances.each do |instance|
|
|
list_router_ports(instance.provider.id).each do |port_hash|
|
|
router_name = instance.provider.name
|
|
subnet_name = subnet_name_hash[port_hash['subnet_id']]
|
|
name = "#{router_name}:#{subnet_name}"
|
|
instances_ << new(
|
|
:ensure => :present,
|
|
:name => name,
|
|
:id => port_hash['id'],
|
|
:port => port_hash['name']
|
|
)
|
|
end
|
|
end
|
|
return instances_
|
|
end
|
|
|
|
def self.prefetch(resources)
|
|
instances_ = instances
|
|
resources.keys.each do |name|
|
|
if provider = instances_.find{ |instance| instance.name == name }
|
|
resources[name].provider = provider
|
|
end
|
|
end
|
|
end
|
|
|
|
def exists?
|
|
@property_hash[:ensure] == :present
|
|
end
|
|
|
|
def create
|
|
router,subnet = resource[:name].split(':', 2)
|
|
port = resource[:port]
|
|
args = ["router-interface-add", "--format=shell", router]
|
|
if port
|
|
args << "port=#{port}"
|
|
else
|
|
args << "subnet=#{subnet}"
|
|
end
|
|
results = auth_neutron(args)
|
|
|
|
@property_hash = {
|
|
:ensure => :present,
|
|
:name => resource[:name],
|
|
}
|
|
end
|
|
|
|
def router_name
|
|
name.split(':', 2).first
|
|
end
|
|
|
|
def subnet_name
|
|
name.split(':', 2).last
|
|
end
|
|
|
|
def destroy
|
|
auth_neutron('router-interface-delete', router_name, subnet_name)
|
|
@property_hash[:ensure] = :absent
|
|
end
|
|
|
|
end
|