stackmate 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
+