]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/nova/lib/puppet/provider/nova_cells/nova_manage.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / nova / lib / puppet / provider / nova_cells / nova_manage.rb
diff --git a/3rdparty/modules/nova/lib/puppet/provider/nova_cells/nova_manage.rb b/3rdparty/modules/nova/lib/puppet/provider/nova_cells/nova_manage.rb
new file mode 100644 (file)
index 0000000..84051f1
--- /dev/null
@@ -0,0 +1,87 @@
+#
+# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
+#
+# Author: Emilien Macchi <emilien.macchi@enovance.com>
+#         François Charlier <francois.charlier@enovance.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+#
+# nova_cells provider
+#
+
+Puppet::Type.type(:nova_cells).provide(:nova_manage) do
+
+  desc "Manage nova cells"
+
+  optional_commands :nova_manage => 'nova-manage'
+
+  def self.instances
+    begin
+      cells_list = nova_manage("cell", "list")
+    rescue Exception => e
+      if e.message =~ /No cells defined/
+        return []
+      else
+        raise(e)
+      end
+    end
+    cells_list.split("\n")[1..-1].collect do |net|
+      if net =~ /^(\S+)\s+(\S+)/
+        new(:name => $2 )
+      end
+    end.compact
+  end
+
+
+  def create
+    optional_opts = []
+    {
+      :name                => '--name',
+      :cell_type           => '--cell_type',
+      :rabbit_username     => '--username',
+      :rabbit_password     => '--password',
+      :rabbit_hosts        => '--hostname',
+      :rabbit_port         => '--port',
+      :rabbit_virtual_host => '--virtual_host',
+      :weight_offset       => '--woffset',
+      :weight_scale        => '--wscale'
+
+    }.each do |param, opt|
+      if resource[param]
+        optional_opts.push(opt).push(resource[param])
+      end
+    end
+
+    nova_manage('cell', 'create',
+      optional_opts
+    )
+  end
+
+  def exists?
+    begin
+      cells_list = nova_manage("cell", "list")
+      return cells_list.split("\n")[1..-1].detect do |n|
+        n =~ /^(\S+)\s+(#{resource[:cells].split('/').first})/
+      end
+    rescue
+      return false
+    end
+  end
+
+
+  def destroy
+    nova_manage("cell", "delete", resource[:name])
+  end
+
+end