class VagrantPlugins::OpenNebulaProvider::Helpers::FogApi
Attributes
config[RW]
Public Class Methods
new()
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 9 def initialize @logger = Log4r::Logger.new('vagrant::provider::opennebula::helpers::fog') end
Public Instance Methods
compute()
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 38 def compute @logger.info 'compute!' newvm = @fog_client.servers.new if @provider_config.template_id newvm.flavor = @fog_client.flavors.get @provider_config.template_id elsif @provider_config.template_name flavors = @fog_client.flavors.get_by_filter({name: @provider_config.template_name}) if flavors.nil? fail Errors::ComputeError, error: I18n.t('opennebula_provider.compute.template_missing', template: @provider_config.template_name) end newvm.flavor = flavors.last end if newvm.flavor.nil? fail Errors::ComputeError, error: I18n.t('opennebula_provider.compute.template_missing', template: @provider_config.template) end newvm.name = @provider_config.title if @provider_config.title if @config.vm.hostname != nil newvm.flavor.context = (newvm.flavor.context).merge({ 'SET_HOSTNAME' => @config.vm.hostname }) end newvm.flavor.memory = @provider_config.memory unless @provider_config.memory.nil? newvm.flavor.cpu = @provider_config.cpu unless @provider_config.cpu.nil? newvm.flavor.vcpu = @provider_config.vcpu unless @provider_config.vcpu.nil? if newvm.flavor.disk.instance_of? Array fail Errors::AllocateError, error: I18n.t( 'opennebula_provider.errors.allocate', error: 'Template has more than one disk attached and `disk_size` ' + 'feature is supported only for templates with only one') end if @provider_config.disk_size != nil newvm.flavor.disk["SIZE"] = @provider_config.disk_size end @logger.warn "Deploying VM with options #{newvm.flavor.inspect}" vm = newvm.save vm.id rescue RuntimeError => e raise Errors::ComputeError, error: e end
connect()
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 23 def connect @logger = Log4r::Logger.new('vagrant::provider::opennebula::helpers::fog') @logger.info 'Connect to OpenNebula RPC' @fog_client = Fog::Compute.new(@options) rc = @fog_client.client.get_version if rc.is_a?(OpenNebula::Error) case rc.errno when 256 raise Errors::AuthError, error: rc.message when 4369 raise Errors::ConnectError, error: rc.message end end end
delete(id)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 89 def delete(id) @logger.info 'delete!' @fog_client.servers.get(id).destroy end
machine_state(id)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 104 def machine_state(id) if id begin desc = @fog_client.servers.get(id) #state LCM_INIT & RUNNING status 7 && UNDEPLOYED rescue ArgumentError => e raise Errors::ResourceError, error: e end return :not_created if desc.nil? return get_pretty_status(desc.state, desc.status) else return :not_created end end
provider_config=(provider_config)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 13 def provider_config=(provider_config) @provider_config = provider_config @options = { provider: 'OpenNebula', opennebula_endpoint: provider_config.endpoint, opennebula_username: provider_config.username, opennebula_password: provider_config.password } end
resume(id)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 99 def resume(id) @logger.info 'resume!' @fog_client.servers.get(id).resume end
ssh_info(id)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 119 def ssh_info(id) desc = @fog_client.servers.get(id) desc.ip unless desc.nil? end
start(id)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 84 def start(id) @logger.info 'start!' @fog_client.servers.get(id).start end
stop(id)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 79 def stop(id) @logger.info 'stop!' @fog_client.servers.get(id).stop end
suspend(id)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 94 def suspend(id) @logger.info 'suspend!' @fog_client.servers.get(id).suspend end
Private Instance Methods
get_pretty_status(state, status)
click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 125 def get_pretty_status(state, status) pretty = "#{state}_#{status}" case state when 'LCM_INIT' case status when 1, 3 pretty = 'pending' when 4 pretty = 'stopped' when 5 pretty = 'suspended' when 7 pretty = 'error' end when 'PROLOG', 'PROLOG_RESUME' case status when 3 pretty = 'prolog' end when 'BOOT' case status when 3 pretty = 'boot' end when 'RUNNING' case status when 3 pretty = 'active' end when 'BOOT_STOPPED' case status when 3 pretty = 'boot' end when 'BOOT_STOPPED_FAILURE' case status when 3 pretty = 'error' end end pretty.to_sym end