stackmate 0.0.4 → 0.1.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 (66) hide show
  1. data/CHANGELOG.txt +7 -0
  2. data/README.md +25 -8
  3. data/bin/stackmate.rb +57 -53
  4. data/lib/stackmate/aws_attribs.rb +31 -31
  5. data/lib/stackmate/classmap.rb +33 -25
  6. data/lib/stackmate/client.rb +80 -0
  7. data/lib/stackmate/intrinsic_functions.rb +94 -38
  8. data/lib/stackmate/logging.rb +19 -19
  9. data/lib/stackmate/participants/cloudstack.rb +250 -165
  10. data/lib/stackmate/participants/cloudstack_affinitygroup.rb +122 -0
  11. data/lib/stackmate/participants/cloudstack_autoscalepolicy.rb +113 -0
  12. data/lib/stackmate/participants/cloudstack_autoscalevmgroup.rb +86 -0
  13. data/lib/stackmate/participants/cloudstack_autoscalevmprofile.rb +140 -0
  14. data/lib/stackmate/participants/cloudstack_condition.rb +122 -0
  15. data/lib/stackmate/participants/cloudstack_egressfirewallrule.rb +149 -0
  16. data/lib/stackmate/participants/cloudstack_firewallrule.rb +149 -0
  17. data/lib/stackmate/participants/cloudstack_globalloadbalancerrule.rb +158 -0
  18. data/lib/stackmate/participants/cloudstack_instancegroup.rb +113 -0
  19. data/lib/stackmate/participants/cloudstack_ipaddress.rb +149 -0
  20. data/lib/stackmate/participants/cloudstack_ipforwardingrule.rb +131 -0
  21. data/lib/stackmate/participants/cloudstack_iptonic.rb +95 -0
  22. data/lib/stackmate/participants/cloudstack_iso.rb +95 -0
  23. data/lib/stackmate/participants/cloudstack_lbhealthcheckpolicy.rb +140 -0
  24. data/lib/stackmate/participants/cloudstack_lbstickinesspolicy.rb +122 -0
  25. data/lib/stackmate/participants/cloudstack_loadbalancer.rb +158 -0
  26. data/lib/stackmate/participants/cloudstack_loadbalancerrule.rb +185 -0
  27. data/lib/stackmate/participants/cloudstack_network.rb +293 -0
  28. data/lib/stackmate/participants/cloudstack_networkacl.rb +176 -0
  29. data/lib/stackmate/participants/cloudstack_networkacllist.rb +104 -0
  30. data/lib/stackmate/participants/cloudstack_nictovirtualmachine.rb +104 -0
  31. data/lib/stackmate/participants/cloudstack_portforwardingrule.rb +176 -0
  32. data/lib/stackmate/participants/cloudstack_project.rb +113 -0
  33. data/lib/stackmate/participants/cloudstack_remoteaccessvpn.rb +122 -0
  34. data/lib/stackmate/participants/cloudstack_securitygroup.rb +122 -0
  35. data/lib/stackmate/participants/cloudstack_securitygroupegress.rb +185 -0
  36. data/lib/stackmate/participants/cloudstack_securitygroupingress.rb +185 -0
  37. data/lib/stackmate/participants/cloudstack_snapshot.rb +113 -0
  38. data/lib/stackmate/participants/cloudstack_snapshotpolicy.rb +122 -0
  39. data/lib/stackmate/participants/cloudstack_sshkeypair.rb +113 -0
  40. data/lib/stackmate/participants/cloudstack_staticnat.rb +113 -0
  41. data/lib/stackmate/participants/cloudstack_staticroute.rb +95 -0
  42. data/lib/stackmate/participants/cloudstack_tags.rb +113 -0
  43. data/lib/stackmate/participants/cloudstack_template.rb +212 -0
  44. data/lib/stackmate/participants/cloudstack_togloballoadbalancerrule.rb +104 -0
  45. data/lib/stackmate/participants/cloudstack_toloadbalancerrule.rb +95 -0
  46. data/lib/stackmate/participants/cloudstack_virtualmachine.rb +348 -0
  47. data/lib/stackmate/participants/cloudstack_virtualmachineops.rb +95 -0
  48. data/lib/stackmate/participants/cloudstack_vmsnapshot.rb +113 -0
  49. data/lib/stackmate/participants/cloudstack_volume.rb +176 -0
  50. data/lib/stackmate/participants/cloudstack_volumeops.rb +111 -0
  51. data/lib/stackmate/participants/cloudstack_vpc.rb +158 -0
  52. data/lib/stackmate/participants/cloudstack_vpnconnection.rb +95 -0
  53. data/lib/stackmate/participants/cloudstack_vpncustomergateway.rb +176 -0
  54. data/lib/stackmate/participants/cloudstack_vpngateway.rb +86 -0
  55. data/lib/stackmate/participants/cloudstack_vpnuser.rb +122 -0
  56. data/lib/stackmate/participants/common.rb +219 -70
  57. data/lib/stackmate/participants/stacknest.rb +6 -0
  58. data/lib/stackmate/resolver.rb +122 -0
  59. data/lib/stackmate/stack.rb +116 -60
  60. data/lib/stackmate/stack_executor.rb +99 -37
  61. data/lib/stackmate/stackpi.rb +46 -0
  62. data/lib/stackmate/version.rb +1 -1
  63. data/lib/stackmate/waitcondition_server.rb +15 -15
  64. data/lib/stackmate.rb +1 -1
  65. data/stackmate.gemspec +2 -4
  66. metadata +70 -19
