geoengineer 0.1.3 → 0.1.4

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 (189) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +8 -6
  5. data/lib/geoengineer.rb +2 -0
  6. data/lib/geoengineer/cli/geo_cli.rb +1 -4
  7. data/lib/geoengineer/cli/terraform_commands.rb +4 -2
  8. data/lib/geoengineer/environment.rb +14 -1
  9. data/lib/geoengineer/provider.rb +38 -0
  10. data/lib/geoengineer/resource.rb +29 -15
  11. data/lib/geoengineer/resources/api_gateway/helpers.rb +107 -0
  12. data/lib/geoengineer/resources/aws_alb.rb +39 -0
  13. data/lib/geoengineer/resources/aws_alb_listener.rb +39 -0
  14. data/lib/geoengineer/resources/aws_alb_listener_rule.rb +42 -0
  15. data/lib/geoengineer/resources/aws_alb_target_group.rb +30 -0
  16. data/lib/geoengineer/resources/aws_api_gateway_account.rb +18 -0
  17. data/lib/geoengineer/resources/aws_api_gateway_api_key.rb +20 -0
  18. data/lib/geoengineer/resources/aws_api_gateway_authorizer.rb +20 -0
  19. data/lib/geoengineer/resources/aws_api_gateway_base_path_mapping.rb +20 -0
  20. data/lib/geoengineer/resources/aws_api_gateway_client_certificate.rb +24 -0
  21. data/lib/geoengineer/resources/aws_api_gateway_deployment.rb +65 -0
  22. data/lib/geoengineer/resources/aws_api_gateway_domain_name.rb +27 -0
  23. data/lib/geoengineer/resources/aws_api_gateway_integration.rb +58 -0
  24. data/lib/geoengineer/resources/aws_api_gateway_integration_response.rb +68 -0
  25. data/lib/geoengineer/resources/aws_api_gateway_method.rb +59 -0
  26. data/lib/geoengineer/resources/aws_api_gateway_method_response.rb +69 -0
  27. data/lib/geoengineer/resources/aws_api_gateway_model.rb +19 -0
  28. data/lib/geoengineer/resources/aws_api_gateway_resource.rb +47 -0
  29. data/lib/geoengineer/resources/aws_api_gateway_rest_api.rb +79 -0
  30. data/lib/geoengineer/resources/aws_api_gateway_usage_plan.rb +27 -0
  31. data/lib/geoengineer/resources/aws_cloudfront_distribution.rb +25 -0
  32. data/lib/geoengineer/resources/aws_cloudtrail.rb +2 -2
  33. data/lib/geoengineer/resources/aws_cloudwatch_event_rule.rb +12 -3
  34. data/lib/geoengineer/resources/aws_cloudwatch_event_target.rb +2 -2
  35. data/lib/geoengineer/resources/aws_cloudwatch_metric_alarm.rb +10 -8
  36. data/lib/geoengineer/resources/aws_customer_gateway.rb +4 -2
  37. data/lib/geoengineer/resources/aws_db_instance.rb +2 -2
  38. data/lib/geoengineer/resources/aws_db_parameter_group.rb +4 -2
  39. data/lib/geoengineer/resources/aws_dynamodb_table.rb +2 -2
  40. data/lib/geoengineer/resources/aws_eip.rb +2 -2
  41. data/lib/geoengineer/resources/aws_elasticache_cluster.rb +2 -2
  42. data/lib/geoengineer/resources/aws_elasticache_parameter_group.rb +2 -2
  43. data/lib/geoengineer/resources/aws_elasticache_replication_group.rb +2 -2
  44. data/lib/geoengineer/resources/aws_elasticache_subnet_group.rb +2 -2
  45. data/lib/geoengineer/resources/aws_elasticsearch_domain.rb +2 -2
  46. data/lib/geoengineer/resources/aws_elb.rb +4 -2
  47. data/lib/geoengineer/resources/aws_iam_account_password_policy.rb +2 -1
  48. data/lib/geoengineer/resources/aws_iam_group.rb +2 -2
  49. data/lib/geoengineer/resources/aws_iam_group_membership.rb +1 -1
  50. data/lib/geoengineer/resources/aws_iam_instance_profile.rb +3 -3
  51. data/lib/geoengineer/resources/aws_iam_policy.rb +6 -4
  52. data/lib/geoengineer/resources/aws_iam_policy_attachment.rb +1 -1
  53. data/lib/geoengineer/resources/aws_iam_role.rb +2 -2
  54. data/lib/geoengineer/resources/aws_iam_role_policy.rb +10 -9
  55. data/lib/geoengineer/resources/aws_iam_user.rb +4 -4
  56. data/lib/geoengineer/resources/aws_instance.rb +3 -3
  57. data/lib/geoengineer/resources/aws_internet_gateway.rb +3 -2
  58. data/lib/geoengineer/resources/aws_kinesis_stream.rb +4 -4
  59. data/lib/geoengineer/resources/aws_kms_key.rb +5 -3
  60. data/lib/geoengineer/resources/aws_lambda_alias.rb +7 -7
  61. data/lib/geoengineer/resources/aws_lambda_event_source_mapping.rb +2 -2
  62. data/lib/geoengineer/resources/aws_lambda_function.rb +2 -2
  63. data/lib/geoengineer/resources/aws_lambda_permission.rb +9 -8
  64. data/lib/geoengineer/resources/aws_lb_cookie_stickiness_policy.rb +47 -0
  65. data/lib/geoengineer/resources/aws_load_balancer_backend_server_policy.rb +2 -2
  66. data/lib/geoengineer/resources/aws_load_balancer_policy.rb +5 -5
  67. data/lib/geoengineer/resources/aws_main_route_table_association.rb +2 -2
  68. data/lib/geoengineer/resources/aws_nat_gateway.rb +2 -2
  69. data/lib/geoengineer/resources/aws_network_acl.rb +2 -2
  70. data/lib/geoengineer/resources/aws_network_acl_rule.rb +2 -2
  71. data/lib/geoengineer/resources/aws_proxy_protocol_policy.rb +1 -1
  72. data/lib/geoengineer/resources/aws_redshift_cluster.rb +2 -2
  73. data/lib/geoengineer/resources/aws_route.rb +2 -2
  74. data/lib/geoengineer/resources/aws_route53_record.rb +6 -6
  75. data/lib/geoengineer/resources/aws_route53_zone.rb +2 -2
  76. data/lib/geoengineer/resources/aws_route_table.rb +2 -2
  77. data/lib/geoengineer/resources/aws_route_table_association.rb +2 -2
  78. data/lib/geoengineer/resources/aws_s3_bucket.rb +2 -2
  79. data/lib/geoengineer/resources/aws_s3_bucket_notification.rb +38 -0
  80. data/lib/geoengineer/resources/aws_security_group.rb +2 -2
  81. data/lib/geoengineer/resources/aws_ses_receipt_rule.rb +2 -2
  82. data/lib/geoengineer/resources/aws_ses_receipt_rule_set.rb +2 -2
  83. data/lib/geoengineer/resources/aws_sns_topic.rb +2 -2
  84. data/lib/geoengineer/resources/aws_sns_topic_subscription.rb +5 -5
  85. data/lib/geoengineer/resources/aws_sqs_queue.rb +2 -2
  86. data/lib/geoengineer/resources/aws_subnet.rb +2 -2
  87. data/lib/geoengineer/resources/aws_vpc.rb +2 -2
  88. data/lib/geoengineer/resources/aws_vpc_dhcp_options.rb +2 -2
  89. data/lib/geoengineer/resources/aws_vpc_dhcp_options_association.rb +2 -2
  90. data/lib/geoengineer/resources/aws_vpc_endpoint.rb +2 -2
  91. data/lib/geoengineer/resources/aws_vpc_peering_connection.rb +2 -2
  92. data/lib/geoengineer/resources/aws_vpn_connection.rb +3 -2
  93. data/lib/geoengineer/resources/aws_vpn_connection_route.rb +2 -2
  94. data/lib/geoengineer/resources/aws_vpn_gateway.rb +2 -2
  95. data/lib/geoengineer/resources/aws_vpn_gateway_attachment.rb +2 -2
  96. data/lib/geoengineer/template.rb +3 -1
  97. data/lib/geoengineer/templates/json_rest_api.rb +197 -0
  98. data/lib/geoengineer/utils/aws_clients.rb +129 -38
  99. data/lib/geoengineer/utils/has_templates.rb +1 -1
  100. data/lib/geoengineer/version.rb +1 -1
  101. data/spec/environment_spec.rb +1 -1
  102. data/spec/resource_spec.rb +24 -10
  103. data/spec/resources/aws_alb_listener_rule_spec.rb +45 -0
  104. data/spec/resources/aws_alb_listener_spec.rb +33 -0
  105. data/spec/resources/aws_alb_spec.rb +33 -0
  106. data/spec/resources/aws_alb_target_group_spec.rb +35 -0
  107. data/spec/resources/aws_api_gateway_account_spec.rb +6 -0
  108. data/spec/resources/aws_api_gateway_api_key_spec.rb +6 -0
  109. data/spec/resources/aws_api_gateway_authorizer_spec.rb +6 -0
  110. data/spec/resources/aws_api_gateway_base_path_mapping_spec.rb +6 -0
  111. data/spec/resources/aws_api_gateway_client_certificate_spec.rb +6 -0
  112. data/spec/resources/aws_api_gateway_deployment_spec.rb +6 -0
  113. data/spec/resources/aws_api_gateway_domain_name_spec.rb +6 -0
  114. data/spec/resources/aws_api_gateway_integration_response_spec.rb +6 -0
  115. data/spec/resources/aws_api_gateway_integration_spec.rb +6 -0
  116. data/spec/resources/aws_api_gateway_method_response_spec.rb +6 -0
  117. data/spec/resources/aws_api_gateway_method_spec.rb +6 -0
  118. data/spec/resources/aws_api_gateway_model_spec.rb +6 -0
  119. data/spec/resources/aws_api_gateway_resource_spec.rb +6 -0
  120. data/spec/resources/aws_api_gateway_rest_api_spec.rb +6 -0
  121. data/spec/resources/aws_cloudfront_distribution_spec.rb +50 -0
  122. data/spec/resources/aws_cloudtrail_spec.rb +3 -3
  123. data/spec/resources/aws_cloudwatch_event_rule_spec.rb +3 -3
  124. data/spec/resources/aws_cloudwatch_event_target_spec.rb +4 -6
  125. data/spec/resources/aws_cloudwatch_metric_alarm_spec.rb +3 -6
  126. data/spec/resources/aws_customer_gateway_spec.rb +4 -3
  127. data/spec/resources/aws_db_instance_spec.rb +3 -3
  128. data/spec/resources/aws_db_parameter_group_spec.rb +3 -3
  129. data/spec/resources/aws_dynamodb_table_spec.rb +3 -3
  130. data/spec/resources/aws_eip_spec.rb +3 -3
  131. data/spec/resources/aws_elasticache_replication_group_spec.rb +3 -6
  132. data/spec/resources/aws_elasticache_subnet_group_spec.rb +4 -6
  133. data/spec/resources/aws_elasticcache_cluster_spec.rb +3 -3
  134. data/spec/resources/aws_elasticcache_parameter_group_spec.rb +3 -6
  135. data/spec/resources/aws_elasticsearch_domain_spec.rb +3 -3
  136. data/spec/resources/aws_elb_spec.rb +3 -3
  137. data/spec/resources/aws_iam_account_password_policy_spec.rb +2 -6
  138. data/spec/resources/aws_iam_group_membership_spec.rb +2 -6
  139. data/spec/resources/aws_iam_group_spec.rb +3 -3
  140. data/spec/resources/aws_iam_instance_profile_spec.rb +3 -6
  141. data/spec/resources/aws_iam_policy_attachment_spec.rb +2 -6
  142. data/spec/resources/aws_iam_policy_spec.rb +3 -5
  143. data/spec/resources/aws_iam_role_spec.rb +3 -4
  144. data/spec/resources/aws_iam_rule_policy_spec.rb +2 -5
  145. data/spec/resources/aws_iam_user_spec.rb +3 -4
  146. data/spec/resources/aws_instance_spec.rb +3 -3
  147. data/spec/resources/aws_internet_gateway_spec.rb +3 -3
  148. data/spec/resources/aws_kinesis_stream_spec.rb +3 -4
  149. data/spec/resources/aws_kms_key_spec.rb +3 -3
  150. data/spec/resources/aws_lambda_alias_spec.rb +2 -3
  151. data/spec/resources/aws_lambda_event_source_mapping_spec.rb +2 -5
  152. data/spec/resources/aws_lambda_function_spec.rb +3 -4
  153. data/spec/resources/aws_lambda_permission_spec.rb +1 -1
  154. data/spec/resources/aws_lb_cookie_stickiness_policy_spec.rb +38 -0
  155. data/spec/resources/aws_load_balancer_backend_server_policy_spec.rb +2 -3
  156. data/spec/resources/aws_load_balancer_policy_spec.rb +3 -4
  157. data/spec/resources/aws_main_route_table_association_spec.rb +2 -5
  158. data/spec/resources/aws_nat_gateway_spec.rb +3 -4
  159. data/spec/resources/aws_network_acl_rule_spec.rb +2 -3
  160. data/spec/resources/aws_network_acl_spec.rb +3 -3
  161. data/spec/resources/aws_proxy_protocol_policy_spec.rb +2 -2
  162. data/spec/resources/aws_redshift_cluster_spec.rb +3 -3
  163. data/spec/resources/aws_route53_record_spec.rb +3 -4
  164. data/spec/resources/aws_route53_zone_spec.rb +3 -4
  165. data/spec/resources/aws_route_spec.rb +3 -6
  166. data/spec/resources/aws_route_table_association_spec.rb +4 -6
  167. data/spec/resources/aws_route_table_spec.rb +3 -3
  168. data/spec/resources/aws_s3_bucket_notification_spec.rb +4 -0
  169. data/spec/resources/aws_s3_bucket_spec.rb +3 -3
  170. data/spec/resources/aws_security_group_spec.rb +5 -5
  171. data/spec/resources/aws_ses_receipt_rule_set_spec.rb +3 -4
  172. data/spec/resources/aws_ses_receipt_rule_spec.rb +3 -4
  173. data/spec/resources/aws_sns_topic_spec.rb +10 -6
  174. data/spec/resources/aws_sns_topic_subscription_spec.rb +8 -7
  175. data/spec/resources/aws_sqs_queue_spec.rb +3 -3
  176. data/spec/resources/aws_subnet_spec.rb +3 -3
  177. data/spec/resources/aws_vpc_dhcp_options_association_spec.rb +3 -6
  178. data/spec/resources/aws_vpc_dhcp_options_spec.rb +3 -3
  179. data/spec/resources/aws_vpc_endpoint_spec.rb +3 -6
  180. data/spec/resources/aws_vpc_peering_connection_spec.rb +4 -6
  181. data/spec/resources/aws_vpc_spec.rb +3 -3
  182. data/spec/resources/aws_vpn_connection_route_spec.rb +3 -6
  183. data/spec/resources/aws_vpn_connection_spec.rb +3 -3
  184. data/spec/resources/aws_vpn_gateway_attachment_spec.rb +4 -6
  185. data/spec/resources/aws_vpn_gateway_spec.rb +3 -3
  186. data/spec/spec_helper.rb +3 -1
  187. data/spec/support/normalize_indent.rb +12 -0
  188. metadata +92 -22
  189. metadata.gz.sig +0 -0
