stackmate 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. data/README.md +1 -0
  2. data/bin/stackmate.rb +9 -5
  3. data/lib/stackmate/intrinsic_functions.rb +3 -3
  4. data/lib/stackmate/metadata.rb +44 -0
  5. data/lib/stackmate/participants/cloudstack.rb +51 -10
  6. data/lib/stackmate/participants/cloudstack_affinitygroup.rb +4 -1
  7. data/lib/stackmate/participants/cloudstack_autoscalepolicy.rb +4 -1
  8. data/lib/stackmate/participants/cloudstack_autoscalevmgroup.rb +4 -1
  9. data/lib/stackmate/participants/cloudstack_autoscalevmprofile.rb +4 -1
  10. data/lib/stackmate/participants/cloudstack_condition.rb +4 -1
  11. data/lib/stackmate/participants/cloudstack_egressfirewallrule.rb +4 -1
  12. data/lib/stackmate/participants/cloudstack_firewallrule.rb +4 -1
  13. data/lib/stackmate/participants/cloudstack_globalloadbalancerrule.rb +4 -1
  14. data/lib/stackmate/participants/cloudstack_instancegroup.rb +4 -1
  15. data/lib/stackmate/participants/cloudstack_ipaddress.rb +4 -1
  16. data/lib/stackmate/participants/cloudstack_ipforwardingrule.rb +4 -1
  17. data/lib/stackmate/participants/cloudstack_iptonic.rb +4 -1
  18. data/lib/stackmate/participants/cloudstack_iso.rb +4 -1
  19. data/lib/stackmate/participants/cloudstack_lbhealthcheckpolicy.rb +4 -1
  20. data/lib/stackmate/participants/cloudstack_lbstickinesspolicy.rb +4 -1
  21. data/lib/stackmate/participants/cloudstack_loadbalancer.rb +4 -1
  22. data/lib/stackmate/participants/cloudstack_loadbalancerrule.rb +4 -1
  23. data/lib/stackmate/participants/cloudstack_network.rb +4 -1
  24. data/lib/stackmate/participants/cloudstack_networkacl.rb +4 -1
  25. data/lib/stackmate/participants/cloudstack_networkacllist.rb +4 -1
  26. data/lib/stackmate/participants/cloudstack_nictovirtualmachine.rb +5 -2
  27. data/lib/stackmate/participants/cloudstack_portforwardingrule.rb +4 -1
  28. data/lib/stackmate/participants/cloudstack_project.rb +4 -1
  29. data/lib/stackmate/participants/cloudstack_remoteaccessvpn.rb +4 -1
  30. data/lib/stackmate/participants/cloudstack_securitygroup.rb +4 -1
  31. data/lib/stackmate/participants/cloudstack_securitygroupegress.rb +4 -1
  32. data/lib/stackmate/participants/cloudstack_securitygroupingress.rb +4 -1
  33. data/lib/stackmate/participants/cloudstack_snapshot.rb +4 -1
  34. data/lib/stackmate/participants/cloudstack_snapshotpolicy.rb +4 -1
  35. data/lib/stackmate/participants/cloudstack_sshkeypair.rb +4 -1
  36. data/lib/stackmate/participants/cloudstack_staticnat.rb +4 -1
  37. data/lib/stackmate/participants/cloudstack_staticroute.rb +4 -1
  38. data/lib/stackmate/participants/cloudstack_tags.rb +4 -1
  39. data/lib/stackmate/participants/cloudstack_template.rb +4 -1
  40. data/lib/stackmate/participants/cloudstack_togloballoadbalancerrule.rb +4 -1
  41. data/lib/stackmate/participants/cloudstack_toloadbalancerrule.rb +4 -1
  42. data/lib/stackmate/participants/cloudstack_virtualmachine.rb +257 -281
  43. data/lib/stackmate/participants/cloudstack_virtualmachineops.rb +5 -2
  44. data/lib/stackmate/participants/cloudstack_vmsnapshot.rb +4 -1
  45. data/lib/stackmate/participants/cloudstack_volume.rb +4 -1
  46. data/lib/stackmate/participants/cloudstack_volumeops.rb +86 -90
  47. data/lib/stackmate/participants/cloudstack_vpc.rb +4 -1
  48. data/lib/stackmate/participants/cloudstack_vpnconnection.rb +4 -1
  49. data/lib/stackmate/participants/cloudstack_vpncustomergateway.rb +4 -1
  50. data/lib/stackmate/participants/cloudstack_vpngateway.rb +4 -1
  51. data/lib/stackmate/participants/cloudstack_vpnuser.rb +4 -1
  52. data/lib/stackmate/participants/common.rb +4 -2
  53. data/lib/stackmate/resolver.rb +28 -1
  54. data/lib/stackmate/stack_executor.rb +9 -5
  55. data/lib/stackmate/stack_server.rb +60 -0
  56. data/lib/stackmate/stackpi.rb +2 -7
  57. data/lib/stackmate/version.rb +1 -1
  58. data/lib/stackmate/waitcondition_server.rb +4 -6
  59. metadata +4 -2
@@ -22,6 +22,7 @@ module StackMate
22
22
  p args
23
23
  result_obj = make_sync_request('createSecurityGroup',args)
24
24
  resource_obj = result_obj['SecurityGroup'.downcase]
25
+
25
26
  #doing it this way since it is easier to change later, rather than cloning whole object
26
27
  resource_obj.each_key do |k|
27
28
  val = resource_obj[k]
@@ -31,6 +32,7 @@ module StackMate
31
32
  workitem[@name][k] = val
32
33
  end
33
34
  set_tags(@props['tags'],workitem[@name]['physical_id'],"SecurityGroup") if @props.has_key?('tags')
35
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
34
36
  workitem['ResolvedNames'][@name] = name_cs
35
37
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
36
38
 
@@ -55,6 +57,7 @@ module StackMate
55
57
  if (!(result_obj['error'] == true))