@@ -0,0 +1,149 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackFirewallRule < CloudStackResource
5
+
6
+ include Logging
7
+ include Intrinsic
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
+ args['protocol'] = get_protocol
16
+ args['ipaddressid'] = get_ipaddressid
17
+ args['startport'] = get_startport if @props.has_key?('startport')
18
+ args['cidrlist'] = get_cidrlist if @props.has_key?('cidrlist')
19
+ args['icmpcode'] = get_icmpcode if @props.has_key?('icmpcode')
20
+ args['type'] = get_type if @props.has_key?('type')
21
+ args['icmptype'] = get_icmptype if @props.has_key?('icmptype')
22
+ args['endport'] = get_endport if @props.has_key?('endport')
23
+
24
+ logger.info("Creating resource #{@name} with following arguments")
25
+ p args
26
+ result_obj = make_async_request('createFirewallRule',args)
27
+ resource_obj = result_obj['FirewallRule'.downcase]
28
+ #doing it this way since it is easier to change later, rather than cloning whole object
29
+ resource_obj.each_key do |k|
30
+ val = resource_obj[k]
31
+ if('id'.eql?(k))
32
+ k = 'physical_id'
33
+ end
34
+ workitem[@name][k] = val
35
+ end
36
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"FirewallRule") if @props.has_key?('tags')
37
+ workitem['ResolvedNames'][@name] = name_cs
38
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
39
+
40
+ rescue NoMethodError => nme
41
+ logger.error("Create request failed for resource . Cleaning up the stack")
42
+ raise nme
43
+ rescue Exception => e
44
+ logger.error(e.message)
45
+ raise e
46
+ end
47
+
48
+ end
49
+
50
+ def delete
51
+ logger.debug("Deleting resource #{@name}")
52
+ begin
53
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
54
+ if(!physical_id.nil?)
55
+ args = {'id' => physical_id
56
+ }
57
+ result_obj = make_async_request('deleteFirewallRule',args)
58
+ if (!(result_obj['error'] == true))
59
+ logger.info("Successfully deleted resource #{@name}")
60
+ else
61
+ logger.info("CloudStack error while deleting resource #{@name}")
62
+ end
63
+ else
64
+ logger.info("Resource not created in CloudStack. Skipping delete...")
65
+ end
66
+ rescue Exception => e
67
+ logger.error("Unable to delete resorce #{@name}")
68
+ end
69
+ end
70
+
71
+ def on_workitem
72
+ @name = workitem.participant_name
73
+ @props = workitem['Resources'][@name]['Properties']
74
+ @props.downcase_key
75
+ @resolved_names = workitem['ResolvedNames']
76
+ if workitem['params']['operation'] == 'create'
77
+ create
78
+ else
79
+ delete
80
+ end
81
+ reply
82
+ end
83
+
84
+ def get_protocol
85
+ resolved_protocol = get_resolved(@props["protocol"],workitem)
86
+ if resolved_protocol.nil? || !validate_param(resolved_protocol,"string")
87
+ raise "Missing mandatory parameter protocol for resource #{@name}"
88
+ end
89
+ resolved_protocol
90
+ end
91
+
92
+ def get_ipaddressid
93
+ resolved_ipaddressid = get_resolved(@props["ipaddressid"],workitem)
94
+ if resolved_ipaddressid.nil? || !validate_param(resolved_ipaddressid,"uuid")
95
+ raise "Missing mandatory parameter ipaddressid for resource #{@name}"
96
+ end
97
+ resolved_ipaddressid
98
+ end
99
+
100
+ def get_startport
101
+ resolved_startport = get_resolved(@props['startport'],workitem)
102
+ if resolved_startport.nil? || !validate_param(resolved_startport,"integer")
103
+ raise "Malformed optional parameter startport for resource #{@name}"
104
+ end
105
+ resolved_startport
106
+ end
107
+
108
+ def get_cidrlist
109
+ resolved_cidrlist = get_resolved(@props['cidrlist'],workitem)
110
+ if resolved_cidrlist.nil? || !validate_param(resolved_cidrlist,"list")
111
+ raise "Malformed optional parameter cidrlist for resource #{@name}"
112
+ end
113
+ resolved_cidrlist
114
+ end
115
+
116
+ def get_icmpcode
117
+ resolved_icmpcode = get_resolved(@props['icmpcode'],workitem)
118
+ if resolved_icmpcode.nil? || !validate_param(resolved_icmpcode,"integer")
119
+ raise "Malformed optional parameter icmpcode for resource #{@name}"
120
+ end
121
+ resolved_icmpcode
122
+ end
123
+
124
+ def get_type
125
+ resolved_type = get_resolved(@props['type'],workitem)
126
+ if resolved_type.nil? || !validate_param(resolved_type,"string")
127
+ raise "Malformed optional parameter type for resource #{@name}"
128
+ end
129
+ resolved_type
130
+ end
131
+
132
+ def get_icmptype
133
+ resolved_icmptype = get_resolved(@props['icmptype'],workitem)
134
+ if resolved_icmptype.nil? || !validate_param(resolved_icmptype,"integer")
135
+ raise "Malformed optional parameter icmptype for resource #{@name}"
136
+ end
137
+ resolved_icmptype
138
+ end
139
+
140
+ def get_endport
141
+ resolved_endport = get_resolved(@props['endport'],workitem)
142
+ if resolved_endport.nil? || !validate_param(resolved_endport,"integer")
143
+ raise "Malformed optional parameter endport for resource #{@name}"
144
+ end
145
+ resolved_endport
146
+ end
147
+ end
148
+ end
149
+
@@ -0,0 +1,158 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackGlobalLoadBalancerRule < CloudStackResource
5
+
6
+ include Logging
7
+ include Intrinsic
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
+ args['regionid'] = get_regionid
16
+ args['gslbservicetype'] = get_gslbservicetype
17
+ args['gslbdomainname'] = get_gslbdomainname
18
+ args['name'] = workitem['StackName'] +'-' +get_name
19
+ args['account'] = get_account if @props.has_key?('account')
20
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
21
+ args['gslbstickysessionmethodname'] = get_gslbstickysessionmethodname if @props.has_key?('gslbstickysessionmethodname')
22
+ args['description'] = get_description if @props.has_key?('description')
23
+ args['gslblbmethod'] = get_gslblbmethod if @props.has_key?('gslblbmethod')
24
+
25
+ logger.info("Creating resource #{@name} with following arguments")
26
+ p args
27
+ result_obj = make_async_request('createGlobalLoadBalancerRule',args)
28
+ resource_obj = result_obj['GlobalLoadBalancerRule'.downcase]
29
+ #doing it this way since it is easier to change later, rather than cloning whole object
30
+ resource_obj.each_key do |k|
31
+ val = resource_obj[k]
32
+ if('id'.eql?(k))
33
+ k = 'physical_id'
34
+ end
35
+ workitem[@name][k] = val
36
+ end
37
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"GlobalLoadBalancerRule") if @props.has_key?('tags')
38
+ workitem['ResolvedNames'][@name] = name_cs
39
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
40
+
41
+ rescue NoMethodError => nme
42
+ logger.error("Create request failed for resource . Cleaning up the stack")
43
+ raise nme
44
+ rescue Exception => e
45
+ logger.error(e.message)
46
+ raise e
47
+ end
48
+
49
+ end
50
+
51
+ def delete
52
+ logger.debug("Deleting resource #{@name}")
53
+ begin
54
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
55
+ if(!physical_id.nil?)
56
+ args = {'id' => physical_id
57
+ }
58
+ result_obj = make_async_request('deleteGlobalLoadBalancerRule',args)
59
+ if (!(result_obj['error'] == true))
60
+ logger.info("Successfully deleted resource #{@name}")
61
+ else
62
+ logger.info("CloudStack error while deleting resource #{@name}")
63
+ end
64
+ else
65
+ logger.info("Resource not created in CloudStack. Skipping delete...")
66
+ end
67
+ rescue Exception => e
68
+ logger.error("Unable to delete resorce #{@name}")
69
+ end
70
+ end
71
+
72
+ def on_workitem
73
+ @name = workitem.participant_name
74
+ @props = workitem['Resources'][@name]['Properties']
75
+ @props.downcase_key
76
+ @resolved_names = workitem['ResolvedNames']
77
+ if workitem['params']['operation'] == 'create'
78
+ create
79
+ else
80
+ delete
81
+ end
82
+ reply
83
+ end
84
+
85
+ def get_regionid
86
+ resolved_regionid = get_resolved(@props["regionid"],workitem)
87
+ if resolved_regionid.nil? || !validate_param(resolved_regionid,"integer")
88
+ raise "Missing mandatory parameter regionid for resource #{@name}"
89
+ end
90
+ resolved_regionid
91
+ end
92
+
93
+ def get_gslbservicetype
94
+ resolved_gslbservicetype = get_resolved(@props["gslbservicetype"],workitem)
95
+ if resolved_gslbservicetype.nil? || !validate_param(resolved_gslbservicetype,"string")
96
+ raise "Missing mandatory parameter gslbservicetype for resource #{@name}"
97
+ end
98
+ resolved_gslbservicetype
99
+ end
100
+
101
+ def get_gslbdomainname
102
+ resolved_gslbdomainname = get_resolved(@props["gslbdomainname"],workitem)
103
+ if resolved_gslbdomainname.nil? || !validate_param(resolved_gslbdomainname,"string")
104
+ raise "Missing mandatory parameter gslbdomainname for resource #{@name}"
105
+ end
106
+ resolved_gslbdomainname
107
+ end
108
+
109
+ def get_name
110
+ resolved_name = get_resolved(@props["name"],workitem)
111
+ if resolved_name.nil? || !validate_param(resolved_name,"string")
112
+ raise "Missing mandatory parameter name for resource #{@name}"
113
+ end
114
+ resolved_name
115
+ end
116
+
117
+ def get_account
118
+ resolved_account = get_resolved(@props['account'],workitem)
119
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
120
+ raise "Malformed optional parameter account for resource #{@name}"
121
+ end
122
+ resolved_account
123
+ end
124
+
125
+ def get_domainid
126
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
127
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
128
+ raise "Malformed optional parameter domainid for resource #{@name}"
129
+ end
130
+ resolved_domainid
131
+ end
132
+
133
+ def get_gslbstickysessionmethodname
134
+ resolved_gslbstickysessionmethodname = get_resolved(@props['gslbstickysessionmethodname'],workitem)
135
+ if resolved_gslbstickysessionmethodname.nil? || !validate_param(resolved_gslbstickysessionmethodname,"string")
136
+ raise "Malformed optional parameter gslbstickysessionmethodname for resource #{@name}"
137
+ end
138
+ resolved_gslbstickysessionmethodname
139
+ end
140
+
141
+ def get_description
142
+ resolved_description = get_resolved(@props['description'],workitem)
143
+ if resolved_description.nil? || !validate_param(resolved_description,"string")
144
+ raise "Malformed optional parameter description for resource #{@name}"
145
+ end
146
+ resolved_description
147
+ end
148
+
149
+ def get_gslblbmethod
150
+ resolved_gslblbmethod = get_resolved(@props['gslblbmethod'],workitem)
151
+ if resolved_gslblbmethod.nil? || !validate_param(resolved_gslblbmethod,"string")
152
+ raise "Malformed optional parameter gslblbmethod for resource #{@name}"
153
+ end
154
+ resolved_gslblbmethod
155
+ end
156
+ end
157
+ end
158
+
@@ -0,0 +1,113 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackInstanceGroup < CloudStackResource
5
+
6
+ include Logging
7
+ include Intrinsic
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
+ args['name'] = workitem['StackName'] +'-' +get_name
16
+ args['account'] = get_account if @props.has_key?('account')
17
+ args['projectid'] = get_projectid if @props.has_key?('projectid')
18
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
19
+
20
+ logger.info("Creating resource #{@name} with following arguments")
21
+ p args
22
+ result_obj = make_sync_request('createInstanceGroup',args)
23
+ resource_obj = result_obj['InstanceGroup'.downcase]
24
+ #doing it this way since it is easier to change later, rather than cloning whole object
25
+ resource_obj.each_key do |k|
26
+ val = resource_obj[k]
27
+ if('id'.eql?(k))
28
+ k = 'physical_id'
29
+ end
30
+ workitem[@name][k] = val
31
+ end
32
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"InstanceGroup") if @props.has_key?('tags')
33
+ workitem['ResolvedNames'][@name] = name_cs
34
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
35
+
36
+ rescue NoMethodError => nme
37
+ logger.error("Create request failed for resource . Cleaning up the stack")
38
+ raise nme
39
+ rescue Exception => e
40
+ logger.error(e.message)
41
+ raise e
42
+ end
43
+
44
+ end
45
+
46
+ def delete
47
+ logger.debug("Deleting resource #{@name}")
48
+ begin
49
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
50
+ if(!physical_id.nil?)
51
+ args = {'id' => physical_id
52
+ }
53
+ result_obj = make_sync_request('deleteInstanceGroup',args)
54
+ if (!(result_obj['error'] == true))
55
+ logger.info("Successfully deleted resource #{@name}")
56
+ else
57
+ logger.info("CloudStack error while deleting resource #{@name}")
58
+ end
59
+ else
60
+ logger.info("Resource not created in CloudStack. Skipping delete...")
61
+ end
62
+ rescue Exception => e
63
+ logger.error("Unable to delete resorce #{@name}")
64
+ end
65
+ end
66
+
67
+ def on_workitem
68
+ @name = workitem.participant_name
69
+ @props = workitem['Resources'][@name]['Properties']
70
+ @props.downcase_key
71
+ @resolved_names = workitem['ResolvedNames']
72
+ if workitem['params']['operation'] == 'create'
73
+ create
74
+ else
75
+ delete
76
+ end
77
+ reply
78
+ end
79
+
80
+ def get_name
81
+ resolved_name = get_resolved(@props["name"],workitem)
82
+ if resolved_name.nil? || !validate_param(resolved_name,"string")
83
+ raise "Missing mandatory parameter name for resource #{@name}"
84
+ end
85
+ resolved_name
86
+ end
87
+
88
+ def get_account
89
+ resolved_account = get_resolved(@props['account'],workitem)
90
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
91
+ raise "Malformed optional parameter account for resource #{@name}"
92
+ end
93
+ resolved_account
94
+ end
95
+
96
+ def get_projectid
97
+ resolved_projectid = get_resolved(@props['projectid'],workitem)
98
+ if resolved_projectid.nil? || !validate_param(resolved_projectid,"uuid")
99
+ raise "Malformed optional parameter projectid for resource #{@name}"
100
+ end
101
+ resolved_projectid
102
+ end
103
+
104
+ def get_domainid
105
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
106
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
107
+ raise "Malformed optional parameter domainid for resource #{@name}"
108
+ end
109
+ resolved_domainid
110
+ end
111
+ end
112
+ end
113
+
@@ -0,0 +1,149 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackIpAddress < CloudStackResource
5
+
6
+ include Logging
7
+ include Intrinsic
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
+ args['networkid'] = get_networkid if @props.has_key?('networkid')
16
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
17
+ args['account'] = get_account if @props.has_key?('account')
18
+ args['vpcid'] = get_vpcid if @props.has_key?('vpcid')
19
+ args['regionid'] = get_regionid if @props.has_key?('regionid')
20
+ args['zoneid'] = get_zoneid if @props.has_key?('zoneid')
21
+ args['projectid'] = get_projectid if @props.has_key?('projectid')
22
+ args['isportable'] = get_isportable if @props.has_key?('isportable')
23
+
24
+ logger.info("Creating resource #{@name} with following arguments")
25
+ p args
26
+ result_obj = make_async_request('associateIpAddress',args)
27
+ resource_obj = result_obj['IpAddress'.downcase]
28
+ #doing it this way since it is easier to change later, rather than cloning whole object
29
+ resource_obj.each_key do |k|
30
+ val = resource_obj[k]
31
+ if('id'.eql?(k))
32
+ k = 'physical_id'
33
+ end
34
+ workitem[@name][k] = val
35
+ end
36
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"IpAddress") if @props.has_key?('tags')
37
+ workitem['ResolvedNames'][@name] = name_cs
38
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
39
+
40
+ rescue NoMethodError => nme
41
+ logger.error("Create request failed for resource . Cleaning up the stack")
42
+ raise nme
43
+ rescue Exception => e
44
+ logger.error(e.message)
45
+ raise e
46
+ end
47
+
48
+ end
49
+
50
+ def delete
51
+ logger.debug("Deleting resource #{@name}")
52
+ begin
53
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
54
+ if(!physical_id.nil?)
55
+ args = {'id' => physical_id
56
+ }
57
+ result_obj = make_async_request('disassociateIpAddress',args)
58
+ if (!(result_obj['error'] == true))
59
+ logger.info("Successfully deleted resource #{@name}")
60
+ else
61
+ logger.info("CloudStack error while deleting resource #{@name}")
62
+ end
63
+ else
64
+ logger.info("Resource not created in CloudStack. Skipping delete...")
65
+ end
66
+ rescue Exception => e
67
+ logger.error("Unable to delete resorce #{@name}")
68
+ end
69
+ end
70
+
71
+ def on_workitem
72
+ @name = workitem.participant_name
73
+ @props = workitem['Resources'][@name]['Properties']
74
+ @props.downcase_key
75
+ @resolved_names = workitem['ResolvedNames']
76
+ if workitem['params']['operation'] == 'create'
77
+ create
78
+ else
79
+ delete
80
+ end
81
+ reply
82
+ end
83
+
84
+ def get_networkid
85
+ resolved_networkid = get_resolved(@props['networkid'],workitem)
86
+ if resolved_networkid.nil? || !validate_param(resolved_networkid,"uuid")
87
+ raise "Malformed optional parameter networkid for resource #{@name}"
88
+ end
89
+ resolved_networkid
90
+ end
91
+
92
+ def get_domainid
93
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
94
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
95
+ raise "Malformed optional parameter domainid for resource #{@name}"
96
+ end
97
+ resolved_domainid
98
+ end
99
+
100
+ def get_account
101
+ resolved_account = get_resolved(@props['account'],workitem)
102
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
103
+ raise "Malformed optional parameter account for resource #{@name}"
104
+ end
105
+ resolved_account
106
+ end
107
+
108
+ def get_vpcid
109
+ resolved_vpcid = get_resolved(@props['vpcid'],workitem)
110
+ if resolved_vpcid.nil? || !validate_param(resolved_vpcid,"uuid")
111
+ raise "Malformed optional parameter vpcid for resource #{@name}"
112
+ end
113
+ resolved_vpcid
114
+ end
115
+
116
+ def get_regionid
117
+ resolved_regionid = get_resolved(@props['regionid'],workitem)
118
+ if resolved_regionid.nil? || !validate_param(resolved_regionid,"integer")
119
+ raise "Malformed optional parameter regionid for resource #{@name}"
120
+ end
121
+ resolved_regionid
122
+ end
123
+
124
+ def get_zoneid
125
+ resolved_zoneid = get_resolved(@props['zoneid'],workitem)
126
+ if resolved_zoneid.nil? || !validate_param(resolved_zoneid,"uuid")
127
+ raise "Malformed optional parameter zoneid for resource #{@name}"
128
+ end
129
+ resolved_zoneid
130
+ end
131
+
132
+ def get_projectid
133
+ resolved_projectid = get_resolved(@props['projectid'],workitem)
134
+ if resolved_projectid.nil? || !validate_param(resolved_projectid,"uuid")
135
+ raise "Malformed optional parameter projectid for resource #{@name}"
136
+ end
137
+ resolved_projectid
138
+ end
139
+
140
+ def get_isportable
141
+ resolved_isportable = get_resolved(@props['isportable'],workitem)
142
+ if resolved_isportable.nil? || !validate_param(resolved_isportable,"boolean")
143
+ raise "Malformed optional parameter isportable for resource #{@name}"
144
+ end
145
+ resolved_isportable
146
+ end
147
+ end
148
+ end
149
+