module Chef::Provisioning::OpenNebulaDriver

Extending module.

OpenNebulaDriver module.

Module extension.

Module extension.

Extending module.

Constants

VERSION

Public Class Methods

get_onelib(args) click to toggle source
# File lib/chef/provisioning/opennebula_driver/driver.rb, line 68
def self.get_onelib(args)
  endpoint = args[:endpoint]
  credentials = args[:credentials]
  options = args[:options] || {}
  if args[:driver_url]
    fail "OpenNebula driver_url cannot be #{args[:driver_url].class}, it must be a String" unless args[:driver_url].is_a?(String)
    endpoint, profile = Chef::Provisioning::OpenNebulaDriver.match_driver_url(args[:driver_url])
    one_profile = Chef::Provisioning::OpenNebulaDriver::Credentials.new[profile]
    credentials = one_profile[:credentials]
    options = one_profile[:options] || {}
  end
  fail "OpenNebula credentials cannot be #{credentials.class}, it must be a String" unless credentials.is_a?(String)
  fail "OpenNebula endpoint cannot be #{endpoint.class}, it must be a String" unless endpoint.is_a?(String)
  fail "OpenNebula options cannot be #{options.class}, it must be a Hash" unless options.is_a?(Hash)
  server_version, = Open3.capture2e("ruby #{File.dirname(__FILE__)}/../driver_init/server_version.rb #{endpoint} #{credentials} #{options.to_json.inspect}")
  server_version.strip!
  fail server_version unless server_version =~ /^\d+\.\d+(?:\.\d+)?$/
  begin
    gem 'opennebula', "~> #{server_version}"
  rescue Gem::MissingSpecVersionError => e
    Chef::Log.fatal("Gem not installed: opennebula #{server_version}")
    raise e
  rescue Gem::LoadError => e
    e_inspect = e.inspect
    unless e_inspect.include?('already activated')
      info_out, info_err = Open3.capture2e("gem environment")
      Chef::Log.fatal("Please check your environment settings")
      Chef::Log.fatal("OnenNebula server API version #{server_version}")
      Chef::Log.fatal(info_out.to_s + "\n" + info_err.to_s)
      raise e
    end
  end
  require 'opennebula'
  require 'chef/provisioning/opennebula_driver/one_lib'
  gem_version = Gem.loaded_specs['opennebula'].version.to_s
  if gem_version == server_version
    Chef::Log.debug("You are using OpenNebula gem version #{gem_version} against OpenNebula server version #{server_version}")
  else
    Chef::Log.warn('OPENNEBULA GEM / SERVER VERSION MISMATCH')
    Chef::Log.warn("You are using OpenNebula gem version #{gem_version} against OpenNebula server version #{server_version}")
    Chef::Log.warn('Users may experience issues with this gem.')
  end
  OneLib.new(:credentials => credentials, :endpoint => endpoint, :options => options)
end
match_driver_url(url, allow_nil_profile = false) click to toggle source
# File lib/chef/provisioning/opennebula_driver/driver.rb, line 58
def self.match_driver_url(url, allow_nil_profile = false)
  scan = url.match(%r/opennebula:(https?:\/\/[^:\/]+ (?::[0-9]{2,5})? (?:\/[^:\s]+) ) :?([^:\s]+)?/x)
  fail "'driver_url' option has invalid format: #{url}" if scan.nil?
  endpoint = scan[1]
  profile = scan[2]
  fail "'driver_url' option is missing an endpoint: #{url}" if endpoint.nil?
  fail "'driver_url' option is missing a profile: #{url}" if profile.nil? && !allow_nil_profile
  [endpoint, profile]
end