Class: PuppetX::Puppetlabs::Aws
- Inherits:
-
Puppet::Provider
- Object
- Puppet::Provider
- PuppetX::Puppetlabs::Aws
show all
- Defined in:
- lib/puppet_x/puppetlabs/aws.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.autoscaling_client(region = default_region) ⇒ Object
99
100
101
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 99
def self.autoscaling_client(region = default_region)
::Aws::AutoScaling::Client.new(client_config(region))
end
|
.client_config(region) ⇒ Object
66
67
68
69
70
71
72
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 66
def self.client_config(region)
config = {region: region, logger: logger}
if ENV['PUPPET_AWS_PROXY'] and not ENV['PUPPET_AWS_PROXY'].empty?
config[:http_proxy] = ENV['PUPPET_AWS_PROXY']
end
config
end
|
.cloudwatch_client(region = default_region) ⇒ Object
107
108
109
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 107
def self.cloudwatch_client(region = default_region)
::Aws::CloudWatch::Client.new(client_config(region))
end
|
.customer_gateway_name_from_id(region, gateway_id) ⇒ Object
197
198
199
200
201
202
203
204
205
206
207
208
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 197
def self.customer_gateway_name_from_id(region, gateway_id)
ec2 = ec2_client(region)
@customer_gateways ||= Hash.new do |h, key|
h[key] = if key
response = ec2.describe_customer_gateways(customer_gateway_ids: [key])
name_from_tag(response.data.customer_gateways.first)
else
nil
end
end
@customer_gateways[gateway_id]
end
|
.default_region ⇒ Object
38
39
40
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 38
def self.default_region
ENV['AWS_REGION'] || 'eu-west-1'
end
|
.ec2_client(region = default_region) ⇒ Object
74
75
76
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 74
def self.ec2_client(region = default_region)
::Aws::EC2::Client.new(client_config(region))
end
|
.elb_client(region = default_region) ⇒ Object
91
92
93
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 91
def self.elb_client(region = default_region)
::Aws::ElasticLoadBalancing::Client.new(client_config(region))
end
|
.gateway_name_from_id(region, gateway_id) ⇒ Object
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 236
def self.gateway_name_from_id(region, gateway_id)
ec2 = ec2_client(region)
@gateways ||= Hash.new do |h, key|
h[key] = if key == 'local'
'local'
else
begin
igw_response = ec2.describe_internet_gateways(internet_gateway_ids: [key])
name_from_tag(igw_response.data.internet_gateways.first)
rescue ::Aws::EC2::Errors::InvalidInternetGatewayIDNotFound
begin
vgw_response = ec2.describe_vpn_gateways(vpn_gateway_ids: [key])
name_from_tag(vgw_response.data.vpn_gateways.first)
rescue ::Aws::EC2::Errors::InvalidVpnGatewayIDNotFound
nil
end
end
end
end
@gateways[gateway_id]
end
|
.has_name?(hash) ⇒ Boolean
163
164
165
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 163
def self.has_name?(hash)
!hash[:name].nil? && !hash[:name].empty?
end
|
.logger ⇒ Object
58
59
60
61
62
63
64
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 58
def self.logger
if ENV['PUPPET_AWS_DEBUG_LOG'] and not ENV['PUPPET_AWS_DEBUG_LOG'].empty?
Logger.new('puppet-aws-debug.log')
else
nil
end
end
|
.name_from_tag(item) ⇒ Object
136
137
138
139
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 136
def self.name_from_tag(item)
name_tag = item.tags.detect { |tag| tag.key == 'Name' }
name_tag ? name_tag.value : nil
end
|
.options_name_from_id(region, options_id) ⇒ Object
223
224
225
226
227
228
229
230
231
232
233
234
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 223
def self.options_name_from_id(region, options_id)
ec2 = ec2_client(region)
@dhcp_options ||= Hash.new do |h, key|
h[key] = unless key.nil? || key.empty?
response = ec2.describe_dhcp_options(dhcp_options_ids: [key])
name_from_tag(response.dhcp_options.first)
else
nil
end
end
@dhcp_options[options_id]
end
|
.rds_client(region = default_region) ⇒ Object
127
128
129
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 127
def self.rds_client(region = default_region)
::Aws::RDS::Client.new({region: region})
end
|
.read_only(*methods) ⇒ Object
50
51
52
53
54
55
56
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 50
def self.read_only(*methods)
methods.each do |method|
define_method("#{method}=") do |v|
fail "#{method} property is read-only once #{resource.type} created."
end
end
end
|
.regions ⇒ Object
26
27
28
29
30
31
32
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 26
def self.regions
if ENV['AWS_REGION'] and not ENV['AWS_REGION'].empty?
[ENV['AWS_REGION']]
else
ec2_client(default_region).describe_regions.data.regions.map(&:region_name)
end
end
|
.route53_client(region = default_region) ⇒ Object
115
116
117
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 115
def self.route53_client(region = default_region)
::Aws::Route53::Client.new(client_config(region))
end
|
.security_group_name_from_id(region, group_id) ⇒ Object
184
185
186
187
188
189
190
191
192
193
194
195
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 184
def self.security_group_name_from_id(region, group_id)
ec2 = ec2_client(region)
@groups ||= Hash.new do |h, key|
h[key] = if key
response = ec2.describe_security_groups(group_ids: [key])
response.data.security_groups.first.group_name
else
nil
end
end
@groups[group_id]
end
|
141
142
143
144
145
146
147
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 141
def self.tags_for(item)
tags = {}
item.tags.each do |tag|
tags[tag.key] = tag.value unless tag.key == 'Name'
end
tags
end
|
.vpc_name_from_id(region, vpc_id) ⇒ Object
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 167
def self.vpc_name_from_id(region, vpc_id)
ec2 = ec2_client(region)
@vpcs ||= Hash.new do |h, key|
h[key] = if key
response = ec2.describe_vpcs(vpc_ids: [key])
if response.data.vpcs.first.to_hash.keys.include?(:group_name)
response.data.vpcs.first.group_name
elsif response.data.vpcs.first.to_hash.keys.include?(:tags)
name_from_tag(response.data.vpcs.first)
end
else
nil
end
end
@vpcs[vpc_id]
end
|
.vpn_gateway_name_from_id(region, gateway_id) ⇒ Object
210
211
212
213
214
215
216
217
218
219
220
221
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 210
def self.vpn_gateway_name_from_id(region, gateway_id)
ec2 = ec2_client(region)
@vpn_gateways ||= Hash.new do |h, key|
h[key] = if key
response = ec2.describe_vpn_gateways(vpn_gateway_ids: [key])
name_from_tag(response.data.vpn_gateways.first)
else
nil
end
end
@vpn_gateways[gateway_id]
end
|
Instance Method Details
#autoscaling_client(region = default_region) ⇒ Object
103
104
105
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 103
def autoscaling_client(region = default_region)
self.class.autoscaling_client(region)
end
|
#cloudwatch_client(region = default_region) ⇒ Object
111
112
113
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 111
def cloudwatch_client(region = default_region)
self.class.cloudwatch_client(region)
end
|
#default_region ⇒ Object
42
43
44
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 42
def default_region
self.class.default_region
end
|
#ec2_client(region = default_region) ⇒ Object
78
79
80
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 78
def ec2_client(region = default_region)
self.class.ec2_client(region)
end
|
#elb_client(region = default_region) ⇒ Object
95
96
97
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 95
def elb_client(region = default_region)
self.class.elb_client(region)
end
|
#rds_client(region = default_region) ⇒ Object
123
124
125
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 123
def rds_client(region = default_region)
self.class.rds_client(region)
end
|
#regions ⇒ Object
34
35
36
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 34
def regions
self.class.regions
end
|
#route53_client(region = default_region) ⇒ Object
119
120
121
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 119
def route53_client(region = default_region)
self.class.route53_client(region)
end
|
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 149
def tags=(value)
Puppet.info("Updating tags for #{name} in region #{target_region}")
ec2 = ec2_client(target_region)
ec2.create_tags(
resources: [@property_hash[:id]],
tags: value.collect { |k,v| { :key => k, :value => v } }
) unless value.empty?
missing_tags = tags.keys - value.keys
ec2.delete_tags(
resources: [@property_hash[:id]],
tags: missing_tags.collect { |k| { :key => k } }
) unless missing_tags.empty?
end
|
131
132
133
134
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 131
def tags_for_resource
tags = resource[:tags] ? resource[:tags].map { |k,v| {key: k, value: v} } : []
tags << {key: 'Name', value: name}
end
|
#target_region ⇒ Object
46
47
48
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 46
def target_region
resource ? resource[:region] || region : region
end
|
#vpc_only_account? ⇒ Boolean
82
83
84
85
86
87
88
89
|
# File 'lib/puppet_x/puppetlabs/aws.rb', line 82
def vpc_only_account?
response = ec2_client.describe_account_attributes(
attribute_names: ['supported-platforms']
)
account_types = response.account_attributes.map(&:attribute_values).flatten.map(&:attribute_value)
account_types == ['VPC']
end
|