fuel-plugin-cisco-aci/deployment_scripts/puppet/modules/neutron/lib/puppet/provider/neutron_router_interface/neutron.rb

94 lines
2.5 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
commands :neutron => 'neutron'
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)
if results =~ /Added interface.* to router/
@property_hash = {
:ensure => :present,
:name => resource[:name],
}
else
fail("did not get expected message on interface addition, got #{results}")
end
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