@@ -11,80 +11,171 @@ class AwsClients
11
11
  @stub_aws || false
12
12
  end
13
13
 
14
+ def self.client_params(provider = nil)
15
+ client_params = { stub_responses: stubbed? }
16
+ client_params[:region] = provider.region if provider
17
+ client_params
18
+ end
19
+
20
+ def self.client_cache(provider, client)
21
+ @client_cache ||= {}
22
+ key = "#{client.name}_" + (provider&.terraform_id || GeoEngineer::Resource::DEFAULT_PROVIDER)
23
+ @client_cache[key] ||= client.new(client_params(provider))
24
+ end
25
+
14
26
  # Clients
15
- def self.cloudwatch
16
- @aws_cloudwatch ||= Aws::CloudWatch::Client.new({ stub_responses: stubbed? })
27
+
28
+ def self.alb(provider = nil)
29
+ self.client_cache(
30
+ provider,
31
+ Aws::ElasticLoadBalancingV2::Client
32
+ )
33
+ end
34
+
35
+ def self.api_gateway(provider = nil)
36
+ self.client_cache(
37
+ provider,
38
+ Aws::APIGateway::Client
39
+ )
40
+ end
41
+
42
+ def self.cloudfront(provider = nil)
43
+ self.client_cache(
44
+ provider,
45
+ Aws::CloudFront::Client
46
+ )
47
+ end
48
+
49
+ def self.cloudwatch(provider = nil)
50
+ self.client_cache(
51
+ provider,
52
+ Aws::CloudWatch::Client
53
+ )
17
54
  end
