]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/nova/lib/puppet/provider/nova_network/nova_manage.rb
6da03a39dc4189b787965ab6e68949086c425418
[dsa-puppet.git] / 3rdparty / modules / nova / lib / puppet / provider / nova_network / nova_manage.rb
1 Puppet::Type.type(:nova_network).provide(:nova_manage) do
2
3   desc "Manage nova network"
4
5   optional_commands :nova_manage => 'nova-manage'
6
7   # I need to setup caching and what-not to make this lookup performance not suck
8   def self.instances
9     begin
10       network_list = nova_manage("network", "list")
11     rescue Exception => e
12       if e.message =~ /No networks defined/
13         return []
14       else
15         raise(e)
16       end
17     end
18     network_list.split("\n")[1..-1].collect do |net|
19       if net =~ /^(\S+)\s+(\S+)/
20         new(:name => $2 )
21       end
22     end.compact
23   end
24
25   def create
26     optional_opts = []
27     {
28       # this needs to be converted from a project name to an id
29       :project          => '--project_id',
30       :dns2             => '--dns2',
31       :gateway          => '--gateway',
32       :bridge           => '--bridge',
33       :vlan_start       => '--vlan_start'
34     }.each do |param, opt|
35       if resource[param]
36         optional_opts.push(opt).push(resource[param])
37       end
38     end
39
40     nova_manage('network', 'create',
41       resource[:label],
42       resource[:name],
43       resource[:num_networks],
44       resource[:network_size],
45       optional_opts
46     )
47   end
48
49   def exists?
50     begin
51       network_list = nova_manage("network", "list")
52       return network_list.split("\n")[1..-1].detect do |n|
53         # TODO - this does not take the CIDR into accont. Does it matter?
54         n =~ /^(\S+)\s+(#{resource[:network].split('/').first})/
55       end
56     rescue
57       return false
58     end
59   end
60
61
62   def destroy
63     nova_manage("network", "delete", resource[:network])
64   end
65
66 end