]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/nova/lib/puppet/provider/nova_network/nova_manage.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / nova / lib / puppet / provider / nova_network / nova_manage.rb
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 (file)
index 0000000..6da03a3
--- /dev/null
@@ -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