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