56
58
  logger.info("Successfully deleted resource #{@name}")
57
59
  else
60
+ workitem[@name]['delete_error'] = true
58
61
  logger.info("CloudStack error while deleting resource #{@name}")
59
62
  end
60
63
  else
@@ -119,4 +122,4 @@ module StackMate
119
122
  end
120
123
  end
121
124
  end
122
-
125
+
@@ -29,6 +29,7 @@ module StackMate
29
29
  p args
30
30
  result_obj = make_async_request('authorizeSecurityGroupEgress',args)
31
31
  resource_obj = result_obj['securitygroup']['egressrule'.downcase][0]
32
+
32
33
  #doing it this way since it is easier to change later, rather than cloning whole object
33
34
  resource_obj.each_key do |k|
34
35
  val = resource_obj[k]
@@ -38,6 +39,7 @@ module StackMate
38
39
  workitem[@name][k] = val
39
40
  end
40
41
  set_tags(@props['tags'],workitem[@name]['physical_id'],"SecurityGroupEgress") if @props.has_key?('tags')
42
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
41
43
  workitem['ResolvedNames'][@name] = name_cs
42
44
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
43
45
 
@@ -62,6 +64,7 @@ module StackMate
62
64
  if (!(result_obj['error'] == true))
63
65
  logger.info("Successfully deleted resource #{@name}")
64
66
  else
67
+ workitem[@name]['delete_error'] = true
65
68
  logger.info("CloudStack error while deleting resource #{@name}")
66
69
  end
67
70
  else
@@ -182,4 +185,4 @@ module StackMate
182
185
  end
183
186
  end
184
187
  end
185
-
188
+
@@ -29,6 +29,7 @@ module StackMate
29
29
  p args
30
30
  result_obj = make_async_request('authorizeSecurityGroupIngress',args)
31
31
  resource_obj = result_obj['securitygroup']['ingressrule'.downcase][0]
32
+
32
33
  #doing it this way since it is easier to change later, rather than cloning whole object
33
34
  resource_obj.each_key do |k|
34
35
  val = resource_obj[k]
@@ -38,6 +39,7 @@ module StackMate
38
39
  workitem[@name][k] = val
39
40
  end
40
41
  set_tags(@props['tags'],workitem[@name]['physical_id'],"SecurityGroupIngress") if @props.has_key?('tags')
42
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
41
43
  workitem['ResolvedNames'][@name] = name_cs
42
44
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
43
45
 
@@ -62,6 +64,7 @@ module StackMate
62
64
  if (!(result_obj['error'] == true))
63
65
  logger.info("Successfully deleted resource #{@name}")
64
66
  else
67
+ workitem[@name]['delete_error'] = true
65
68
  logger.info("CloudStack error while deleting resource #{@name}")
66
69
  end
67
70
  else
@@ -182,4 +185,4 @@ module StackMate
182
185
  end
183
186
  end
184
187
  end
185
-
188
+
@@ -21,6 +21,7 @@ module StackMate
21
21
  p args
22
22
  result_obj = make_async_request('createSnapshot',args)
23
23
  resource_obj = result_obj['Snapshot'.downcase]
24
+
24
25
  #doing it this way since it is easier to change later, rather than cloning whole object
25
26
  resource_obj.each_key do |k|
26
27
  val = resource_obj[k]
@@ -30,6 +31,7 @@ module StackMate
30
31
  workitem[@name][k] = val
31
32
  end
32
33
  set_tags(@props['tags'],workitem[@name]['physical_id'],"Snapshot") if @props.has_key?('tags')
34
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
33
35
  workitem['ResolvedNames'][@name] = name_cs
34
36
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
35
37
 
@@ -54,6 +56,7 @@ module StackMate
54
56
  if (!(result_obj['error'] == true))
55
57
  logger.info("Successfully deleted resource #{@name}")
56
58
  else
59
+ workitem[@name]['delete_error'] = true
57
60
  logger.info("CloudStack error while deleting resource #{@name}")
58
61
  end
59
62
  else
@@ -110,4 +113,4 @@ module StackMate
110
113
  end
111
114
  end
112
115
  end
113
-
116
+
@@ -22,6 +22,7 @@ module StackMate
22
22
  p args
23
23
  result_obj = make_sync_request('createSnapshotPolicy',args)
24
24
  resource_obj = result_obj['SnapshotPolicy'.downcase]
25
+
25
26
  #doing it this way since it is easier to change later, rather than cloning whole object
26
27
  resource_obj.each_key do |k|
27
28
  val = resource_obj[k]
@@ -31,6 +32,7 @@ module StackMate
31
32
  workitem[@name][k] = val
32
33
  end
33
34
  set_tags(@props['tags'],workitem[@name]['physical_id'],"SnapshotPolicy") if @props.has_key?('tags')
35
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
34
36
  workitem['ResolvedNames'][@name] = name_cs
35
37
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
36
38
 
@@ -55,6 +57,7 @@ module StackMate
55
57
  if (!(result_obj['error'] == true))
56
58
  logger.info("Successfully deleted resource #{@name}")
57
59
  else
60
+ workitem[@name]['delete_error'] = true
58
61
  logger.info("CloudStack error while deleting resource #{@name}")
59
62
  end
60
63
  else
@@ -119,4 +122,4 @@ module StackMate
119
122
  end
120
123
  end
121
124
  end
122
-
125
+
@@ -21,6 +21,7 @@ module StackMate
21
21
  p args
22
22
  result_obj = make_sync_request('createSSHKeyPair',args)
23
23
  resource_obj = result_obj['SSHKeyPair'.downcase]
24
+
24
25
  #doing it this way since it is easier to change later, rather than cloning whole object
25
26
  resource_obj.each_key do |k|
26
27
  val = resource_obj[k]
@@ -30,6 +31,7 @@ module StackMate
30
31
  workitem[@name][k] = val
31
32
  end