18
55
 
19
- def self.cloudwatchevents
20
- @aws_cloudwatchevents ||= Aws::CloudWatchEvents::Client.new({ stub_responses: stubbed? })
56
+ def self.cloudwatchevents(provider = nil)
57
+ self.client_cache(
58
+ provider,
59
+ Aws::CloudWatchEvents::Client
60
+ )
21
61
  end
22
62
 
23
- def self.dynamo
24
- @aws_dynamo ||= Aws::DynamoDB::Client.new({ stub_responses: stubbed? })
63
+ def self.dynamo(provider = nil)
64
+ self.client_cache(
65
+ provider,
66
+ Aws::DynamoDB::Client
67
+ )
25
68
  end
26
69
 
27
- def self.ec2
28
- @aws_ec2 ||= Aws::EC2::Client.new({ stub_responses: stubbed? })
70
+ def self.ec2(provider = nil)
71
+ self.client_cache(
72
+ provider,
73
+ Aws::EC2::Client
74
+ )
29
75
  end
30
76
 
31
- def self.elasticache
32
- @aws_elasticache ||= Aws::ElastiCache::Client.new({ stub_responses: stubbed? })
77
+ def self.elasticache(provider = nil)
78
+ self.client_cache(
79
+ provider,
80
+ Aws::ElastiCache::Client
81
+ )
33
82
  end
