Class: StackMate::CloudStackVirtualMachineOps
- Inherits:
-
CloudStackResource
- Object
- Ruote::Participant
- CloudStackResource
- StackMate::CloudStackVirtualMachineOps
- Defined in:
- lib/stackmate/participants/cloudstack_virtualmachineops.rb
Constant Summary
Constants included from Resolver
Resolver::INTEXP, Resolver::STRINGEXP, Resolver::UUIDEXP
Instance Attribute Summary
Attributes inherited from CloudStackResource
Instance Method Summary collapse
Methods included from Resolver
#get_named_tag, #get_resolved, #resolve_tags, #resolve_to_deviceid, #validate_param
Methods included from Intrinsic
#fn_base64, #fn_getatt, #fn_join, #fn_lookup, #fn_map, #fn_ref, #fn_select, #intrinsic
Methods included from Logging
configure_logger_for, #logger, logger_for
Methods inherited from CloudStackResource
Constructor Details
This class inherits a constructor from StackMate::CloudStackResource
Instance Method Details
#create ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/stackmate/participants/cloudstack_virtualmachineops.rb', line 9 def create logger.debug("Creating resource #{@name}") workitem[@name] = {} name_cs = workitem['StackName'] + '-' + @name args={} begin args['id'] = get_id args['hostid'] = get_hostid if @props.has_key?('hostid') logger.info("Creating resource #{@name} with following arguments") p args result_obj = make_async_request('startVirtualMachine',args) resource_obj = result_obj['VirtualMachine'.downcase] #doing it this way since it is easier to change later, rather than cloning whole object resource_obj.each_key do |k| val = resource_obj[k] if('id'.eql?(k)) k = 'physical_id' end workitem[@name][k] = val end (@props['tags'],workitem[@name]['physical_id'],"UserVM") if @props.has_key?('tags') workitem['ResolvedNames'][@name] = name_cs workitem['IdMap'][workitem[@name]['physical_id']] = @name rescue NoMethodError => nme logger.error("Create request failed for resource . Cleaning up the stack") raise nme rescue Exception => e logger.error(e.) raise e end end |
#delete ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/stackmate/participants/cloudstack_virtualmachineops.rb', line 44 def delete logger.debug("Deleting resource #{@name}") begin physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil? if(!physical_id.nil?) args = {'id' => physical_id } result_obj = make_async_request('stopVirtualMachine',args) if (!(result_obj['error'] == true)) logger.info("Successfully deleted resource #{@name}") else logger.info("CloudStack error while deleting resource #{@name}") end else logger.info("Resource not created in CloudStack. Skipping delete...") end rescue Exception => e logger.error("Unable to delete resorce #{@name}") end end |
#get_hostid ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/stackmate/participants/cloudstack_virtualmachineops.rb', line 86 def get_hostid resolved_hostid = get_resolved(@props['hostid'],workitem) if resolved_hostid.nil? || !validate_param(resolved_hostid,"uuid") raise "Malformed optional parameter hostid for resource #{@name}" end resolved_hostid end |
#get_id ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/stackmate/participants/cloudstack_virtualmachineops.rb', line 78 def get_id resolved_id = get_resolved(@props["id"],workitem) if resolved_id.nil? || !validate_param(resolved_id,"uuid") raise "Missing mandatory parameter id for resource #{@name}" end resolved_id end |
#on_workitem ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/stackmate/participants/cloudstack_virtualmachineops.rb', line 65 def on_workitem @name = workitem.participant_name @props = workitem['Resources'][@name]['Properties'] @props.downcase_key @resolved_names = workitem['ResolvedNames'] if workitem['params']['operation'] == 'create' create else delete end reply end |