32
33
  set_tags(@props['tags'],workitem[@name]['physical_id'],"SSHKeyPair") if @props.has_key?('tags')
34
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
33
35
  workitem['ResolvedNames'][@name] = name_cs
34
36
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
35
37
 
@@ -54,6 +56,7 @@ module StackMate
54
56
  if (!(result_obj['error'] == true))
55
57
  logger.info("Successfully deleted resource #{@name}")
56
58
  else
59
+ workitem[@name]['delete_error'] = true
57
60
  logger.info("CloudStack error while deleting resource #{@name}")
58
61
  end
59
62
  else
@@ -110,4 +113,4 @@ module StackMate
110
113
  end
111
114
  end
112
115
  end
113
-
116
+
@@ -21,6 +21,7 @@ module StackMate
21
21
  p args
22
22
  result_obj = make_sync_request('enableStaticNat',args)
23
23
  resource_obj = result_obj['StaticNat'.downcase]
24
+
24
25
  #doing it this way since it is easier to change later, rather than cloning whole object
25
26
  resource_obj.each_key do |k|
26
27
  val = resource_obj[k]
@@ -30,6 +31,7 @@ module StackMate
30
31
  workitem[@name][k] = val
31
32
  end
32
33
  set_tags(@props['tags'],workitem[@name]['physical_id'],"StaticNat") if @props.has_key?('tags')
34
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
33
35
  workitem['ResolvedNames'][@name] = name_cs
34
36
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
35
37
 
@@ -54,6 +56,7 @@ module StackMate
54
56
  if (!(result_obj['error'] == true))
55
57
  logger.info("Successfully deleted resource #{@name}")
56
58
  else
59
+ workitem[@name]['delete_error'] = true
57
60
  logger.info("CloudStack error while deleting resource #{@name}")
58
61
  end
59
62
  else
@@ -110,4 +113,4 @@ module StackMate
110
113
  end
111
114
  end
112
115
  end
113
-
116
+
@@ -19,6 +19,7 @@ module StackMate
19
19
  p args
20
20
  result_obj = make_async_request('createStaticRoute',args)
21
21
  resource_obj = result_obj['StaticRoute'.downcase]
22
+
22
23
  #doing it this way since it is easier to change later, rather than cloning whole object
23
24
  resource_obj.each_key do |k|
24
25
  val = resource_obj[k]
@@ -28,6 +29,7 @@ module StackMate
28
29
  workitem[@name][k] = val
29
30
  end
30
31
  set_tags(@props['tags'],workitem[@name]['physical_id'],"StaticRoute") if @props.has_key?('tags')
32
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
31
33
  workitem['ResolvedNames'][@name] = name_cs
32
34
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
33
35
 
@@ -52,6 +54,7 @@ module StackMate
52
54
  if (!(result_obj['error'] == true))
53
55
  logger.info("Successfully deleted resource #{@name}")
54
56
  else
57
+ workitem[@name]['delete_error'] = true
55
58
  logger.info("CloudStack error while deleting resource #{@name}")
56
59
  end
57
60
  else
@@ -92,4 +95,4 @@ module StackMate
92
95
  end
93
96
  end
94
97
  end
95
-
98
+
@@ -21,6 +21,7 @@ module StackMate
21
21
  p args
22
22
  result_obj = make_async_request('createTags',args)
23
23
  resource_obj = result_obj['Tags'.downcase]
24
+
24
25
  #doing it this way since it is easier to change later, rather than cloning whole object
25
26
  resource_obj.each_key do |k|
26
27
  val = resource_obj[k]
@@ -30,6 +31,7 @@ module StackMate
30
31
  workitem[@name][k] = val
31
32
  end
32
33
  set_tags(@props['tags'],workitem[@name]['physical_id'],"Tags") if @props.has_key?('tags')
34
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
33
35
  workitem['ResolvedNames'][@name] = name_cs
34
36
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
35
37
 
@@ -54,6 +56,7 @@ module StackMate
54
56
  if (!(result_obj['error'] == true))
55
57
  logger.info("Successfully deleted resource #{@name}")
56
58
  else
59
+ workitem[@name]['delete_error'] = true
57
60
  logger.info("CloudStack error while deleting resource #{@name}")
58
61
  end
59
62
  else
@@ -110,4 +113,4 @@ module StackMate
110
113
  end
111
114
  end
112
115
  end
113
-
116
+
@@ -32,6 +32,7 @@ module StackMate
32
32
  p args
33
33
  result_obj = make_async_request('createTemplate',args)
34
34
  resource_obj = result_obj['Template'.downcase]
35
+
35
36
  #doing it this way since it is easier to change later, rather than cloning whole object
36
37
  resource_obj.each_key do |k|
37
38
  val = resource_obj[k]
@@ -41,6 +42,7 @@ module StackMate
41
42
  workitem[@name][k] = val
42
43
  end
43
44
  set_tags(@props['tags'],workitem[@name]['physical_id'],"Template") if @props.has_key?('tags')
45
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
44
46
  workitem['ResolvedNames'][@name] = name_cs
45
47
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
46
48
 
@@ -65,6 +67,7 @@ module StackMate
65
67
  if (!(result_obj['error'] == true))
66
68
  logger.info("Successfully deleted resource #{@name}")
67
69
  else
70
+ workitem[@name]['delete_error'] = true
68
71
  logger.info("CloudStack error while deleting resource #{@name}")
69
72
  end
70
73
  else
@@ -209,4 +212,4 @@ module StackMate
209
212
  end
210
213
  end
211
214
  end
212
-
215
+
@@ -20,6 +20,7 @@ module StackMate
20
20
  p args
21
21
  result_obj = make_async_request('assignToGlobalLoadBalancerRule',args)
22
22
  resource_obj = result_obj['ToGlobalLoadBalancerRule'.downcase]
23
+
23
24
  #doing it this way since it is easier to change later, rather than cloning whole object
