--- /dev/null
+#
+# 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