34
83
 
35
- def self.elasticsearch
36
- @aws_elasticsearch ||= Aws::ElasticsearchService::Client.new({ stub_responses: stubbed? })
84
+ def self.elasticsearch(provider = nil)
85
+ self.client_cache(
86
+ provider,
87
+ Aws::ElasticsearchService::Client
88
+ )
37
89
  end
38
90
 
39
- def self.elb
40
- @aws_elb ||= Aws::ElasticLoadBalancing::Client.new({ stub_responses: stubbed? })
91
+ def self.elb(provider = nil)
92
+ self.client_cache(
93
+ provider,
94
+ Aws::ElasticLoadBalancing::Client
95
+ )
41
96
  end
42
97
 
43
- def self.iam
44
- @aws_iam ||= Aws::IAM::Client.new({ stub_responses: stubbed? })
98
+ def self.iam(provider = nil)
99
+ self.client_cache(
100
+ provider,
101
+ Aws::IAM::Client
102
+ )
45
103
  end
46
104
 
47
- def self.kinesis
48
- @aws_kinesis ||= Aws::Kinesis::Client.new({ stub_responses: stubbed? })
105
+ def self.kinesis(provider = nil)
106
+ self.client_cache(
107
+ provider,
108
+ Aws::Kinesis::Client
109
+ )
49
110
  end