24
25
  resource_obj.each_key do |k|
25
26
  val = resource_obj[k]
@@ -29,6 +30,7 @@ module StackMate
29
30
  workitem[@name][k] = val
30
31
  end
31
32
  set_tags(@props['tags'],workitem[@name]['physical_id'],"ToGlobalLoadBalancerRule") if @props.has_key?('tags')
33
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
32
34
  workitem['ResolvedNames'][@name] = name_cs
33
35
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
34
36
 
@@ -53,6 +55,7 @@ module StackMate
53
55
  if (!(result_obj['error'] == true))
54
56
  logger.info("Successfully deleted resource #{@name}")
55
57
  else
58
+ workitem[@name]['delete_error'] = true
56
59
  logger.info("CloudStack error while deleting resource #{@name}")
57
60
  end
58
61
  else
@@ -101,4 +104,4 @@ module StackMate
101
104
  end
102
105
  end
103
106
  end
104
-
107
+
@@ -19,6 +19,7 @@ module StackMate
19
19
  p args
20
20
  result_obj = make_async_request('assignToLoadBalancerRule',args)
21
21
  resource_obj = result_obj['ToLoadBalancerRule'.downcase]
22
+
22
23
  #doing it this way since it is easier to change later, rather than cloning whole object
23
24
  resource_obj.each_key do |k|
24
25
  val = resource_obj[k]
@@ -28,6 +29,7 @@ module StackMate
28
29
  workitem[@name][k] = val
29
30
  end
30
31
  set_tags(@props['tags'],workitem[@name]['physical_id'],"ToLoadBalancerRule") if @props.has_key?('tags')
32
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
31
33
  workitem['ResolvedNames'][@name] = name_cs
32
34
  workitem['IdMap'][workitem[@name]['physical_id']] = @name
33
35
 
@@ -52,6 +54,7 @@ module StackMate
52
54
  if (!(result_obj['error'] == true))
53
55
  logger.info("Successfully deleted resource #{@name}")
54
56
  else
57
+ workitem[@name]['delete_error'] = true
55
58
  logger.info("CloudStack error while deleting resource #{@name}")
56
59
  end
57
60
  else
@@ -92,4 +95,4 @@ module StackMate
92
95
  end
93
96
  end
94
97
  end
95
-
98
+
@@ -6,343 +6,319 @@ module StackMate
6
6
  include Logging
7
7
  include Intrinsic
8
8
  include Resolver
9
- def create
10
- logger.debug("Creating resource #{@name}")
11
- workitem[@name] = {}
12
- name_cs = workitem['StackName'] + '-' + @name
13
- args={}
14
- begin
15
-
16
- args['templateid'] = get_templateid
17
- args['serviceofferingid'] = get_serviceofferingid
18
- args['zoneid'] = get_zoneid
19
- args['securitygroupnames'] = get_securitygroupnames if @props.has_key?('securitygroupnames')
20
- args['affinitygroupids'] = get_affinitygroupids if @props.has_key?('affinitygroupids')
21
- args['startvm'] = get_startvm if @props.has_key?('startvm')
22
- args['displayvm'] = get_displayvm if @props.has_key?('displayvm')
23
- args['diskofferingid'] = get_diskofferingid if @props.has_key?('diskofferingid')
24
- args['hypervisor'] = get_hypervisor if @props.has_key?('hypervisor')
25
- args['keyboard'] = get_keyboard if @props.has_key?('keyboard')
26
- args['name'] = workitem['StackName'] +'-' + get_name if @props.has_key?('name')
27
- #args['iptonetworklist'] = get_iptonetworklist if @props.has_key?('iptonetworklist')
28
- if @props.has_key?('iptonetworklist')
29
- ipnetworklist = get_iptonetworklist
30
- #split
31
- list_params = ipnetworklist.split("&")
32
- list_params.each do |p|
33
- fields = p.split("=")
34
- args[fields[0]] = fields[1]
9
+ def create
10
+ logger.debug("Creating resource #{@name}")
11
+ workitem[@name] = {}
12
+ name_cs = workitem['StackName'] + '-' + @name
13
+ args={}
14
+ begin
15
+ args['templateid'] = get_templateid
16
+ args['serviceofferingid'] = get_serviceofferingid
17
+ args['zoneid'] = get_zoneid
18
+ args['securitygroupnames'] = get_securitygroupnames if @props.has_key?('securitygroupnames')
19
+ args['affinitygroupids'] = get_affinitygroupids if @props.has_key?('affinitygroupids')
20
+ args['startvm'] = get_startvm if @props.has_key?('startvm')
21
+ args['displayvm'] = get_displayvm if @props.has_key?('displayvm')
22
+ args['diskofferingid'] = get_diskofferingid if @props.has_key?('diskofferingid')
23
+ args['hypervisor'] = get_hypervisor if @props.has_key?('hypervisor')
24
+ args['keyboard'] = get_keyboard if @props.has_key?('keyboard')
25
+ args['name'] = workitem['StackName'] +'-' +get_name if @props.has_key?('name')
26
+
27
+ if @props.has_key?('iptonetworklist')
28
+ ipnetworklist = get_iptonetworklist
29
+ #split
30
+ list_params = ipnetworklist.split("&")
31
+ list_params.each do |p|
32
+ fields = p.split("=")
33
+ args[fields[0]] = fields[1]
34
+ end
35
35
  end
