X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fnova%2Flib%2Fpuppet%2Fprovider%2Fnova_network%2Fnova_manage.rb;fp=3rdparty%2Fmodules%2Fnova%2Flib%2Fpuppet%2Fprovider%2Fnova_network%2Fnova_manage.rb;h=6da03a39dc4189b787965ab6e68949086c425418;hb=4631045ebb77ee8622f6fa09277a50c372bcc02e;hp=0000000000000000000000000000000000000000;hpb=3d4dc4fd9e59bd0e07646c99f6b356c7d9d859aa;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/nova/lib/puppet/provider/nova_network/nova_manage.rb b/3rdparty/modules/nova/lib/puppet/provider/nova_network/nova_manage.rb new file mode 100644 index 000000000..6da03a39d --- /dev/null +++ b/3rdparty/modules/nova/lib/puppet/provider/nova_network/nova_manage.rb @@ -0,0 +1,66 @@ +Puppet::Type.type(:nova_network).provide(:nova_manage) do + + desc "Manage nova network" + + optional_commands :nova_manage => 'nova-manage' + + # I need to setup caching and what-not to make this lookup performance not suck + def self.instances + begin + network_list = nova_manage("network", "list") + rescue Exception => e + if e.message =~ /No networks defined/ + return [] + else + raise(e) + end + end + network_list.split("\n")[1..-1].collect do |net| + if net =~ /^(\S+)\s+(\S+)/ + new(:name => $2 ) + end + end.compact + end + + def create + optional_opts = [] + { + # this needs to be converted from a project name to an id + :project => '--project_id', + :dns2 => '--dns2', + :gateway => '--gateway', + :bridge => '--bridge', + :vlan_start => '--vlan_start' + }.each do |param, opt| + if resource[param] + optional_opts.push(opt).push(resource[param]) + end + end + + nova_manage('network', 'create', + resource[:label], + resource[:name], + resource[:num_networks], + resource[:network_size], + optional_opts + ) + end + + def exists? + begin + network_list = nova_manage("network", "list") + return network_list.split("\n")[1..-1].detect do |n| + # TODO - this does not take the CIDR into accont. Does it matter? + n =~ /^(\S+)\s+(#{resource[:network].split('/').first})/ + end + rescue + return false + end + end + + + def destroy + nova_manage("network", "delete", resource[:network]) + end + +end