50
111
 
51
- def self.lambda
52
- @aws_lambda ||= Aws::Lambda::Client.new({ stub_responses: stubbed? })
112
+ def self.lambda(provider = nil)
113
+ self.client_cache(
114
+ provider,
115
+ Aws::Lambda::Client
116
+ )
53
117
  end
54
118
 
55
- def self.rds
56
- @aws_rds ||= Aws::RDS::Client.new({ stub_responses: stubbed? })
119
+ def self.rds(provider = nil)
120
+ self.client_cache(
121
+ provider,
122
+ Aws::RDS::Client
123
+ )
57
124
  end
58
125
 
59
- def self.redshift
60
- @aws_redshift ||= Aws::Redshift::Client.new({ stub_responses: stubbed? })
126
+ def self.redshift(provider = nil)
127
+ self.client_cache(
128
+ provider,
129
+ Aws::Redshift::Client
130
+ )
61
131
  end
62
132
 
63
- def self.route53
64
- @aws_route53 ||= Aws::Route53::Client.new({ stub_responses: stubbed? })
133
+ def self.route53(provider = nil)
134
+ self.client_cache(
135
+ provider,
136
+ Aws::Route53::Client
137
+ )
65
138
  end
66
139
 
67
- def self.s3
68
- @aws_s3 ||= Aws::S3::Client.new({ stub_responses: stubbed? })
140
+ def self.s3(provider = nil)
141
+ self.client_cache(
142
+ provider,
143
+ Aws::S3::Client
144
+ )
69
145
  end
