]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/neutron/lib/puppet/provider/neutron_router/neutron.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / neutron / lib / puppet / provider / neutron_router / neutron.rb
1 require File.join(File.dirname(__FILE__), '..','..','..',
2                   'puppet/provider/neutron')
3
4 Puppet::Type.type(:neutron_router).provide(
5   :neutron,
6   :parent => Puppet::Provider::Neutron
7 ) do
8   desc <<-EOT
9     Neutron provider to manage neutron_router type.
10
11     Assumes that the neutron service is configured on the same host.
12   EOT
13
14   commands :neutron => 'neutron'
15
16   mk_resource_methods
17
18   def self.instances
19     list_neutron_resources('router').collect do |id|
20       attrs = get_neutron_resource_attrs('router', id)
21       new(
22         :ensure                    => :present,
23         :name                      => attrs['name'],
24         :id                        => attrs['id'],
25         :admin_state_up            => attrs['admin_state_up'],
26         :external_gateway_info     => attrs['external_gateway_info'],
27         :status                    => attrs['status'],
28         :tenant_id                 => attrs['tenant_id']
29       )
30     end
31   end
32
33   def self.prefetch(resources)
34     instances_ = instances
35     resources.keys.each do |name|
36       if provider = instances_.find{ |instance| instance.name == name }
37         resources[name].provider = provider
38       end
39     end
40   end
41
42   def exists?
43     @property_hash[:ensure] == :present
44   end
45
46   def create
47     opts = Array.new
48
49     if @resource[:admin_state_up] == 'False'
50       opts << '--admin-state-down'
51     end
52
53     if @resource[:tenant_name]
54       tenant_id = self.class.get_tenant_id(model.catalog,
55                                            @resource[:tenant_name])
56       opts << "--tenant_id=#{tenant_id}"
57     elsif @resource[:tenant_id]
58       opts << "--tenant_id=#{@resource[:tenant_id]}"
59     end
60
61     results = auth_neutron("router-create", '--format=shell',
62                            opts, resource[:name])
63
64     if results =~ /Created a new router:/
65       attrs = self.class.parse_creation_output(results)
66       @property_hash = {
67         :ensure                    => :present,
68         :name                      => resource[:name],
69         :id                        => attrs['id'],
70         :admin_state_up            => attrs['admin_state_up'],
71         :external_gateway_info     => attrs['external_gateway_info'],
72         :status                    => attrs['status'],
73         :tenant_id                 => attrs['tenant_id'],
74       }
75
76       if @resource[:gateway_network_name]
77         results = auth_neutron('router-gateway-set',
78                                @resource[:name],
79                                @resource[:gateway_network_name])
80         if results =~ /Set gateway for router/
81           attrs = self.class.get_neutron_resource_attrs('router',
82                                                         @resource[:name])
83           @property_hash[:external_gateway_info] = \
84             attrs['external_gateway_info']
85         else
86           fail(<<-EOT
87 did not get expected message on setting router gateway, got #{results}
88 EOT
89                )
90         end
91       end
92     else
93       fail("did not get expected message on router creation, got #{results}")
94     end
95   end
96
97   def destroy
98     auth_neutron('router-delete', name)
99     @property_hash[:ensure] = :absent
100   end
101
102   def gateway_network_name
103     if @gateway_network_name == nil and gateway_network_id
104       Puppet::Type.type('neutron_network').instances.each do |instance|
105         if instance.provider.id == gateway_network_id
106           @gateway_network_name = instance.provider.name
107         end
108       end
109     end
110     @gateway_network_name
111   end
112
113   def gateway_network_name=(value)
114     if value == ''
115       auth_neutron('router-gateway-clear', name)
116     else
117       auth_neutron('router-gateway-set', name, value)
118     end
119   end
120
121   def parse_gateway_network_id(external_gateway_info_)
122     match_data = /\{"network_id": "(.*?)"/.match(external_gateway_info_)
123     if match_data
124       match_data[1]
125     else
126       ''
127     end
128   end
129
130   def gateway_network_id
131     @gateway_network_id ||= parse_gateway_network_id(external_gateway_info)
132   end
133
134   def admin_state_up=(value)
135     auth_neutron('router-update', "--admin-state-up=#{value}", name)
136   end
137
138 end