zaws 0.0.5 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.travis.yml +9 -18
  4. data/Gemfile +0 -0
  5. data/Gemfile.lock +26 -35
  6. data/Gemfile.lock.linux +69 -0
  7. data/Gemfile.lock.mac +81 -0
  8. data/Gemfile.lock.windows +77 -0
  9. data/LICENSE +0 -0
  10. data/README.md +11 -0
  11. data/Rakefile +1 -7
  12. data/archive/cloud_trail/cloud_trail.feature +124 -0
  13. data/bin/win_zaws.bat +2 -0
  14. data/lib/zaws.rb +54 -41
  15. data/lib/zaws/command/ai.rb +34 -0
  16. data/lib/zaws/command/bucket.rb +35 -0
  17. data/lib/zaws/command/cloud_trail.rb +43 -0
  18. data/lib/zaws/command/compute.rb +152 -87
  19. data/lib/zaws/command/config.rb +42 -0
  20. data/lib/zaws/command/elasticip.rb +19 -9
  21. data/lib/zaws/command/hosted_zone.rb +31 -18
  22. data/lib/zaws/command/iam.rb +37 -0
  23. data/lib/zaws/command/load_balancer.rb +54 -51
  24. data/lib/zaws/command/nessus.rb +41 -0
  25. data/lib/zaws/command/newrelic.rb +30 -0
  26. data/lib/zaws/command/route_table.rb +135 -122
  27. data/lib/zaws/command/security_group.rb +95 -82
  28. data/lib/zaws/command/subnet.rb +58 -46
  29. data/lib/zaws/command/sumo.rb +34 -0
  30. data/lib/zaws/command/vpc.rb +53 -0
  31. data/lib/zaws/external/awscli/awscli.rb +65 -0
  32. data/lib/zaws/external/awscli/commands.rb +10 -0
  33. data/lib/zaws/external/awscli/commands/aws.rb +40 -0
  34. data/lib/zaws/external/awscli/commands/ec2.rb +74 -0
  35. data/lib/zaws/external/awscli/commands/ec2/allocate_address.rb +42 -0
  36. data/lib/zaws/external/awscli/commands/ec2/assign_private_ip_addresses.rb +49 -0
  37. data/lib/zaws/external/awscli/commands/ec2/associate_address.rb +48 -0
  38. data/lib/zaws/external/awscli/commands/ec2/associate_route_table.rb +48 -0
  39. data/lib/zaws/external/awscli/commands/ec2/authorize_security_group_ingress.rb +70 -0
  40. data/lib/zaws/external/awscli/commands/ec2/create_route.rb +60 -0
  41. data/lib/zaws/external/awscli/commands/ec2/create_route_table.rb +40 -0
  42. data/lib/zaws/external/awscli/commands/ec2/create_security_group.rb +58 -0
  43. data/lib/zaws/external/awscli/commands/ec2/create_subnet.rb +62 -0
  44. data/lib/zaws/external/awscli/commands/ec2/create_tags.rb +53 -0
  45. data/lib/zaws/external/awscli/commands/ec2/create_vpc.rb +21 -0
  46. data/lib/zaws/external/awscli/commands/ec2/delete_route.rb +54 -0
  47. data/lib/zaws/external/awscli/commands/ec2/delete_route_table.rb +46 -0
  48. data/lib/zaws/external/awscli/commands/ec2/delete_security_group.rb +46 -0
  49. data/lib/zaws/external/awscli/commands/ec2/delete_subnet.rb +46 -0
  50. data/lib/zaws/external/awscli/commands/ec2/describe_addresses.rb +41 -0
  51. data/lib/zaws/external/awscli/commands/ec2/describe_images.rb +58 -0
  52. data/lib/zaws/external/awscli/commands/ec2/describe_instances.rb +56 -0
  53. data/lib/zaws/external/awscli/commands/ec2/describe_route_tables.rb +44 -0
  54. data/lib/zaws/external/awscli/commands/ec2/describe_security_groups.rb +50 -0
  55. data/lib/zaws/external/awscli/commands/ec2/describe_subnets.rb +48 -0
  56. data/lib/zaws/external/awscli/commands/ec2/describe_vpc_peering_connections.rb +23 -0
  57. data/lib/zaws/external/awscli/commands/ec2/describe_vpcs.rb +26 -0
  58. data/lib/zaws/external/awscli/commands/ec2/disable_vgw_route_propagation.rb +48 -0
  59. data/lib/zaws/external/awscli/commands/ec2/disassociate-address.rb +42 -0
  60. data/lib/zaws/external/awscli/commands/ec2/disassociate_route_table.rb +41 -0
  61. data/lib/zaws/external/awscli/commands/ec2/enable_vgw_route_propagation.rb +48 -0
  62. data/lib/zaws/external/awscli/commands/ec2/filter.rb +115 -0
  63. data/lib/zaws/external/awscli/commands/ec2/modify_instance_attribute.rb +62 -0
  64. data/lib/zaws/external/awscli/commands/ec2/network_interfaces.rb +63 -0
  65. data/lib/zaws/external/awscli/commands/ec2/release_address.rb +42 -0
  66. data/lib/zaws/external/awscli/commands/ec2/revoke_security_group_ingress.rb +70 -0
  67. data/lib/zaws/external/awscli/commands/ec2/run_instances.rb +21 -0
  68. data/lib/zaws/external/awscli/commands/ec2/stop_instances.rb +21 -0
  69. data/lib/zaws/external/awscli/commands/ec2/terminate_instances.rb +40 -0
  70. data/lib/zaws/external/awscli/commands/ec2/unassign_private_ip_addresses.rb +49 -0
  71. data/lib/zaws/external/awscli/commands/elb.rb +19 -0
  72. data/lib/zaws/external/awscli/commands/elb/create_load_balancer.rb +64 -0
  73. data/lib/zaws/external/awscli/commands/elb/create_load_balancer_listeners.rb +47 -0
  74. data/lib/zaws/external/awscli/commands/elb/delete_load_balancer.rb +40 -0
  75. data/lib/zaws/external/awscli/commands/elb/delete_load_balancer_listeners.rb +49 -0
  76. data/lib/zaws/external/awscli/commands/elb/deregister_instances_with_load_balancer.rb +49 -0
  77. data/lib/zaws/external/awscli/commands/elb/describe_load_balancers.rb +30 -0
  78. data/lib/zaws/external/awscli/commands/elb/register_instances_with_load_balancer.rb +49 -0
  79. data/lib/zaws/external/awscli/commands/iam.rb +31 -0
  80. data/lib/zaws/external/awscli/commands/iam/GetPolicy.rb +21 -0
  81. data/lib/zaws/external/awscli/commands/iam/GetPolicyVersion.rb +21 -0
  82. data/lib/zaws/external/awscli/commands/iam/GetRolePolicy.rb +21 -0
  83. data/lib/zaws/external/awscli/commands/route53.rb +19 -0
  84. data/lib/zaws/external/awscli/commands/route53/list_hosted_zones.rb +30 -0
  85. data/lib/zaws/external/awscli/commands/route53/list_resource_record_sets.rb +41 -0
  86. data/lib/zaws/external/awscli/commands/s3/ls.rb +34 -0
  87. data/lib/zaws/external/awscli/commands/s3/mb.rb +41 -0
  88. data/lib/zaws/external/awscli/commands/s3/sync.rb +48 -0
  89. data/lib/zaws/external/awscli/credentials.rb +22 -0
  90. data/lib/zaws/external/awscli/data.rb +10 -0
  91. data/lib/zaws/external/awscli/data/ec2.rb +33 -0
  92. data/lib/zaws/external/awscli/data/ec2/instance.rb +162 -0
  93. data/lib/zaws/external/awscli/data/ec2/security_group.rb +51 -0
  94. data/lib/zaws/external/awscli/data/ec2/subnet.rb +59 -0
  95. data/lib/zaws/external/awscli/data/ec2/vpc.rb +85 -0
  96. data/lib/zaws/external/awscli/data/iam.rb +34 -0
  97. data/lib/zaws/external/awscli/data/iam/policy.rb +42 -0
  98. data/lib/zaws/external/awscli/data/iam/policy_document.rb +52 -0
  99. data/lib/zaws/external/awscli/data/iam/policy_version.rb +42 -0
  100. data/lib/zaws/external/awscli/data/iam/role_policy.rb +52 -0
  101. data/lib/zaws/external/awscli/generators/result/ec2/addresses.rb +70 -0
  102. data/lib/zaws/external/awscli/generators/result/ec2/allocation_id.rb +39 -0
  103. data/lib/zaws/external/awscli/generators/result/ec2/association_id.rb +29 -0
  104. data/lib/zaws/external/awscli/generators/result/ec2/images.rb +46 -0
  105. data/lib/zaws/external/awscli/generators/result/ec2/instances.rb +57 -0
  106. data/lib/zaws/external/awscli/generators/result/ec2/ip_permissions.rb +70 -0
  107. data/lib/zaws/external/awscli/generators/result/ec2/network_interfaces.rb +53 -0
  108. data/lib/zaws/external/awscli/generators/result/ec2/private_ip_addresses.rb +41 -0
  109. data/lib/zaws/external/awscli/generators/result/ec2/route_tables.rb +80 -0
  110. data/lib/zaws/external/awscli/generators/result/ec2/routes.rb +58 -0
  111. data/lib/zaws/external/awscli/generators/result/ec2/security_groups.rb +73 -0
  112. data/lib/zaws/external/awscli/generators/result/ec2/subnets.rb +88 -0
  113. data/lib/zaws/external/awscli/generators/result/ec2/tags.rb +34 -0
  114. data/lib/zaws/external/awscli/generators/result/ec2/virtual_gateway.rb +32 -0
  115. data/lib/zaws/external/awscli/generators/result/elb/listeners.rb +65 -0
  116. data/lib/zaws/external/awscli/generators/result/elb/load_balancers.rb +61 -0
  117. data/lib/zaws/external/awscli/generators/result/route53/hosted_zones.rb +52 -0
  118. data/lib/zaws/external/awscli/regions.rb +13 -0
  119. data/lib/zaws/external/nessusapi/data/agents.rb +36 -0
  120. data/lib/zaws/external/nessusapi/data/scanners.rb +35 -0
  121. data/lib/zaws/external/nessusapi/nessusapi.rb +57 -0
  122. data/lib/zaws/external/nessusapi/reources.rb +10 -0
  123. data/lib/zaws/external/nessusapi/resources/agents.rb +18 -0
  124. data/lib/zaws/external/nessusapi/resources/agents/list.rb +20 -0
  125. data/lib/zaws/external/nessusapi/resources/scanners.rb +18 -0
  126. data/lib/zaws/external/nessusapi/resources/scanners/list.rb +20 -0
  127. data/lib/zaws/external/newrelicapi/data/servers.rb +36 -0
  128. data/lib/zaws/external/newrelicapi/newrelic_client.rb +64 -0
  129. data/lib/zaws/external/newrelicapi/newrelic_creds.rb +60 -0
  130. data/lib/zaws/external/newrelicapi/newrelicapi.rb +46 -0
  131. data/lib/zaws/external/newrelicapi/resources/servers.rb +18 -0
  132. data/lib/zaws/external/newrelicapi/resources/servers/list.rb +20 -0
  133. data/lib/zaws/external/sumoapi/data/collectors.rb +35 -0
  134. data/lib/zaws/external/sumoapi/data/sources.rb +35 -0
  135. data/lib/zaws/external/sumoapi/resources/collectors.rb +18 -0
  136. data/lib/zaws/external/sumoapi/resources/collectors/list.rb +20 -0
  137. data/lib/zaws/external/sumoapi/resources/sources.rb +18 -0
  138. data/lib/zaws/external/sumoapi/resources/sources/list.rb +20 -0
  139. data/lib/zaws/external/sumoapi/sumo_client.rb +63 -0
  140. data/lib/zaws/external/sumoapi/sumo_creds.rb +67 -0
  141. data/lib/zaws/external/sumoapi/sumoapi.rb +56 -0
  142. data/lib/zaws/helper/data_lattice.rb +22 -0
  143. data/lib/zaws/helper/filestore.rb +48 -0
  144. data/lib/zaws/helper/filter.rb +15 -0
  145. data/lib/zaws/helper/inifile.rb +632 -0
  146. data/lib/zaws/helper/nessus_client.rb +143 -0
  147. data/lib/zaws/helper/nessus_creds.rb +67 -0
  148. data/lib/zaws/helper/option.rb +14 -15
  149. data/lib/zaws/helper/output.rb +81 -29
  150. data/lib/zaws/helper/process_hash.rb +47 -0
  151. data/lib/zaws/helper/shell.rb +0 -0
  152. data/lib/zaws/helper/verbose.rb +15 -0
  153. data/lib/zaws/helper/zfile.rb +8 -8
  154. data/lib/zaws/services/ai.rb +35 -0
  155. data/lib/zaws/services/ai/query.rb +135 -0
  156. data/lib/zaws/services/aws.rb +41 -0
  157. data/lib/zaws/services/chef.rb +0 -0
  158. data/lib/zaws/services/cloud_trail.rb +76 -0
  159. data/lib/zaws/services/config.rb +31 -0
  160. data/lib/zaws/services/ec2.rb +47 -0
  161. data/lib/zaws/services/ec2/compute.rb +352 -0
  162. data/lib/zaws/services/ec2/elasticip.rb +82 -0
  163. data/lib/zaws/services/ec2/route_table.rb +210 -0
  164. data/lib/zaws/services/ec2/security_group.rb +186 -0
  165. data/lib/zaws/services/ec2/subnet.rb +111 -0
  166. data/lib/zaws/services/ec2/vpc.rb +69 -0
  167. data/lib/zaws/{elb.rb → services/elb.rb} +3 -2
  168. data/lib/zaws/services/elb/load_balancer.rb +160 -0
  169. data/lib/zaws/services/iam.rb +25 -0
  170. data/lib/zaws/services/iam/policy.rb +25 -0
  171. data/lib/zaws/services/iam/role.rb +23 -0
  172. data/lib/zaws/services/nessus.rb +24 -0
  173. data/lib/zaws/services/nessus/agents.rb +19 -0
  174. data/lib/zaws/services/nessus/scanners.rb +19 -0
  175. data/lib/zaws/services/newrelic.rb +21 -0
  176. data/lib/zaws/services/newrelic/servers.rb +19 -0
  177. data/lib/zaws/{route53.rb → services/route53.rb} +1 -1
  178. data/lib/zaws/services/route53/hosted_zone.rb +36 -0
  179. data/lib/zaws/services/s3.rb +15 -0
  180. data/lib/zaws/services/s3/bucket.rb +42 -0
  181. data/lib/zaws/services/sumo.rb +21 -0
  182. data/lib/zaws/services/sumo/collectors.rb +19 -0
  183. data/lib/zaws/services/vmware.rb +0 -0
  184. data/lib/zaws/version.rb +1 -1
  185. data/shove_all.sh +6 -0
  186. data/shove_all_mac.sh +6 -0
  187. data/shove_all_windows.sh +6 -0
  188. data/spec/spec_helper.rb +0 -0
  189. data/spec/zaws/command/ec2/compute/assoc_security_group_spec.rb +135 -0
  190. data/spec/zaws/command/ec2/compute/compute_spec.rb +321 -0
  191. data/spec/zaws/command/ec2/compute/images_spec.rb +69 -0
  192. data/spec/zaws/command/ec2/compute/management_spec.rb +364 -0
  193. data/spec/zaws/command/ec2/compute/network_spec.rb +93 -0
  194. data/spec/zaws/command/ec2/compute/node_spec.rb +70 -0
  195. data/spec/zaws/command/ec2/compute/secondary_ip_spec.rb +212 -0
  196. data/spec/zaws/command/ec2/compute/storage_spec.rb +63 -0
  197. data/spec/zaws/command/ec2/elasticip_spec.rb +271 -0
  198. data/spec/zaws/command/ec2/route_table_spec.rb +844 -0
  199. data/spec/zaws/command/ec2/security_group_spec.rb +710 -0
  200. data/spec/zaws/command/ec2/subnet_spec.rb +273 -0
  201. data/spec/zaws/command/ec2/vpc_spec.rb +180 -0
  202. data/spec/zaws/command/elb/load_balancer_spec.rb +633 -0
  203. data/spec/zaws/command/iam/policy_spec.rb +101 -0
  204. data/spec/zaws/command/iam/role_policy_spec.rb +35 -0
  205. data/spec/zaws/command/route53/hosted_zone_spec.rb +100 -0
  206. data/spec/zaws/command/s3/bucket_spec.rb +70 -0
  207. data/spec/zaws/external/awscli/data/ec2/instance_spec.rb +90 -0
  208. data/spec/zaws/external/awscli/data/iam/policy_document_spec.rb +56 -0
  209. data/spec/zaws/external/awscli/data/iam/role_policy_spec.rb +54 -0
  210. data/spec/zaws/external/awscli/get_aws_version_spec.rb +18 -0
  211. data/spec/zaws/helper/option_spec.rb +54 -0
  212. data/spec/zaws/helper/output_spec.rb +144 -0
  213. data/spec/zaws/helper/process_hash_spec.rb +48 -0
  214. data/spec/zaws/helper/shell_spec.rb +56 -0
  215. data/spec/zaws/nessus/scanners.json +0 -0
  216. data/spec/zaws/version_spec.rb +18 -0
  217. data/zaws.gemspec +1 -3
  218. metadata +260 -189
  219. data/feature/compute/assoc_security_group.feature +0 -55
  220. data/feature/compute/compute.feature +0 -138
  221. data/feature/compute/secondary_ip.feature +0 -107
  222. data/feature/compute/view.feature +0 -23
  223. data/feature/compute/view_images.feature +0 -24
  224. data/feature/elasticip/elasticip.feature +0 -138
  225. data/feature/elasticip/view.feature +0 -18
  226. data/feature/hosted_zone/view.feature +0 -17
  227. data/feature/hosted_zone/view_record.feature +0 -29
  228. data/feature/load_balancer/instance_registration.feature +0 -120
  229. data/feature/load_balancer/listener.feature +0 -86
  230. data/feature/load_balancer/load_balancer.feature +0 -101
  231. data/feature/load_balancer/view.feature +0 -18
  232. data/feature/route_table/assoc_subnet.feature +0 -128
  233. data/feature/route_table/route_propagation.feature +0 -93
  234. data/feature/route_table/route_table.feature +0 -91
  235. data/feature/route_table/route_to_gateway.feature +0 -69
  236. data/feature/route_table/route_to_instance.feature +0 -115
  237. data/feature/route_table/view.feature +0 -25
  238. data/feature/security_group/ingress_cidr.feature +0 -144
  239. data/feature/security_group/ingress_group.feature +0 -184
  240. data/feature/security_group/security_group.feature +0 -107
  241. data/feature/security_group/view.feature +0 -23
  242. data/feature/subnet/subnet.feature +0 -94
  243. data/feature/subnet/view.feature +0 -24
  244. data/feature/support/env.rb +0 -14
  245. data/feature/version.feature +0 -6
  246. data/lib/zaws/aws.rb +0 -26
  247. data/lib/zaws/ec2.rb +0 -40
  248. data/lib/zaws/ec2/compute.rb +0 -247
  249. data/lib/zaws/ec2/elasticip.rb +0 -79
  250. data/lib/zaws/ec2/route_table.rb +0 -207
  251. data/lib/zaws/ec2/security_group.rb +0 -154
  252. data/lib/zaws/ec2/subnet.rb +0 -109
  253. data/lib/zaws/elb/load_balancer.rb +0 -157
  254. data/lib/zaws/route53/hosted_zone.rb +0 -36
  255. data/spec/zaws/ec2/compute/add_volume_spec.rb +0 -39
  256. data/spec/zaws/ec2/compute/block_device_mapping_spec.rb +0 -31
  257. data/spec/zaws/ec2/compute/instance_id_by_external_id_spec.rb +0 -23
  258. data/spec/zaws/ec2/compute/instance_ping_spec.rb +0 -34
  259. data/spec/zaws/ec2/compute/instance_running_spec.rb +0 -47
  260. data/spec/zaws/ec2/compute/network_interface_json_spec.rb +0 -57
  261. data/spec/zaws/ec2/compute/nosdcheck_spec.rb +0 -17
  262. data/spec/zaws/ec2/compute/tag_instance_spec.rb +0 -21
  263. data/spec/zaws/ec2/security_group/id_by_name_spec.rb +0 -32
  264. data/spec/zaws/ec2/subnet/available_spec.rb +0 -22
  265. data/spec/zaws/ec2/subnet/declare_spec.rb +0 -31
  266. data/spec/zaws/ec2/subnet/exists_spec.rb +0 -33
  267. data/spec/zaws/ec2/subnet/id_array_by_cidrblock_array_spec.rb +0 -48
  268. data/spec/zaws/ec2/subnet/id_by_cidrblock_spec.rb +0 -35
  269. data/spec/zaws/ec2/subnet/id_by_ip_spec.rb +0 -42
  270. data/spec/zaws/ec2/subnet/view_spec.rb +0 -34
  271. data/spec/zaws/elb/load_balancer/calculated_listener_spec.rb +0 -18
  272. data/spec/zaws/helper/option/absent_spec.rb +0 -14
  273. data/spec/zaws/helper/option/exclusive_spec.rb +0 -14
  274. data/spec/zaws/helper/option/exists_spec.rb +0 -18
  275. data/spec/zaws/helper/option/minimum_spec.rb +0 -14
  276. data/spec/zaws/helper/output/binary_nagios_check_spec.rb +0 -19
  277. data/spec/zaws/helper/output/colorize_spec.rb +0 -30
  278. data/spec/zaws/helper/output/opt_exclusive_spec.rb +0 -14
  279. data/spec/zaws/helper/output/opt_minimum_spec.rb +0 -15
  280. data/spec/zaws/helper/output/opt_required_spec.rb +0 -12
  281. data/spec/zaws/helper/shell/cli_spec.rb +0 -33
  282. data/spec/zaws/helper/shell/if_then_spec.rb +0 -24