36
- end
37
- args['networkids'] = get_networkids if @props.has_key?('networkids')
38
- args['account'] = get_account if @props.has_key?('account')
39
- args['userdata'] = get_userdata if @props.has_key?('userdata')
40
- args['keypair'] = get_keypair if @props.has_key?('keypair')
41
- args['projectid'] = get_projectid if @props.has_key?('projectid')
42
- args['ipaddress'] = get_ipaddress if @props.has_key?('ipaddress')
43
- args['displayname'] = get_displayname if @props.has_key?('displayname')
44
- args['ip6address'] = get_ip6address if @props.has_key?('ip6address')
45
- args['affinitygroupnames'] = get_affinitygroupnames if @props.has_key?('affinitygroupnames')
46
- args['domainid'] = get_domainid if @props.has_key?('domainid')
47
- args['size'] = get_size if @props.has_key?('size')
48
- args['hostid'] = get_hostid if @props.has_key?('hostid')
49
- args['securitygroupids'] = get_securitygroupids if @props.has_key?('securitygroupids')
50
- args['group'] = get_group if @props.has_key?('group')
51
-
52
- logger.info("Creating resource #{@name} with following arguments")
53
- p args
54
- result_obj = make_async_request('deployVirtualMachine',args)
55
- resource_obj = result_obj['VirtualMachine'.downcase]
56
- #doing it this way since it is easier to change later, rather than cloning whole object
57
- resource_obj.each_key do |k|
58
- val = resource_obj[k]
59
- if('id'.eql?(k))
60
- k = 'physical_id'
36
+ args['networkids'] = get_networkids if @props.has_key?('networkids')
37
+ args['account'] = get_account if @props.has_key?('account')
38
+ args['userdata'] = get_userdata if @props.has_key?('userdata')
39
+ args['keypair'] = get_keypair if @props.has_key?('keypair')
40
+ args['projectid'] = get_projectid if @props.has_key?('projectid')
41
+ args['ipaddress'] = get_ipaddress if @props.has_key?('ipaddress')
42
+ args['displayname'] = get_displayname if @props.has_key?('displayname')
43
+ args['ip6address'] = get_ip6address if @props.has_key?('ip6address')
44
+ args['affinitygroupnames'] = get_affinitygroupnames if @props.has_key?('affinitygroupnames')
45
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
46
+ args['size'] = get_size if @props.has_key?('size')
47
+ args['hostid'] = get_hostid if @props.has_key?('hostid')
48
+ args['securitygroupids'] = get_securitygroupids if @props.has_key?('securitygroupids')
49
+ args['group'] = get_group if @props.has_key?('group')
50
+
51
+ logger.info("Creating resource #{@name} with following arguments")
52
+ p args
53
+ result_obj = make_async_request('deployVirtualMachine',args)
54
+ resource_obj = result_obj['VirtualMachine'.downcase]
55
+
56
+ #doing it this way since it is easier to change later, rather than cloning whole object
57
+ resource_obj.each_key do |k|
58
+ val = resource_obj[k]
59
+ if('id'.eql?(k))
60
+ k = 'physical_id'
61
+ end
62
+ workitem[@name][k] = val
61
63
  end
62
- workitem[@name][k] = val
63
- end
64
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"UserVM") if @props.has_key?('tags')
65
+ set_metadata if workitem['Resources'][@name].has_key?('Metadata')
66
+ workitem['ResolvedNames'][@name] = name_cs
67
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
64
68
  workitem[@name][:PrivateIp] = resource_obj['nic'][0]['ipaddress']
65
- set_tags(@props['tags'],workitem[@name]['physical_id'],"UserVm") if @props.has_key?('tags')
66
- workitem['ResolvedNames'][@name] = name_cs
67
- workitem['IdMap'][workitem[@name]['physical_id']] = @name
68
69
 
69
- rescue NoMethodError => nme
70
- logger.error("Create request failed for resource #{@name}. Cleaning up the stack")
71
- raise nme
72
- rescue Exception => e
73
- logger.error(e.message)
74
- raise e
70
+ rescue NoMethodError => nme
71
+ logger.error("Create request failed for resource . Cleaning up the stack")
72
+ raise nme
73
+ rescue Exception => e
74
+ logger.error(e.message)
75
+ raise e
76
+ end
77
+
75
78
  end