70
146
 
71
- def self.ses
72
- @aws_ses ||= Aws::SES::Client.new({ stub_responses: stubbed? })
147
+ def self.ses(provider = nil)
148
+ self.client_cache(
149
+ provider,
150
+ Aws::SES::Client
151
+ )
73
152
  end
74
153
 
75
- def self.sns
76
- @aws_sns ||= Aws::SNS::Client.new({ stub_responses: stubbed? })
154
+ def self.sns(provider = nil)
155
+ self.client_cache(
156
+ provider,
157
+ Aws::SNS::Client
158
+ )
77
159
  end
78
160
 
79
- def self.sqs
80
- @aws_sqs ||= Aws::SQS::Client.new({ stub_responses: stubbed? })
161
+ def self.sqs(provider = nil)
162
+ self.client_cache(
163
+ provider,
164
+ Aws::SQS::Client
165
+ )
81
166
  end
82
167
 
83
- def self.cloudtrail
84
- @aws_cloudtrail ||= Aws::CloudTrail::Client.new({ stub_responses: stubbed? })
168
+ def self.cloudtrail(provider = nil)
169
+ self.client_cache(
170
+ provider,
171
+ Aws::CloudTrail::Client
172
+ )
85
173
  end
86
174
 
87
- def self.kms
88
- @aws_kms ||= Aws::KMS::Client.new({ stub_responses: stubbed? })
175
+ def self.kms(provider = nil)
176
+ self.client_cache(
177
+ provider,
178
+ Aws::KMS::Client
179
+ )
89
180
  end
90
181
  end
@@ -14,7 +14,7 @@ module HasTemplates
14
14
  module_clazz = "GeoEngineer::Templates::#{clazz_name}"
15
15
  return Object.const_get(module_clazz) if Object.const_defined? module_clazz
16
16
 
17
- throw "undefined template '#{type}' for '#{clazz_name}' or 'GeoEngineer::#{clazz_name}'"
17
+ throw "undefined template '#{type}' for '#{clazz_name}' or '#{module_clazz}'"
18
18
  end
19
19
 
20
20
  def from_template(type, name, parameters = {}, &block)
@@ -1,3 +1,3 @@
1
1
  module GeoEngineer
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.1.4'.freeze
3
3
  end
@@ -52,7 +52,7 @@ describe GeoEngineer::Environment do
52
52
  describe '#codifies_resources' do
53
53
  it 'should return both codified and uncodified resources' do
54
54
  class GeoEngineer::Resources::CodifiedResource < GeoEngineer::Resource