@@ -2,91 +2,104 @@ require 'thor'
2
2
 
3
3
  module ZAWS
4
4
  module Command
5
- class Security_Group < Thor
6
- class_option :region, :type => :string, :desc => "AWS Region", :banner => "<region>", :aliases => :r, :required => true
7
- class_option :verbose, :type => :boolean, :desc => "Verbose outout", :aliases => :d, :default => false
8
-
9
- desc "view","View security groups."
10
- option :viewtype, :type => :string, :desc => "View type, json or table", :banner => "<viewtype>", :aliases => :w, :default => "table"
11
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
12
- def view
13
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
14
- aws.ec2.security_group.view(options[:region],options[:viewtype],$stdout,(options[:verbose]?$stdout:nil),options[:vpcid])
15
- end
16
-
17
- desc "exists_by_name GROUP_NAME","Determine if a security group exists by name GROUP_NAME."
18
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
19
- def exists_by_name(group_name)
20
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
21
- aws.ec2.security_group.exists(options[:region],$stdout,(options[:verbose]?$stdout:nil),options[:vpcid],group_name)
22
- end
23
-
24
- desc "declare GROUP_NAME DESCRIPTION","Declare a new security group GROUP_NAME, but skip creating it if it exists."
25
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
26
- option :nagios, :type => :boolean, :desc => "Returns a nagios check result", :aliases => :n, :default => false
27
- option :undofile, :type => :string, :desc => "File for undo commands", :banner => "<undofile>", :aliases => :f, :default => nil
28
- def declare(group_name,description)
29
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
30
- exitcode = aws.ec2.security_group.declare(options[:region],options[:vpcid],group_name,description,options[:nagios],$stdout,(options[:verbose]?$stdout:nil),options[:undofile])
5
+ class Security_Group < Thor
6
+ class_option :region, :type => :string, :desc => "AWS Region", :banner => "<region>", :aliases => :r, :required => true
7
+ class_option :verbose, :type => :boolean, :desc => "Verbose outout", :aliases => :d, :default => false
8
+
9
+ attr_accessor :aws
10
+ attr_accessor :out
11
+ attr_accessor :print_exit_code
12
+
13
+ def initialize(*args)
14
+ super
15
+ shellout=ZAWS::Helper::Shell.new
16
+ awscli = ZAWS::AWSCLI.new(shellout)
17
+ @aws = ZAWS::AWS.new(shellout, awscli)
18
+ @out = $stdout
19
+ @print_exit_code = false
20
+ end
21
+
22
+ desc "view", "View security groups."
23
+ option :viewtype, :type => :string, :desc => "View type, json or table", :banner => "<viewtype>", :aliases => :w, :default => "table"
24
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
25
+ option :unused, :desc => "Get all security groups unused by instances", :type => :boolean, :aliases => :u, :default => false
26
+
27
+ def view
28
+ @out.puts(@aws.ec2.security_group.view(options[:region], (options[:unused] ? 'json' : options[:viewtype]), (options[:verbose] ? @out : nil), options[:vpcid], nil, nil, nil, nil, nil, nil, options[:unused]))
29
+ end
30
+
31
+ desc "exists_by_name GROUP_NAME", "Determine if a security group exists by name GROUP_NAME."
32
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
33
+ def exists_by_name(group_name)
34
+ val,sgroupid=@aws.ec2.security_group.exists(options[:region], (options[:verbose] ? @out : nil), options[:vpcid], group_name)
35
+ @out.puts(val.to_s)
36
+ end
37
+
38
+ desc "declare GROUP_NAME DESCRIPTION", "Declare a new security group GROUP_NAME, but skip creating it if it exists."
39
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
40
+ option :check, :type => :boolean, :desc => "Returns a check result", :aliases => :n, :default => false
41
+ option :undofile, :type => :string, :desc => "File for undo commands", :banner => "<undofile>", :aliases => :f, :default => nil
42
+
43
+ def declare(group_name, description)
44
+ exitcode = @aws.ec2.security_group.declare(options[:region], options[:vpcid], group_name, description, options[:check], @out, (options[:verbose] ? @out : nil), options[:undofile])
31
45
  exit exitcode
