diff --git a/src/oca/ruby/opennebula/flow/service_template.rb b/src/oca/ruby/opennebula/flow/service_template.rb index 6b518ceb83..4ec138abfc 100644 --- a/src/oca/ruby/opennebula/flow/service_template.rb +++ b/src/oca/ruby/opennebula/flow/service_template.rb @@ -263,7 +263,7 @@ module OpenNebula recursive = false end - if type != 'none' + if type && type != 'none' rc = vm_template_ids return rc if OpenNebula.is_error?(rc) diff --git a/src/oneprovision/lib/provision/provision.rb b/src/oneprovision/lib/provision/provision.rb index 546ed5db4b..98b2f58e11 100644 --- a/src/oneprovision/lib/provision/provision.rb +++ b/src/oneprovision/lib/provision/provision.rb @@ -114,6 +114,10 @@ module OneProvision # Returns provision provider def provider + if @body['provider'] == 'dummy' + return { 'NAME' => 'dummy' } + end + Provider.by_name(@client, @body['provider']) end @@ -282,12 +286,7 @@ module OneProvision if skip == :none configure else - hosts.each do |h| - host = Host.new - host.info(h['id']) - - host.one.enable - end + info_objects('hosts') {|h| h.enable } end create_virtual_resources(cfg) @@ -399,6 +398,8 @@ module OneProvision return rc if OpenNebula.is_error?(rc) 0 + ensure + unlock end # Updates provision objects @@ -618,22 +619,43 @@ module OneProvision def create_hosts(cfg, cid) return unless cfg['hosts'] + hosts = [] + cfg['hosts'].each do |h| - Driver.retry_loop 'Failed to create some host' do - erb = Utils.evaluate_erb(self, h) - dfile = Utils.create_deployment_file(erb) + h['count'].nil? ? count = 1 : count = Integer(h['count']) - playbooks = cfg['playbook'] - playbooks = playbooks.join(',') if playbooks.is_a? Array + count.times.each do |idx| + Driver.retry_loop 'Failed to create some host' do + # Update hostname to avoid multiple same names + hostname = h['provision']['hostname'] if h['provision'] - host = Host.new - host = host.create(dfile.to_xml, cid, playbooks) - h['id'] = Integer(host['ID']) - h['name'] = host['NAME'] + if hostname && count > 1 + h['provision']['hostname'] = "#{hostname}_#{idx}" + end - host.offline + erb = Utils.evaluate_erb(self, h) + dfile = Utils.create_deployment_file(erb) + + playbooks = cfg['playbook'] + playbooks = playbooks.join(',') if playbooks.is_a? Array + + host = Host.new + host = host.create(dfile.to_xml, cid, playbooks) + + if count > 1 && idx > 0 + hosts << { 'id' => Integer(host['ID']), + 'name' => host['NAME'] } + else + h['id'] = Integer(host['ID']) + h['name'] = host['NAME'] + end + + host.offline + end end end + + cfg['hosts'] += hosts end # Updates provision hosts with new name diff --git a/src/oneprovision/lib/provision/resources/resource.rb b/src/oneprovision/lib/provision/resources/resource.rb index 9483280758..6dcb6e9c3f 100644 --- a/src/oneprovision/lib/provision/resources/resource.rb +++ b/src/oneprovision/lib/provision/resources/resource.rb @@ -47,11 +47,11 @@ module OneProvision when :cluster Cluster.new(provider) when :datastore - Datastore.new + Datastore.new(provider) when :host Host.new(provider) when :image - Image.new(provider) + Image.new when :network Network.new(provider) when :template diff --git a/src/oneprovision/lib/provision/resources/virtual/image.rb b/src/oneprovision/lib/provision/resources/virtual/image.rb index 0d9f13a3c0..b33751f015 100644 --- a/src/oneprovision/lib/provision/resources/virtual/image.rb +++ b/src/oneprovision/lib/provision/resources/virtual/image.rb @@ -68,7 +68,7 @@ module OneProvision # @param id [String] Object ID def info(id) @one = OpenNebula::Image.new_with_id(id, @client) - @one.info(true) + @one.info end private diff --git a/src/oneprovision/lib/provision/resources/virtual/template.rb b/src/oneprovision/lib/provision/resources/virtual/template.rb index 6cb639bb7e..f0d7e21bbe 100644 --- a/src/oneprovision/lib/provision/resources/virtual/template.rb +++ b/src/oneprovision/lib/provision/resources/virtual/template.rb @@ -34,7 +34,7 @@ module OneProvision # @param id [String] Object ID def info(id) @one = OpenNebula::Template.new_with_id(id, @client) - @one.info(true) + @one.info(true, true) end private diff --git a/src/oneprovision/lib/provision/utils.rb b/src/oneprovision/lib/provision/utils.rb index d27abfa6ff..14e32442b4 100644 --- a/src/oneprovision/lib/provision/utils.rb +++ b/src/oneprovision/lib/provision/utils.rb @@ -83,6 +83,16 @@ module OneProvision 'file: no name given') end + if !config['cluster'] + Utils.fail('There is an error in your configuration ' \ + 'file: no cluster given') + end + + if !config['cluster']['name'] + Utils.fail('There is an error in your configuration ' \ + 'file: no cluster name given') + end + if config['hosts'] config['hosts'].each_with_index do |h, i| im = h['im_mad']