55
- def self._fetch_remote_resources
55
+ def self._fetch_remote_resources(provider)
56
56
  [{ _geo_id: "geo_id1" }, { _geo_id: "geo_id2" }]
57
57
  end
58
58
  end
@@ -1,7 +1,7 @@
1
1
  require_relative './spec_helper'
2
2
 
3
3
  class GeoEngineer::RemoteResources < GeoEngineer::Resource
4
- def self._fetch_remote_resources
4
+ def self._fetch_remote_resources(provider)
5
5
  [{ _geo_id: "geo_id1" }, { _geo_id: "geo_id2" }, { _geo_id: "geo_id2" }]
6
6
  end
7
7
  end
@@ -88,23 +88,36 @@ describe GeoEngineer::Resource do
88
88
  end
89
89
 
90
90
  describe '#fetch_remote_resources' do
91
- it 'should return a list of resources' do
92
- class GeoEngineer::FetchableResources < GeoEngineer::Resource
93
- def self._fetch_remote_resources
94
- [{ _geo_id: "geoid" }]
95
- end
91
+ class GeoEngineer::FetchableResources < GeoEngineer::Resource
92
+ def self._fetch_remote_resources(provider)
93
+ [{ _geo_id: "geoid #{provider.id}" }]
96
94
  end
95
+ end
96
+
97
+ it 'should return a list of resources' do
98
+ provider = GeoEngineer::Provider.new("prov_1")
99
+ resources = GeoEngineer::FetchableResources.fetch_remote_resources(provider)
100
+ expect(resources.length).to eq 1
101
+ expect(resources[0]._geo_id).to eq "geoid prov_1"
102
+ end
103
+
104
+ it 'should retrieve different resources for different providers' do
105
+ provider1 = GeoEngineer::Provider.new("prov_1")
106
+ resources = GeoEngineer::FetchableResources.fetch_remote_resources(provider1)
107
+ expect(resources.length).to eq 1
108
+ expect(resources[0]._geo_id).to eq "geoid prov_1"
97
109
 
98
- resources = GeoEngineer::FetchableResources.fetch_remote_resources()
110
+ provider2 = GeoEngineer::Provider.new("prov_2")
111
+ resources = GeoEngineer::FetchableResources.fetch_remote_resources(provider2)
99
112
  expect(resources.length).to eq 1
100
- expect(resources[0]._geo_id).to eq "geoid"
113
+ expect(resources[0]._geo_id).to eq "geoid prov_2"
101
114
  end
102
115
  end
103
116
 
104
117
  describe '#_resources_to_ignore' do
105
118
  it 'lets you ignore certain resources' do
106
119
  class GeoEngineer::IgnorableResources < GeoEngineer::Resource
107
- def self._fetch_remote_resources
120
+ def self._fetch_remote_resources(provider)
108
121
  [{ _geo_id: "geoid1" }, { _geo_id: "geoid2" }]
109
122
  end
110
123
 
@@ -113,7 +126,8 @@ describe GeoEngineer::Resource do
113
126
  end
114
127
  end
115
128
 
116
- resources = GeoEngineer::IgnorableResources.fetch_remote_resources()
129
+ resources = GeoEngineer::IgnorableResources
130
+ .fetch_remote_resources(GeoEngineer::Provider.new('aws'))
117
131
  expect(resources.length).to eq 1
118
132
  expect(resources[0]._geo_id).to eq "geoid2"
119
133
  end