76
-
77
- end
78
-
79
- def delete
80
- logger.debug("Deleting resource #{@name}")
81
- begin
82
- physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
83
- if(!physical_id.nil?)
84
- args = {'id' => physical_id
79
+
80
+ def delete
81
+ logger.debug("Deleting resource #{@name}")
82
+ begin
83
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
84
+ if(!physical_id.nil?)
85
+ args = {'id' => physical_id
85
86
  }
86
- result_obj = make_async_request('destroyVirtualMachine',args)
87
- if (!(result_obj['error'] == true))
88
- logger.info("Successfully deleted resource #{@name}")
87
+ result_obj = make_async_request('destroyVirtualMachine',args)
88
+ if (!(result_obj['error'] == true))
89
+ logger.info("Successfully deleted resource #{@name}")
90
+ else
91
+ workitem[@name]['delete_error'] = true
92
+ logger.info("CloudStack error while deleting resource #{@name}")
93
+ end
89
94
  else
90
- logger.info("CloudStack error while deleting resource #{@name}")
95
+ logger.info("Resource not created in CloudStack. Skipping delete...")
91
96
  end
92
- else
93
- logger.info("Resource not created in CloudStack. Skipping delete...")
97
+ rescue Exception => e
98
+ logger.error("Unable to delete resorce #{@name}")
94
99
  end
95
- rescue Exception => e
96
- logger.error("Unable to delete resorce #{@name}")
97
- end
98
- end
99
-
100
- def on_workitem
101
- @name = workitem.participant_name
102
- @props = workitem['Resources'][@name]['Properties']
103
- @props.downcase_key
104
- @resolved_names = workitem['ResolvedNames']
105
- if workitem['params']['operation'] == 'create'
106
- create
107
- else
108
- delete
109
100
  end
110
- reply
111
- end
112
-
113
-
114
- def get_templateid
115
- resolved_templateid = get_resolved(@props["templateid"],workitem)
116
- if resolved_templateid.nil? || !validate_param(resolved_templateid,"uuid")
117
- raise "Missing mandatory parameter templateid for resource #{@name}"
118
- end
119
- resolved_templateid
120
- end
121
-
122
101
 
123
- def get_serviceofferingid
124
- resolved_serviceofferingid = get_resolved(@props["serviceofferingid"],workitem)
125
- if resolved_serviceofferingid.nil? || !validate_param(resolved_serviceofferingid,"uuid")
126
- raise "Missing mandatory parameter serviceofferingid for resource #{@name}"
127
- end
128
- resolved_serviceofferingid
129
- end
130
-
131
-
132
- def get_zoneid
133
- resolved_zoneid = get_resolved(@props["zoneid"],workitem)
134
- if resolved_zoneid.nil? || !validate_param(resolved_zoneid,"uuid")
135
- raise "Missing mandatory parameter zoneid for resource #{@name}"
102
+ def on_workitem
103
+ @name = workitem.participant_name
104
+ @props = workitem['Resources'][@name]['Properties']
105
+ @props.downcase_key
106
+ @resolved_names = workitem['ResolvedNames']
107
+ if workitem['params']['operation'] == 'create'
108
+ create
109
+ else
110
+ delete
111
+ end
112
+ reply
136
113
  end
137
- resolved_zoneid
138
- end
139
-
140
-
141
- def get_securitygroupnames
142
- resolved_securitygroupnames = get_resolved(@props['securitygroupnames'],workitem)
143
- if resolved_securitygroupnames.nil? || !validate_param(resolved_securitygroupnames,"list")
144
- raise "Malformed optional parameter securitygroupnames for resource #{@name}"
114
+
115
+ def get_templateid
116
+ resolved_templateid = get_resolved(@props["templateid"],workitem)
117
+ if resolved_templateid.nil? || !validate_param(resolved_templateid,"uuid")
118
+ raise "Missing mandatory parameter templateid for resource #{@name}"
119
+ end
120
+ resolved_templateid
121
+ end
122
+
123
+ def get_serviceofferingid
124
+ resolved_serviceofferingid = get_resolved(@props["serviceofferingid"],workitem)
125
+ if resolved_serviceofferingid.nil? || !validate_param(resolved_serviceofferingid,"uuid")
126
+ raise "Missing mandatory parameter serviceofferingid for resource #{@name}"
127
+ end
128
+ resolved_serviceofferingid
129
+ end
130
+
131
+ def get_zoneid
132
+ resolved_zoneid = get_resolved(@props["zoneid"],workitem)
133
+ if resolved_zoneid.nil? || !validate_param(resolved_zoneid,"uuid")
134
+ raise "Missing mandatory parameter zoneid for resource #{@name}"
135
+ end
136
+ resolved_zoneid
137
+ end
138
+
139
+ def get_securitygroupnames
140
+ resolved_securitygroupnames = get_resolved(@props['securitygroupnames'],workitem)
141
+ if resolved_securitygroupnames.nil? || !validate_param(resolved_securitygroupnames,"list")
142
+ raise "Malformed optional parameter securitygroupnames for resource #{@name}"
143
+ end
144
+ resolved_securitygroupnames
145
145
  end
146
- resolved_securitygroupnames
147
- end
148
146
 
149
-
150
- def get_affinitygroupids
151
- resolved_affinitygroupids = get_resolved(@props['affinitygroupids'],workitem)
152
- if resolved_affinitygroupids.nil? || !validate_param(resolved_affinitygroupids,"list")
153
- raise "Malformed optional parameter affinitygroupids for resource #{@name}"
147
+ def get_affinitygroupids
148
+ resolved_affinitygroupids = get_resolved(@props['affinitygroupids'],workitem)
149
+ if resolved_affinitygroupids.nil? || !validate_param(resolved_affinitygroupids,"list")
150
+ raise "Malformed optional parameter affinitygroupids for resource #{@name}"
151
+ end
152
+ resolved_affinitygroupids
154
153
  end
155
- resolved_affinitygroupids
156
- end
157
154
 
158
-
159
- def get_startvm
160
- resolved_startvm = get_resolved(@props['startvm'],workitem)
161
- if resolved_startvm.nil? || !validate_param(resolved_startvm,"boolean")
162
- raise "Malformed optional parameter startvm for resource #{@name}"
155
+ def get_startvm
156
+ resolved_startvm = get_resolved(@props['startvm'],workitem)
157
+ if resolved_startvm.nil? || !validate_param(resolved_startvm,"boolean")
158
+ raise "Malformed optional parameter startvm for resource #{@name}"
159
+ end
160
+ resolved_startvm
163
161
  end
164
- resolved_startvm
165
- end
166
162
 
167
-
168
- def get_displayvm
169
- resolved_displayvm = get_resolved(@props['displayvm'],workitem)
170
- if resolved_displayvm.nil? || !validate_param(resolved_displayvm,"boolean")
171
- raise "Malformed optional parameter displayvm for resource #{@name}"
163
+ def get_displayvm
164
+ resolved_displayvm = get_resolved(@props['displayvm'],workitem)
165
+ if resolved_displayvm.nil? || !validate_param(resolved_displayvm,"boolean")
166
+ raise "Malformed optional parameter displayvm for resource #{@name}"
167
+ end
168
+ resolved_displayvm
172
169
  end
173
- resolved_displayvm
174
- end
175
170
 
176
-
177
- def get_diskofferingid
178
- resolved_diskofferingid = get_resolved(@props['diskofferingid'],workitem)
179
- if resolved_diskofferingid.nil? || !validate_param(resolved_diskofferingid,"uuid")
180
- raise "Malformed optional parameter diskofferingid for resource #{@name}"
171
+ def get_diskofferingid
172
+ resolved_diskofferingid = get_resolved(@props['diskofferingid'],workitem)
173
+ if resolved_diskofferingid.nil? || !validate_param(resolved_diskofferingid,"uuid")
174
+ raise "Malformed optional parameter diskofferingid for resource #{@name}"
175
+ end
176
+ resolved_diskofferingid
181
177
  end
182
- resolved_diskofferingid
183
- end
184
178
 
185
-
186
- def get_hypervisor
187
- resolved_hypervisor = get_resolved(@props['hypervisor'],workitem)
188
- if resolved_hypervisor.nil? || !validate_param(resolved_hypervisor,"string")
189
- raise "Malformed optional parameter hypervisor for resource #{@name}"
179
+ def get_hypervisor
180
+ resolved_hypervisor = get_resolved(@props['hypervisor'],workitem)
181
+ if resolved_hypervisor.nil? || !validate_param(resolved_hypervisor,"string")
182
+ raise "Malformed optional parameter hypervisor for resource #{@name}"
183
+ end
184
+ resolved_hypervisor
190
185
  end
191
- resolved_hypervisor
192
- end
193
186
 
194
-
195
- def get_keyboard
196
- resolved_keyboard = get_resolved(@props['keyboard'],workitem)
197
- if resolved_keyboard.nil? || !validate_param(resolved_keyboard,"string")
198
- raise "Malformed optional parameter keyboard for resource #{@name}"
187
+ def get_keyboard
188
+ resolved_keyboard = get_resolved(@props['keyboard'],workitem)
189
+ if resolved_keyboard.nil? || !validate_param(resolved_keyboard,"string")
190
+ raise "Malformed optional parameter keyboard for resource #{@name}"
191
+ end
192
+ resolved_keyboard
199
193
  end
200
- resolved_keyboard
201
- end
202
-
203
194
 
204
- def get_name
205
- resolved_name = get_resolved(@props['name'],workitem)
206
- if resolved_name.nil? || !validate_param(resolved_name,"string")
207
- raise "Malformed optional parameter name for resource #{@name}"
195
+ def get_name
196
+ resolved_name = get_resolved(@props['name'],workitem)
197
+ if resolved_name.nil? || !validate_param(resolved_name,"string")
198
+ raise "Malformed optional parameter name for resource #{@name}"
199
+ end
200
+ resolved_name
208
201
  end
209
- resolved_name
210
- end
211
-
212
202
 
213
- def get_iptonetworklist
214
- resolved_iptonetworklist = get_resolved(@props['iptonetworklist'],workitem)
215
- if resolved_iptonetworklist.nil? || !validate_param(resolved_iptonetworklist,"map")
216
- raise "Malformed optional parameter iptonetworklist for resource #{@name}"
203
+ def get_iptonetworklist
204
+ resolved_iptonetworklist = get_resolved(@props['iptonetworklist'],workitem)
205
+ if resolved_iptonetworklist.nil? || !validate_param(resolved_iptonetworklist,"map")
206
+ raise "Malformed optional parameter iptonetworklist for resource #{@name}"
207
+ end
208
+ resolved_iptonetworklist
217
209
  end
218
- resolved_iptonetworklist
219
- end
220
-
221
210
 
222
- def get_networkids
223
- resolved_networkids = get_resolved(@props['networkids'],workitem)
224
- if resolved_networkids.nil? || !validate_param(resolved_networkids,"list")
225
- raise "Malformed optional parameter networkids for resource #{@name}"
211
+ def get_networkids
212
+ resolved_networkids = get_resolved(@props['networkids'],workitem)
213
+ if resolved_networkids.nil? || !validate_param(resolved_networkids,"list")
214
+ raise "Malformed optional parameter networkids for resource #{@name}"
215
+ end
216
+ resolved_networkids
226
217
  end
227
- resolved_networkids
228
- end
229
-
230
218
 
231
- def get_account
232
- resolved_account = get_resolved(@props['account'],workitem)
233
- if resolved_account.nil? || !validate_param(resolved_account,"string")
234
- raise "Malformed optional parameter account for resource #{@name}"
219
+ def get_account
220
+ resolved_account = get_resolved(@props['account'],workitem)
221
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
222
+ raise "Malformed optional parameter account for resource #{@name}"
223
+ end
224
+ resolved_account
235
225
  end
236
- resolved_account
237
- end
238
-
239
226
 
240
- def get_userdata
241
- resolved_userdata = get_resolved(@props['userdata'],workitem)
242
- if resolved_userdata.nil? || !validate_param(resolved_userdata,"string")
243
- raise "Malformed optional parameter userdata for resource #{@name}"
227
+ def get_userdata
228
+ resolved_userdata = get_resolved(@props['userdata'],workitem)
229
+ if resolved_userdata.nil? || !validate_param(resolved_userdata,"string")
230
+ raise "Malformed optional parameter userdata for resource #{@name}"
231
+ end
232
+ resolved_userdata
244
233
  end
245
- resolved_userdata
246
- end
247
234
 
248
-
249
- def get_keypair
250
- resolved_keypair = get_resolved(@props['keypair'],workitem)
251
- if resolved_keypair.nil? || !validate_param(resolved_keypair,"string")
252
- raise "Malformed optional parameter keypair for resource #{@name}"
235
+ def get_keypair
236
+ resolved_keypair = get_resolved(@props['keypair'],workitem)
237
+ if resolved_keypair.nil? || !validate_param(resolved_keypair,"string")
238
+ raise "Malformed optional parameter keypair for resource #{@name}"
239
+ end
240
+ resolved_keypair
253
241
  end
254
- resolved_keypair
255
- end
256
242
 
257
-
258
- def get_projectid
259
- resolved_projectid = get_resolved(@props['projectid'],workitem)
260
- if resolved_projectid.nil? || !validate_param(resolved_projectid,"uuid")
261
- raise "Malformed optional parameter projectid for resource #{@name}"
243
+ def get_projectid
244
+ resolved_projectid = get_resolved(@props['projectid'],workitem)
245
+ if resolved_projectid.nil? || !validate_param(resolved_projectid,"uuid")
246
+ raise "Malformed optional parameter projectid for resource #{@name}"
247
+ end
248
+ resolved_projectid
262
249
  end
263
- resolved_projectid
264
- end
265
250
 
266
-
267
- def get_ipaddress
268
- resolved_ipaddress = get_resolved(@props['ipaddress'],workitem)
269
- if resolved_ipaddress.nil? || !validate_param(resolved_ipaddress,"string")
270
- raise "Malformed optional parameter ipaddress for resource #{@name}"
251
+ def get_ipaddress
252
+ resolved_ipaddress = get_resolved(@props['ipaddress'],workitem)
253
+ if resolved_ipaddress.nil? || !validate_param(resolved_ipaddress,"string")
254
+ raise "Malformed optional parameter ipaddress for resource #{@name}"
255
+ end
256
+ resolved_ipaddress
271
257
  end
272
- resolved_ipaddress
273
- end
274
258
 
275
-
276
- def get_displayname
277
- resolved_displayname = get_resolved(@props['displayname'],workitem)
278
- if resolved_displayname.nil? || !validate_param(resolved_displayname,"string")
279
- raise "Malformed optional parameter displayname for resource #{@name}"
259
+ def get_displayname
260
+ resolved_displayname = get_resolved(@props['displayname'],workitem)
261
+ if resolved_displayname.nil? || !validate_param(resolved_displayname,"string")
262
+ raise "Malformed optional parameter displayname for resource #{@name}"
263
+ end
264
+ resolved_displayname
280
265
  end
281
- resolved_displayname
282
- end
283
-
284
266
 
285
- def get_ip6address
286
- resolved_ip6address = get_resolved(@props['ip6address'],workitem)
287
- if resolved_ip6address.nil? || !validate_param(resolved_ip6address,"string")
288
- raise "Malformed optional parameter ip6address for resource #{@name}"
267
+ def get_ip6address
268
+ resolved_ip6address = get_resolved(@props['ip6address'],workitem)
269
+ if resolved_ip6address.nil? || !validate_param(resolved_ip6address,"string")
270
+ raise "Malformed optional parameter ip6address for resource #{@name}"
271
+ end
272
+ resolved_ip6address
289
273
  end
290
- resolved_ip6address
291
- end
292
-
293
274
 
294
- def get_affinitygroupnames
295
- resolved_affinitygroupnames = get_resolved(@props['affinitygroupnames'],workitem)
296
- if resolved_affinitygroupnames.nil? || !validate_param(resolved_affinitygroupnames,"list")
297
- raise "Malformed optional parameter affinitygroupnames for resource #{@name}"
275
+ def get_affinitygroupnames
276
+ resolved_affinitygroupnames = get_resolved(@props['affinitygroupnames'],workitem)
277
+ if resolved_affinitygroupnames.nil? || !validate_param(resolved_affinitygroupnames,"list")
278
+ raise "Malformed optional parameter affinitygroupnames for resource #{@name}"
279
+ end
280
+ resolved_affinitygroupnames
298
281
  end
299
- resolved_affinitygroupnames
300
- end
301
-
302
282
 
303
- def get_domainid
304
- resolved_domainid = get_resolved(@props['domainid'],workitem)
305
- if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
306
- raise "Malformed optional parameter domainid for resource #{@name}"
283
+ def get_domainid
284
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
285
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
286
+ raise "Malformed optional parameter domainid for resource #{@name}"
287
+ end
288
+ resolved_domainid
307
289
  end
308
- resolved_domainid
309
- end
310
-
311
290
 
312
- def get_size
313
- resolved_size = get_resolved(@props['size'],workitem)
314
- if resolved_size.nil? || !validate_param(resolved_size,"long")
315
- raise "Malformed optional parameter size for resource #{@name}"
291
+ def get_size
292
+ resolved_size = get_resolved(@props['size'],workitem)
293
+ if resolved_size.nil? || !validate_param(resolved_size,"long")
294
+ raise "Malformed optional parameter size for resource #{@name}"
295
+ end
296
+ resolved_size
316
297
  end
317
- resolved_size
318
- end
319
-
320
298
 
321
- def get_hostid
322
- resolved_hostid = get_resolved(@props['hostid'],workitem)
323
- if resolved_hostid.nil? || !validate_param(resolved_hostid,"uuid")
324
- raise "Malformed optional parameter hostid for resource #{@name}"
299
+ def get_hostid
300
+ resolved_hostid = get_resolved(@props['hostid'],workitem)
301
+ if resolved_hostid.nil? || !validate_param(resolved_hostid,"uuid")
302
+ raise "Malformed optional parameter hostid for resource #{@name}"
303
+ end
304
+ resolved_hostid
325
305
  end
326
- resolved_hostid
327
- end
328
-
329
306
 
330
- def get_securitygroupids
331
- resolved_securitygroupids = get_resolved(@props['securitygroupids'],workitem)
332
- if resolved_securitygroupids.nil? || !validate_param(resolved_securitygroupids,"list")
333
- raise "Malformed optional parameter securitygroupids for resource #{@name}"
307
+ def get_securitygroupids
308
+ resolved_securitygroupids = get_resolved(@props['securitygroupids'],workitem)
309
+ if resolved_securitygroupids.nil? || !validate_param(resolved_securitygroupids,"list")
310
+ raise "Malformed optional parameter securitygroupids for resource #{@name}"
311
+ end
312
+ resolved_securitygroupids
334
313
  end
335
- resolved_securitygroupids
336
- end
337
-
338
314
 
339
- def get_group
340
- resolved_group = get_resolved(@props['group'],workitem)
341
- if resolved_group.nil? || !validate_param(resolved_group,"string")
342
- raise "Malformed optional parameter group for resource #{@name}"
315
+ def get_group
316
+ resolved_group = get_resolved(@props['group'],workitem)
317
+ if resolved_group.nil? || !validate_param(resolved_group,"string")
318
+ raise "Malformed optional parameter group for resource #{@name}"
319
+ end
320
+ resolved_group
343
321
  end
344
- resolved_group
345
- end
346
-
347
322
  end
348
323
  end
324
+