stackmate 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,122 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackRemoteAccessVpn < 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['publicipid'] = get_publicipid
16
+ args['account'] = get_account if @props.has_key?('account')
17
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
18
+ args['openfirewall'] = get_openfirewall if @props.has_key?('openfirewall')
19
+ args['iprange'] = get_iprange if @props.has_key?('iprange')
20
+
21
+ logger.info("Creating resource #{@name} with following arguments")
22
+ p args
23
+ result_obj = make_async_request('createRemoteAccessVpn',args)
24
+ resource_obj = result_obj['RemoteAccessVpn'.downcase]
25
+ #doing it this way since it is easier to change later, rather than cloning whole object
26
+ resource_obj.each_key do |k|
27
+ val = resource_obj[k]
28
+ if('id'.eql?(k))
29
+ k = 'physical_id'
30
+ end
31
+ workitem[@name][k] = val
32
+ end
33
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"RemoteAccessVpn") if @props.has_key?('tags')
34
+ workitem['ResolvedNames'][@name] = name_cs
35
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
36
+
37
+ rescue NoMethodError => nme
38
+ logger.error("Create request failed for resource . Cleaning up the stack")
39
+ raise nme
40
+ rescue Exception => e
41
+ logger.error(e.message)
42
+ raise e
43
+ end
44
+
45
+ end
46
+
47
+ def delete
48
+ logger.debug("Deleting resource #{@name}")
49
+ begin
50
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
51
+ if(!physical_id.nil?)
52
+ args = {'publicipid' => physical_id
53
+ }
54
+ result_obj = make_async_request('deleteRemoteAccessVpn',args)
55
+ if (!(result_obj['error'] == true))
56
+ logger.info("Successfully deleted resource #{@name}")
57
+ else
58
+ logger.info("CloudStack error while deleting resource #{@name}")
59
+ end
60
+ else
61
+ logger.info("Resource not created in CloudStack. Skipping delete...")
62
+ end
63
+ rescue Exception => e
64
+ logger.error("Unable to delete resorce #{@name}")
65
+ end
66
+ end
67
+
68
+ def on_workitem
69
+ @name = workitem.participant_name
70
+ @props = workitem['Resources'][@name]['Properties']
71
+ @props.downcase_key
72
+ @resolved_names = workitem['ResolvedNames']
73
+ if workitem['params']['operation'] == 'create'
74
+ create
75
+ else
76
+ delete
77
+ end
78
+ reply
79
+ end
80
+
81
+ def get_publicipid
82
+ resolved_publicipid = get_resolved(@props["publicipid"],workitem)
83
+ if resolved_publicipid.nil? || !validate_param(resolved_publicipid,"uuid")
84
+ raise "Missing mandatory parameter publicipid for resource #{@name}"
85
+ end
86
+ resolved_publicipid
87
+ end
88
+
89
+ def get_account
90
+ resolved_account = get_resolved(@props['account'],workitem)
91
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
92
+ raise "Malformed optional parameter account for resource #{@name}"
93
+ end
94
+ resolved_account
95
+ end
96
+
97
+ def get_domainid
98
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
99
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
100
+ raise "Malformed optional parameter domainid for resource #{@name}"
101
+ end
102
+ resolved_domainid
103
+ end
104
+
105
+ def get_openfirewall
106
+ resolved_openfirewall = get_resolved(@props['openfirewall'],workitem)
107
+ if resolved_openfirewall.nil? || !validate_param(resolved_openfirewall,"boolean")
108
+ raise "Malformed optional parameter openfirewall for resource #{@name}"
109
+ end
110
+ resolved_openfirewall
111
+ end
112
+
113
+ def get_iprange
114
+ resolved_iprange = get_resolved(@props['iprange'],workitem)
115
+ if resolved_iprange.nil? || !validate_param(resolved_iprange,"string")
116
+ raise "Malformed optional parameter iprange for resource #{@name}"
117
+ end
118
+ resolved_iprange
119
+ end
120
+ end
121
+ end
122
+
@@ -0,0 +1,122 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackSecurityGroup < 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['description'] = get_description if @props.has_key?('description')
17
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
18
+ args['account'] = get_account if @props.has_key?('account')
19
+ args['projectid'] = get_projectid if @props.has_key?('projectid')
20
+
21
+ logger.info("Creating resource #{@name} with following arguments")
22
+ p args
23
+ result_obj = make_sync_request('createSecurityGroup',args)
24
+ resource_obj = result_obj['SecurityGroup'.downcase]
25
+ #doing it this way since it is easier to change later, rather than cloning whole object
26
+ resource_obj.each_key do |k|
27
+ val = resource_obj[k]
28
+ if('id'.eql?(k))
29
+ k = 'physical_id'
30
+ end
31
+ workitem[@name][k] = val
32
+ end
33
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"SecurityGroup") if @props.has_key?('tags')
34
+ workitem['ResolvedNames'][@name] = name_cs
35
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
36
+
37
+ rescue NoMethodError => nme
38
+ logger.error("Create request failed for resource . Cleaning up the stack")
39
+ raise nme
40
+ rescue Exception => e
41
+ logger.error(e.message)
42
+ raise e
43
+ end
44
+
45
+ end
46
+
47
+ def delete
48
+ logger.debug("Deleting resource #{@name}")
49
+ begin
50
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
51
+ if(!physical_id.nil?)
52
+ args = {'id' => physical_id
53
+ }
54
+ result_obj = make_sync_request('deleteSecurityGroup',args)
55
+ if (!(result_obj['error'] == true))
56
+ logger.info("Successfully deleted resource #{@name}")
57
+ else
58
+ logger.info("CloudStack error while deleting resource #{@name}")
59
+ end
60
+ else
61
+ logger.info("Resource not created in CloudStack. Skipping delete...")
62
+ end
63
+ rescue Exception => e
64
+ logger.error("Unable to delete resorce #{@name}")
65
+ end
66
+ end
67
+
68
+ def on_workitem
69
+ @name = workitem.participant_name
70
+ @props = workitem['Resources'][@name]['Properties']
71
+ @props.downcase_key
72
+ @resolved_names = workitem['ResolvedNames']
73
+ if workitem['params']['operation'] == 'create'
74
+ create
75
+ else
76
+ delete
77
+ end
78
+ reply
79
+ end
80
+
81
+ def get_name
82
+ resolved_name = get_resolved(@props["name"],workitem)
83
+ if resolved_name.nil? || !validate_param(resolved_name,"string")
84
+ raise "Missing mandatory parameter name for resource #{@name}"
85
+ end
86
+ resolved_name
87
+ end
88
+
89
+ def get_description
90
+ resolved_description = get_resolved(@props['description'],workitem)
91
+ if resolved_description.nil? || !validate_param(resolved_description,"string")
92
+ raise "Malformed optional parameter description for resource #{@name}"
93
+ end
94
+ resolved_description
95
+ end
96
+
97
+ def get_domainid
98
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
99
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
100
+ raise "Malformed optional parameter domainid for resource #{@name}"
101
+ end
102
+ resolved_domainid
103
+ end
104
+
105
+ def get_account
106
+ resolved_account = get_resolved(@props['account'],workitem)
107
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
108
+ raise "Malformed optional parameter account for resource #{@name}"
109
+ end
110
+ resolved_account
111
+ end
112
+
113
+ def get_projectid
114
+ resolved_projectid = get_resolved(@props['projectid'],workitem)
115
+ if resolved_projectid.nil? || !validate_param(resolved_projectid,"uuid")
116
+ raise "Malformed optional parameter projectid for resource #{@name}"
117
+ end
118
+ resolved_projectid
119
+ end
120
+ end
121
+ end
122
+
@@ -0,0 +1,185 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackSecurityGroupEgress < 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['cidrlist'] = get_cidrlist if @props.has_key?('cidrlist')
16
+ args['securitygroupname'] = get_securitygroupname if @props.has_key?('securitygroupname')
17
+ args['account'] = get_account if @props.has_key?('account')
18
+ args['endport'] = get_endport if @props.has_key?('endport')
19
+ args['usersecuritygrouplist'] = get_usersecuritygrouplist if @props.has_key?('usersecuritygrouplist')
20
+ args['protocol'] = get_protocol if @props.has_key?('protocol')
21
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
22
+ args['icmptype'] = get_icmptype if @props.has_key?('icmptype')
23
+ args['startport'] = get_startport if @props.has_key?('startport')
24
+ args['icmpcode'] = get_icmpcode if @props.has_key?('icmpcode')
25
+ args['projectid'] = get_projectid if @props.has_key?('projectid')
26
+ args['securitygroupid'] = get_securitygroupid if @props.has_key?('securitygroupid')
27
+
28
+ logger.info("Creating resource #{@name} with following arguments")
29
+ p args
30
+ result_obj = make_async_request('authorizeSecurityGroupEgress',args)
31
+ resource_obj = result_obj['securitygroup']['egressrule'.downcase][0]
32
+ #doing it this way since it is easier to change later, rather than cloning whole object
33
+ resource_obj.each_key do |k|
34
+ val = resource_obj[k]
35
+ if('ruleid'.eql?(k))
36
+ k = 'physical_id'
37
+ end
38
+ workitem[@name][k] = val
39
+ end
40
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"SecurityGroupEgress") if @props.has_key?('tags')
41
+ workitem['ResolvedNames'][@name] = name_cs
42
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
43
+
44
+ rescue NoMethodError => nme
45
+ logger.error("Create request failed for resource . Cleaning up the stack")
46
+ raise nme
47
+ rescue Exception => e
48
+ logger.error(e.message)
49
+ raise e
50
+ end
51
+
52
+ end
53
+
54
+ def delete
55
+ logger.debug("Deleting resource #{@name}")
56
+ begin
57
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
58
+ if(!physical_id.nil?)
59
+ args = {'id' => physical_id
60
+ }
61
+ result_obj = make_async_request('revokeSecurityGroupEgress',args)
62
+ if (!(result_obj['error'] == true))
63
+ logger.info("Successfully deleted resource #{@name}")
64
+ else
65
+ logger.info("CloudStack error while deleting resource #{@name}")
66
+ end
67
+ else
68
+ logger.info("Resource not created in CloudStack. Skipping delete...")
69
+ end
70
+ rescue Exception => e
71
+ logger.error("Unable to delete resorce #{@name}")
72
+ end
73
+ end
74
+
75
+ def on_workitem
76
+ @name = workitem.participant_name
77
+ @props = workitem['Resources'][@name]['Properties']
78
+ @props.downcase_key
79
+ @resolved_names = workitem['ResolvedNames']
80
+ if workitem['params']['operation'] == 'create'
81
+ create
82
+ else
83
+ delete
84
+ end
85
+ reply
86
+ end
87
+
88
+ def get_cidrlist
89
+ resolved_cidrlist = get_resolved(@props['cidrlist'],workitem)
90
+ if resolved_cidrlist.nil? || !validate_param(resolved_cidrlist,"list")
91
+ raise "Malformed optional parameter cidrlist for resource #{@name}"
92
+ end
93
+ resolved_cidrlist
94
+ end
95
+
96
+ def get_securitygroupname
97
+ resolved_securitygroupname = get_resolved(@props['securitygroupname'],workitem)
98
+ if resolved_securitygroupname.nil? || !validate_param(resolved_securitygroupname,"string")
99
+ raise "Malformed optional parameter securitygroupname for resource #{@name}"
100
+ end
101
+ resolved_securitygroupname
102
+ end
103
+
104
+ def get_account
105
+ resolved_account = get_resolved(@props['account'],workitem)
106
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
107
+ raise "Malformed optional parameter account for resource #{@name}"
108
+ end
109
+ resolved_account
110
+ end
111
+
112
+ def get_endport
113
+ resolved_endport = get_resolved(@props['endport'],workitem)
114
+ if resolved_endport.nil? || !validate_param(resolved_endport,"integer")
115
+ raise "Malformed optional parameter endport for resource #{@name}"
116
+ end
117
+ resolved_endport
118
+ end
119
+
120
+ def get_usersecuritygrouplist
121
+ resolved_usersecuritygrouplist = get_resolved(@props['usersecuritygrouplist'],workitem)
122
+ if resolved_usersecuritygrouplist.nil? || !validate_param(resolved_usersecuritygrouplist,"map")
123
+ raise "Malformed optional parameter usersecuritygrouplist for resource #{@name}"
124
+ end
125
+ resolved_usersecuritygrouplist
126
+ end
127
+
128
+ def get_protocol
129
+ resolved_protocol = get_resolved(@props['protocol'],workitem)
130
+ if resolved_protocol.nil? || !validate_param(resolved_protocol,"string")
131
+ raise "Malformed optional parameter protocol for resource #{@name}"
132
+ end
133
+ resolved_protocol
134
+ end
135
+
136
+ def get_domainid
137
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
138
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
139
+ raise "Malformed optional parameter domainid for resource #{@name}"
140
+ end
141
+ resolved_domainid
142
+ end
143
+
144
+ def get_icmptype
145
+ resolved_icmptype = get_resolved(@props['icmptype'],workitem)
146
+ if resolved_icmptype.nil? || !validate_param(resolved_icmptype,"integer")
147
+ raise "Malformed optional parameter icmptype for resource #{@name}"
148
+ end
149
+ resolved_icmptype
150
+ end
151
+
152
+ def get_startport
153
+ resolved_startport = get_resolved(@props['startport'],workitem)
154
+ if resolved_startport.nil? || !validate_param(resolved_startport,"integer")
155
+ raise "Malformed optional parameter startport for resource #{@name}"
156
+ end
157
+ resolved_startport
158
+ end
159
+
160
+ def get_icmpcode
161
+ resolved_icmpcode = get_resolved(@props['icmpcode'],workitem)
162
+ if resolved_icmpcode.nil? || !validate_param(resolved_icmpcode,"integer")
163
+ raise "Malformed optional parameter icmpcode for resource #{@name}"
164
+ end
165
+ resolved_icmpcode
166
+ end
167
+
168
+ def get_projectid
169
+ resolved_projectid = get_resolved(@props['projectid'],workitem)
170
+ if resolved_projectid.nil? || !validate_param(resolved_projectid,"uuid")
171
+ raise "Malformed optional parameter projectid for resource #{@name}"
172
+ end
173
+ resolved_projectid
174
+ end
175
+
176
+ def get_securitygroupid
177
+ resolved_securitygroupid = get_resolved(@props['securitygroupid'],workitem)
178
+ if resolved_securitygroupid.nil? || !validate_param(resolved_securitygroupid,"uuid")
179
+ raise "Malformed optional parameter securitygroupid for resource #{@name}"
180
+ end
181
+ resolved_securitygroupid
182
+ end
183
+ end
184
+ end
185
+
@@ -0,0 +1,185 @@
1
+ require 'stackmate/participants/cloudstack'
2
+
3
+ module StackMate
4
+ class CloudStackSecurityGroupIngress < 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['endport'] = get_endport if @props.has_key?('endport')
16
+ args['securitygroupid'] = get_securitygroupid if @props.has_key?('securitygroupid')
17
+ args['protocol'] = get_protocol if @props.has_key?('protocol')
18
+ args['icmpcode'] = get_icmpcode if @props.has_key?('icmpcode')
19
+ args['startport'] = get_startport if @props.has_key?('startport')
20
+ args['projectid'] = get_projectid if @props.has_key?('projectid')
21
+ args['usersecuritygrouplist'] = get_usersecuritygrouplist if @props.has_key?('usersecuritygrouplist')
22
+ args['cidrlist'] = get_cidrlist if @props.has_key?('cidrlist')
23
+ args['securitygroupname'] = get_securitygroupname if @props.has_key?('securitygroupname')
24
+ args['icmptype'] = get_icmptype if @props.has_key?('icmptype')
25
+ args['account'] = get_account if @props.has_key?('account')
26
+ args['domainid'] = get_domainid if @props.has_key?('domainid')
27
+
28
+ logger.info("Creating resource #{@name} with following arguments")
29
+ p args
30
+ result_obj = make_async_request('authorizeSecurityGroupIngress',args)
31
+ resource_obj = result_obj['securitygroup']['ingressrule'.downcase][0]
32
+ #doing it this way since it is easier to change later, rather than cloning whole object
33
+ resource_obj.each_key do |k|
34
+ val = resource_obj[k]
35
+ if('ruleid'.eql?(k))
36
+ k = 'physical_id'
37
+ end
38
+ workitem[@name][k] = val
39
+ end
40
+ set_tags(@props['tags'],workitem[@name]['physical_id'],"SecurityGroupIngress") if @props.has_key?('tags')
41
+ workitem['ResolvedNames'][@name] = name_cs
42
+ workitem['IdMap'][workitem[@name]['physical_id']] = @name
43
+
44
+ rescue NoMethodError => nme
45
+ logger.error("Create request failed for resource . Cleaning up the stack")
46
+ raise nme
47
+ rescue Exception => e
48
+ logger.error(e.message)
49
+ raise e
50
+ end
51
+
52
+ end
53
+
54
+ def delete
55
+ logger.debug("Deleting resource #{@name}")
56
+ begin
57
+ physical_id = workitem[@name]['physical_id'] if !workitem[@name].nil?
58
+ if(!physical_id.nil?)
59
+ args = {'id' => physical_id
60
+ }
61
+ result_obj = make_async_request('revokeSecurityGroupIngress',args)
62
+ if (!(result_obj['error'] == true))
63
+ logger.info("Successfully deleted resource #{@name}")
64
+ else
65
+ logger.info("CloudStack error while deleting resource #{@name}")
66
+ end
67
+ else
68
+ logger.info("Resource not created in CloudStack. Skipping delete...")
69
+ end
70
+ rescue Exception => e
71
+ logger.error("Unable to delete resorce #{@name}")
72
+ end
73
+ end
74
+
75
+ def on_workitem
76
+ @name = workitem.participant_name
77
+ @props = workitem['Resources'][@name]['Properties']
78
+ @props.downcase_key
79
+ @resolved_names = workitem['ResolvedNames']
80
+ if workitem['params']['operation'] == 'create'
81
+ create
82
+ else
83
+ delete
84
+ end
85
+ reply
86
+ end
87
+
88
+ def get_endport
89
+ resolved_endport = get_resolved(@props['endport'],workitem)
90
+ if resolved_endport.nil? || !validate_param(resolved_endport,"integer")
91
+ raise "Malformed optional parameter endport for resource #{@name}"
92
+ end
93
+ resolved_endport
94
+ end
95
+
96
+ def get_securitygroupid
97
+ resolved_securitygroupid = get_resolved(@props['securitygroupid'],workitem)
98
+ if resolved_securitygroupid.nil? || !validate_param(resolved_securitygroupid,"uuid")
99
+ raise "Malformed optional parameter securitygroupid for resource #{@name}"
100
+ end
101
+ resolved_securitygroupid
102
+ end
103
+
104
+ def get_protocol
105
+ resolved_protocol = get_resolved(@props['protocol'],workitem)
106
+ if resolved_protocol.nil? || !validate_param(resolved_protocol,"string")
107
+ raise "Malformed optional parameter protocol for resource #{@name}"
108
+ end
109
+ resolved_protocol
110
+ end
111
+
112
+ def get_icmpcode
113
+ resolved_icmpcode = get_resolved(@props['icmpcode'],workitem)
114
+ if resolved_icmpcode.nil? || !validate_param(resolved_icmpcode,"integer")
115
+ raise "Malformed optional parameter icmpcode for resource #{@name}"
116
+ end
117
+ resolved_icmpcode
118
+ end
119
+
120
+ def get_startport
121
+ resolved_startport = get_resolved(@props['startport'],workitem)
122
+ if resolved_startport.nil? || !validate_param(resolved_startport,"integer")
123
+ raise "Malformed optional parameter startport for resource #{@name}"
124
+ end
125
+ resolved_startport
126
+ end
127
+
128
+ def get_projectid
129
+ resolved_projectid = get_resolved(@props['projectid'],workitem)
130
+ if resolved_projectid.nil? || !validate_param(resolved_projectid,"uuid")
131
+ raise "Malformed optional parameter projectid for resource #{@name}"
132
+ end
133
+ resolved_projectid
134
+ end
135
+
136
+ def get_usersecuritygrouplist
137
+ resolved_usersecuritygrouplist = get_resolved(@props['usersecuritygrouplist'],workitem)
138
+ if resolved_usersecuritygrouplist.nil? || !validate_param(resolved_usersecuritygrouplist,"map")
139
+ raise "Malformed optional parameter usersecuritygrouplist for resource #{@name}"
140
+ end
141
+ resolved_usersecuritygrouplist
142
+ end
143
+
144
+ def get_cidrlist
145
+ resolved_cidrlist = get_resolved(@props['cidrlist'],workitem)
146
+ if resolved_cidrlist.nil? || !validate_param(resolved_cidrlist,"list")
147
+ raise "Malformed optional parameter cidrlist for resource #{@name}"
148
+ end
149
+ resolved_cidrlist
150
+ end
151
+
152
+ def get_securitygroupname
153
+ resolved_securitygroupname = get_resolved(@props['securitygroupname'],workitem)
154
+ if resolved_securitygroupname.nil? || !validate_param(resolved_securitygroupname,"string")
155
+ raise "Malformed optional parameter securitygroupname for resource #{@name}"
156
+ end
157
+ resolved_securitygroupname
158
+ end
159
+
160
+ def get_icmptype
161
+ resolved_icmptype = get_resolved(@props['icmptype'],workitem)
162
+ if resolved_icmptype.nil? || !validate_param(resolved_icmptype,"integer")
163
+ raise "Malformed optional parameter icmptype for resource #{@name}"
164
+ end
165
+ resolved_icmptype
166
+ end
167
+
168
+ def get_account
169
+ resolved_account = get_resolved(@props['account'],workitem)
170
+ if resolved_account.nil? || !validate_param(resolved_account,"string")
171
+ raise "Malformed optional parameter account for resource #{@name}"
172
+ end
173
+ resolved_account
174
+ end
175
+
176
+ def get_domainid
177
+ resolved_domainid = get_resolved(@props['domainid'],workitem)
178
+ if resolved_domainid.nil? || !validate_param(resolved_domainid,"uuid")
179
+ raise "Malformed optional parameter domainid for resource #{@name}"
180
+ end
181
+ resolved_domainid
182
+ end
183
+ end
184
+ end
185
+