@@ -0,0 +1,45 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsAlbListenerRule do
4
+ let(:alb_client) { AwsClients.alb }
5
+
6
+ common_resource_tests(described_class, described_class.type_from_class_name)
7
+
8
+ before { alb_client.setup_stubbing }
9
+
10
+ describe "#_fetch_remote_resources" do
11
+ it 'should create list of hashes from returned AWS SDK' do
12
+ alb_client.stub_responses(
13
+ :describe_load_balancers,
14
+ {
15
+ load_balancers: [{ load_balancer_arn: "foo/bar-baz" }]
16
+ }
17
+ )
18
+ alb_client.stub_responses(
19
+ :describe_listeners,
20
+ {
21
+ listeners: [
22
+ {
23
+ load_balancer_arn: "foo/bar-baz",
24
+ listener_arn: "listener/foo/bar-baz",
25
+ port: 443
26
+ }
27
+ ]
28
+ }
29
+ )
30
+ alb_client.stub_responses(
31
+ :describe_rules,
32
+ {
33
+ rules: [
34
+ {
35
+ rule_arn: "rule/foo/bar-baz",
36
+ priority: "69"
37
+ }
38
+ ]
39
+ }
40
+ )
41
+ remote_resources = GeoEngineer::Resources::AwsAlbListenerRule._fetch_remote_resources(nil)
42
+ expect(remote_resources.length).to eq 1
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsAlbListener do
4
+ let(:alb_client) { AwsClients.alb }
5
+
6
+ common_resource_tests(described_class, described_class.type_from_class_name)
7
+
8
+ before { alb_client.setup_stubbing }
9
+
10
+ describe "#_fetch_remote_resources" do
11
+ it 'should create list of hashes from returned AWS SDK' do
12
+ alb_client.stub_responses(
13
+ :describe_load_balancers,
14
+ {
15
+ load_balancers: [{ load_balancer_arn: "foo/bar-baz" }]
16
+ }
17
+ )
18
+ alb_client.stub_responses(
19
+ :describe_listeners,
20
+ {
21
+ listeners: [
22
+ {
23
+ load_balancer_arn: "foo/bar-baz",
24
+ port: 443
25
+ }
26
+ ]
27
+ }
28
+ )
29
+ remote_resources = GeoEngineer::Resources::AwsAlbListener._fetch_remote_resources(nil)
30
+ expect(remote_resources.length).to eq 1
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsAlb do
4
+ let(:alb_client) { AwsClients.alb }
5
+
6
+ common_resource_tests(described_class, described_class.type_from_class_name)
7
+
8
+ before { alb_client.setup_stubbing }
9
+
10
+ describe "#_fetch_remote_resources" do
11
+ it 'should create list of hashes from returned AWS SDK' do
12
+ alb_client.stub_responses(
13
+ :describe_load_balancers,
14
+ {
15
+ load_balancers: [{ load_balancer_arn: "foo/bar-baz" }]
16
+ }
17
+ )
18
+ alb_client.stub_responses(
19
+ :describe_tags,
20
+ {
21
+ tag_descriptions: [
22
+ {
23
+ resource_arn: "foo/bar-baz",
24
+ tags: [{ key: "Name", value: "foo/bar-baz" }]
25
+ }
26
+ ]
27
+ }
28
+ )
29
+ remote_resources = GeoEngineer::Resources::AwsAlb._fetch_remote_resources(nil)
30
+ expect(remote_resources.length).to eq 1
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsAlbTargetGroup do
4
+ let(:alb_client) { AwsClients.alb }
5
+
6
+ common_resource_tests(described_class, described_class.type_from_class_name)
7
+
8
+ before { alb_client.setup_stubbing }
9
+
10
+ describe "#_fetch_remote_resources" do
11
+ it 'should create list of hashes from returned AWS SDK' do
12
+ alb_client.stub_responses(
13
+ :describe_target_groups,
14
+ {
15
+ target_groups: [
16
+ {
17
+ target_group_arn: "targetgroup/foo/bar-baz",
18
+ port: 443,
19
+ protocol: "HTTPS",
20
+ vpc_id: "vpc-1"
21
+ },
22
+ {
23
+ target_group_arn: "targetgroup/foo/test-test",
24
+ port: 80,
25
+ protocol: "HTTP",
26
+ vpc_id: "vpc-1"
27
+ }
28
+ ]
29
+ }
30
+ )
31
+ remote_resources = GeoEngineer::Resources::AwsAlbTargetGroup._fetch_remote_resources(nil)
32
+ expect(remote_resources.length).to eq 2
33
+ end
34
+ end
35
+ end