32
- end
33
-
34
- desc "delete GROUP_NAME","Delete a new security group GROUP_NAME, but skip it if it does not exist."
35
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
36
- def delete(group_name)
37
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
38
- aws.ec2.security_group.delete(options[:region],$stdout,(options[:verbose]?$stdout:nil),options[:vpcid],group_name)
39
- end
40
-
41
- desc "ingress_group_exists TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT","Determine if an ingress security group rule exists."
42
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
43
- def ingress_group_exists(target,source,protocol,port)
44
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
45
- aws.ec2.security_group.ingress_group_exists(options[:region],options[:vpcid],target,source,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
46
- end
47
-
48
- desc "ingress_cidr_exists TARGET_GROUP_NAME CIDR PROTOCOL PORT","Determine if an ingress CIDR rule exists."
49
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
50
- def ingress_cidr_exists(target,cidr,protocol,port)
51
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
52
- aws.ec2.security_group.ingress_cidr_exists(options[:region],options[:vpcid],target,cidr,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
53
- end
54
-
55
- desc "declare_ingress_group TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT","Declare an ingress security group rule."
56
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
57
- option :nagios, :type => :boolean, :desc => "Returns a nagios check result", :aliases => :n, :default => false
46
+ end
47
+
48
+ desc "delete GROUP_NAME", "Delete a new security group GROUP_NAME, but skip it if it does not exist."
49
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
50
+ def delete(group_name)
51
+ @out.puts(@aws.ec2.security_group.delete(options[:region],(options[:verbose] ? @out : nil), options[:vpcid], group_name))
52
+ end
53
+
54
+ desc "ingress_group_exists TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT", "Determine if an ingress security group rule exists."
55
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
56
+
57
+ def ingress_group_exists(target, source, protocol, port)
58
+ @aws.ec2.security_group.ingress_group_exists(options[:region], options[:vpcid], target, source, protocol, port, @out, (options[:verbose] ? @out : nil))
59
+ end
60
+
61
+ desc "ingress_cidr_exists TARGET_GROUP_NAME CIDR PROTOCOL PORT", "Determine if an ingress CIDR rule exists."
62
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
63
+
64
+ def ingress_cidr_exists(target, cidr, protocol, port)
65
+ @aws.ec2.security_group.ingress_cidr_exists(options[:region], options[:vpcid], target, cidr, protocol, port, @out, (options[:verbose] ? @out : nil))
66
+ end
67
+
68
+ desc "declare_ingress_group TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT", "Declare an ingress security group rule."
69
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
70
+ option :check, :type => :boolean, :desc => "Returns a check result", :aliases => :n, :default => false
58
71
  option :undofile, :type => :string, :desc => "File for undo commands", :banner => "<undofile>", :aliases => :f, :default => nil
59
- def declare_ingress_group(target,source,protocol,port)
60
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
61
- exitcode = aws.ec2.security_group.declare_ingress_group(options[:region],options[:vpcid],target,source,protocol,port,options[:nagios],$stdout,(options[:verbose]?$stdout:nil),options[:undofile])
62
- exit exitcode
63
- end
64
-
65
- desc "declare_ingress_cidr TARGET_GROUP_NAME CIDR PROTOCOL PORT","Declare an ingress CIDR rule."
66
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
67
- option :nagios, :type => :boolean, :desc => "Returns a nagios check result", :aliases => :n, :default => false
72
+
73
+ def declare_ingress_group(target, source, protocol, port)
74
+ exitcode = @aws.ec2.security_group.declare_ingress_group(options[:region], options[:vpcid], target, source, protocol, port, options[:check], @out, (options[:verbose] ? @out : nil), options[:undofile])
75
+ exit exitcode
76
+ end
77
+
78
+ desc "declare_ingress_cidr TARGET_GROUP_NAME CIDR PROTOCOL PORT", "Declare an ingress CIDR rule."
79
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
80
+ option :check, :type => :boolean, :desc => "Returns a check result", :aliases => :n, :default => false
68
81
  option :undofile, :type => :string, :desc => "File for undo commands", :banner => "<undofile>", :aliases => :f, :default => nil
69
- def declare_ingress_cidr(target,cidr,protocol,port)
70
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
71
- exitcode = aws.ec2.security_group.declare_ingress_cidr(options[:region],options[:vpcid],target,cidr,protocol,port,options[:nagios],$stdout,(options[:verbose]?$stdout:nil),options[:undofile])
72
- exit exitcode
73
- end
74
-
75
- desc "delete_ingress_group TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT","Delete an ingress security group rule."
76
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
77
- def delete_ingress_group(target,source,protocol,port)
78
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
79
- aws.ec2.security_group.delete_ingress_group(options[:region],options[:vpcid],target,source,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
80
- end
81
-
82
- desc "delete_ingress_cidr TARGET_GROUP_NAME CIDR PROTOCOL PORT","Delete an ingress security cidr rule."
83
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
84
- def delete_ingress_cidr(target,cidr,protocol,port)
85
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
86
- aws.ec2.security_group.delete_ingress_cidr(options[:region],options[:vpcid],target,cidr,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
87
- end
88
-
89
- end
82
+
83
+ def declare_ingress_cidr(target, cidr, protocol, port)
84
+ exitcode = @aws.ec2.security_group.declare_ingress_cidr(options[:region], options[:vpcid], target, cidr, protocol, port, options[:check], @out, (options[:verbose] ? @out : nil), options[:undofile])
85
+ exit exitcode
86
+ end
87
+
88
+ desc "delete_ingress_group TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT", "Delete an ingress security group rule."
89
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
90
+
91
+ def delete_ingress_group(target, source, protocol, port)
92
+ @aws.ec2.security_group.delete_ingress_group(options[:region], options[:vpcid], target, source, protocol, port, @out, (options[:verbose] ? @out : nil))
93
+ end
94
+
95
+ desc "delete_ingress_cidr TARGET_GROUP_NAME CIDR PROTOCOL PORT", "Delete an ingress security cidr rule."
96
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
97
+
98
+ def delete_ingress_cidr(target, cidr, protocol, port)
99
+ @aws.ec2.security_group.delete_ingress_cidr(options[:region], options[:vpcid], target, cidr, protocol, port, @out, (options[:verbose] ? @out : nil))
100
+ end
101
+
102
+ end
90
103
  end
91
104
  end
92
105
 
@@ -2,52 +2,64 @@ require 'thor'
2
2
 
3
3
  module ZAWS
4
4
  module Command
5
- class Subnet < Thor
6
- class_option :region, :type => :string, :desc => "AWS Region", :banner => "<region>", :aliases => :r, :required => true
7
- class_option :verbose, :type => :boolean, :desc => "Verbose outout", :aliases => :d, :default => false
8
-
9
- desc "view","View subnets."
10
- option :viewtype, :type => :string, :desc => "View type, json or table", :banner => "<viewtype>", :aliases => :w, :default => "table"
11
- option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
12
- def view
13
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
14
- aws.ec2.subnet.view(options[:region],options[:viewtype],$stdout,(options[:verbose]?$stdout:nil),options[:vpcid])
15
- end
16
-
17
- desc "id_by_ip PRIVATE_IP VPCID","get subnet id by specifying PRIVATE_IP address in subnet"
18
- def id_by_ip(privateip,vpcid)
19
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
20
- aws.ec2.subnet.id_by_ip(options[:region],$stdout,(options[:verbose]?$stdout:nil),vpcid,privateip)
21
- end
22
-
23
- desc "id_by_cidrblock CIDRBLOCK VPCID","get subnet id by specifying CIDRBLOCK for subnet"
24
- def id_by_cidrblock(cidrblock,vpcid)
25
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
26
- aws.ec2.subnet.id_by_cidrblock(options[:region],$stdout,(options[:verbose]?$stdout:nil),vpcid,cidrblock)
27
- end
28
-
29
- desc "exists CIDRBLOCK VPCID","Determine if a subnet exists by CIDRBLOCK."
30
- def exists(cidrblock,vpcid)
31
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
32
- aws.ec2.subnet.exists(options[:region],$stdout,(options[:verbose]?$stdout:nil),vpcid,cidrblock)
33
- end
34
-
35
- desc "declare CIDRBLOCK AVAILABILITY_ZONE VPCID","Create a subnet if it does not exist already"
36
- option :availabilitytimeout, :type => :numeric, :desc => "AWS availability zone (eg us-west-1,us-west-2,...)", :banner => "<azone>", :aliases => :t, :default => 30
37
- option :nagios, :type => :boolean, :desc => "Returns a nagios check result", :aliases => :n, :default => false
5
+ class Subnet < Thor
6
+ class_option :region, :type => :string, :desc => "AWS Region", :banner => "<region>", :aliases => :r, :required => true
7
+ class_option :verbose, :type => :boolean, :desc => "Verbose outout", :aliases => :d, :default => false
8
+
9
+ attr_accessor :aws
10
+ attr_accessor :out
11
+ attr_accessor :print_exit_code
12
+
13
+ def initialize(*args)
14
+ super
15
+ shellout=ZAWS::Helper::Shell.new
16
+ awscli = ZAWS::AWSCLI.new(shellout,false)
17
+ @aws = ZAWS::AWS.new(shellout, awscli)
18
+ @out = $stdout
19
+ @print_exit_code = false
20
+ end
21
+
22
+ desc "view", "View subnets."
23
+ option :viewtype, :type => :string, :desc => "View type, json or table", :banner => "<viewtype>", :aliases => :w, :default => "table"
24
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
25
+ def view
26
+ @out.puts(@aws.ec2.subnet.view(options[:region], options[:viewtype], (options[:verbose] ? @out : nil), options[:vpcid]))
27
+ end
28
+
29
+ desc "id_by_ip PRIVATE_IP VPCID", "get subnet id by specifying PRIVATE_IP address in subnet"
30
+
31
+ def id_by_ip(privateip, vpcid)
32
+ @aws.ec2.subnet.id_by_ip(options[:region], @out, (options[:verbose] ? @out : nil), vpcid, privateip)
33
+ end
34
+
35
+ desc "id_by_cidrblock CIDRBLOCK VPCID", "get subnet id by specifying CIDRBLOCK for subnet"
36
+
37
+ def id_by_cidrblock(cidrblock, vpcid)
38
+ @aws.ec2.subnet.id_by_cidrblock(options[:region], @out, (options[:verbose] ? @out : nil), vpcid, cidrblock)
39
+ end
40
+
41
+ desc "exists CIDRBLOCK VPCID", "Determine if a subnet exists by CIDRBLOCK."
42
+
43
+ def exists(cidrblock, vpcid)
44
+ @out.puts(@aws.ec2.subnet.exists(options[:region], (options[:verbose] ? @out : nil), vpcid, cidrblock).to_s)
45
+ end
46
+
47
+ desc "declare CIDRBLOCK AVAILABILITY_ZONE VPCID", "Create a subnet if it does not exist already"
48
+ option :availabilitytimeout, :type => :numeric, :desc => "Timeout before exiting from waiting for state to change from pending to available.", :banner => "<azone>", :aliases => :t, :default => 30
49
+ option :check, :type => :boolean, :desc => "Returns a check result", :aliases => :n, :default => false
38
50
  option :undofile, :type => :string, :desc => "File for undo commands", :banner => "<undofile>", :aliases => :f, :default => nil
39
- def declare(cidrblock,availabilityzone,vpcid)
40
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
41
- exitcode=aws.ec2.subnet.declare(options[:region],vpcid,cidrblock,availabilityzone,options[:availabilitytimeout],$stdout,(options[:verbose]?$stdout:nil),options[:nagios],options[:undofile])
42
- exit exitcode
43
- end
44
-
45
- desc "delete CIDRBLOCK VPCID","Delete a subnet if it exists."
46
- def delete(cidrblock,vpcid)
47
- aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
48
- aws.ec2.subnet.delete(options[:region],$stdout,(options[:verbose]?$stdout:nil),vpcid,cidrblock)
49
- end
50
-
51
- end
51
+ def declare(cidrblock, availabilityzone, vpcid)
52
+ exitcode=@aws.ec2.subnet.declare(options[:region], vpcid, cidrblock, availabilityzone, options[:availabilitytimeout], @out, (options[:verbose] ? @out : nil), options[:check], options[:undofile])
53
+ exit exitcode if not @print_exit_code
54
+ @out.puts(exitcode)
55
+ end
56
+
57
+ desc "delete CIDRBLOCK VPCID", "Delete a subnet if it exists."
58
+
59
+ def delete(cidrblock, vpcid)
60
+ @aws.ec2.subnet.delete(options[:region], @out, (options[:verbose] ? @out : nil), vpcid, cidrblock)
61
+ end
62
+
63
+ end
52
64
  end
53
65
  end
@@ -0,0 +1,34 @@
1
+ require 'thor'
2
+
3
+ module ZAWS
4
+ module Command
5
+ class Sumo < Thor
6
+ class_option :verbose, :type => :boolean, :desc => "Verbose outout", :aliases => :d, :default => false
7
+
8
+ attr_accessor :sumo
9
+ attr_accessor :out
10
+ attr_accessor :print_exit_code
11
+
12
+ def initialize(*args)
13
+ super
14
+ shellout=ZAWS::Helper::Shell.new
15
+ sumoapi = ZAWS::Sumoapi.new(shellout)
16
+ @sumo = ZAWS::Controllers::Sumo.new(shellout, sumoapi)
17
+ @out = $stdout
18
+ @print_exit_code = false
19
+ end
20
+
21
+ desc "view_collectors", "View Collectors."
22
+ option :home, :type => :string, :default => ENV['HOME'], :desc => 'Home directory location for credentials file'
23
+ def view_collectors
24
+ @sumo.view(options[:home], @out, (options[:verbose] ? @out : nil))
25
+ end
26
+
27
+ desc "view_sources", "View Sources."
28
+ def view_sources(collector_name)
29
+ @out.puts(@sumo.view_sources(collector_name,options[:home], options[:verbose]))
30
+ end
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,53 @@
1
+ require 'thor'
2
+
3
+ module ZAWS
4
+ module Command
5
+ class Vpc < Thor
6
+ class_option :region, :type => :string, :desc => "AWS Region", :banner => "<region>", :aliases => :r, :required => true, :default => "us-east-1"
7
+ class_option :verbose, :type => :boolean, :desc => "Verbose outout", :aliases => :d, :default => false
8
+
9
+ attr_accessor :aws
10
+ attr_accessor :out
11
+ attr_accessor :print_exit_code
12
+
13
+ def initialize(*args)
14
+ super
15
+ shellout=ZAWS::Helper::Shell.new
16
+ awscli = ZAWS::AWSCLI.new(shellout,false)
17
+ @aws = ZAWS::AWS.new(shellout, awscli)
18
+ @out = $stdout
19
+ @print_exit_code = false
20
+ end
21
+
22
+ desc "view", "View compute instances."
23
+ option :viewtype, :type => :string, :desc => "View type, json or table", :banner => "<viewtype>", :aliases => :w, :default => "table"
24
+ def view
25
+ @aws.ec2.vpc.view(options[:region], options[:viewtype], @out, (options[:verbose] ? @out : nil))
26
+ end
27
+
28
+ desc "check_management_data", "View data used to manage the vpc."
29
+ option :profile, :type => :string, :desc => "AWS profile to use.", :banner => "<profile>", :aliases => :w, :default => nil
30
+ def check_management_data
31
+ @aws.ec2.vpc.check_management_data(options[:region], @out, (options[:verbose] ? @out : nil), options[:profile])
32
+ end
33
+
34
+ desc "declare CIDR EXTERNALID", "Declare a new vpc with a name and CIDR."
35
+ option :availabilitytimeout, :type => :numeric, :desc => "Timeout before exiting from waiting for state to change from pending to available.", :banner => "<azone>", :aliases => :t, :default => 30
36
+ option :profile, :type => :string, :desc => "AWS profile to use.", :banner => "<profile>", :aliases => :w, :default => nil
37
+ def declare(cidr,externalid)
38
+ exitcode= @aws.ec2.vpc.declare(options[:region],cidr, externalid,options[:availabilitytimeout], @out, (options[:verbose] ? @out : nil), options[:profile])
39
+ exit exitcode unless @print_exit_code
40
+ @out.puts(exitcode)
41
+ end
42
+
43
+ desc "view_peering", "View peering connections between vpcs."
44
+ option :viewtype, :type => :string, :desc => "View type, json or table", :banner => "<viewtype>", :aliases => :w, :default => "table"
45
+ def view_peering
46
+ @aws.ec2.vpc.view_peering(options[:region], options[:viewtype], @out, (options[:verbose] ? @out : nil))
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+
53
+
@@ -0,0 +1,65 @@
1
+ require 'fileutils'
2
+
3
+ module ZAWS
4
+ class AWSCLI
5
+ attr_accessor :home
6
+
7
+ def initialize(shellout,keep_filestore_empty=false)
8
+ @shellout=shellout
9
+ @keep_filestore_empty=keep_filestore_empty
10
+ end
11
+
12
+ def filestore
13
+ @filestore ||= ZAWS::Repository::Filestore.new(@keep_filestore_empty)
14
+ @filestore.timeout = 1800
15
+ return @filestore if @keep_filestore_empty
16
+ @home ||= ENV['HOME']
17
+ @filestore.location="#{@home}/.awsdata"
18
+ unless File.directory?(@filestore.location)
19
+ FileUtils.mkdir_p(@filestore.location)
20
+ end
21
+ return @filestore
22
+ end
23
+
24
+ def remove_creds
25
+ if File.directory?("#{@home}/.awsdata")
26
+ FileUtils.rmtree("#{@home}/.awsdata")
27
+ end
28
+ if File.exist?("#{@home}/.aws/credentials")
29
+ File.delete("#{@home}/.aws/credentials")
30
+ end
31
+ end
32
+
33
+ def version
34
+ if ! @version
35
+ info = @shellout.cli("aws --version",nil)
36
+ #aws-cli/1.2.13 Python/2.7.5 Linux/3.10.0-123.el7.x86_64
37
+ version_match = /(?<version>aws-cli\/[1-9\.]*)/.match(info)
38
+ @version ||= version_match[:version]
39
+ end
40
+ return @version
41
+ end
42
+
43
+ def command_ec2
44
+ @_command_ec2 ||= (ZAWS::AWSCLI::Commands::EC2.new(@shellout,self))
45
+ return @_command_ec2
46
+ end
47
+
48
+ def command_iam
49
+ @_command_iam ||= (ZAWS::AWSCLI::Commands::IAM.new(@shellout,self))
50
+ return @_command_iam
51
+ end
52
+
53
+ def data_ec2
54
+ @_data_ec2 ||= (ZAWS::AWSCLI::Data::EC2.new(@shellout,self))
55
+ return @_data_ec2
56
+ end
57
+
58
+ def data_iam
59
+ @_data_iam ||= (ZAWS::AWSCLI::Data::IAM.new(@shellout,self))
60
+ return @_data_iam
61
+ end
62
+
63
+ end
64
+ end
65
+