Class: Puppet::Provider::Route53Record
- Inherits:
-
PuppetX::Puppetlabs::Aws
- Object
- PuppetX::Puppetlabs::Aws
- Puppet::Provider::Route53Record
- Defined in:
- lib/puppet/provider/route53_record.rb
Class Method Summary collapse
Instance Method Summary collapse
- #create ⇒ Object
- #destroy ⇒ Object
- #exists? ⇒ Boolean
- #record_hash(action) ⇒ Object
- #update ⇒ Object
- #zone_id ⇒ Object
Class Method Details
.instances ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/puppet/provider/route53_record.rb', line 5 def self.instances begin zones_response = route53_client.list_hosted_zones() records = [] zones_response.data.hosted_zones.each do |zone| route53_client.list_resource_record_sets(hosted_zone_id: zone.id).each do |records_response| records_response.data.resource_record_sets.each do |record| records << new({ name: record.name, ensure: :present, zone: zone.name, ttl: record.ttl, values: record.resource_records.map(&:value), }) if record.type == record_type end end end records rescue Timeout::Error, StandardError => e raise PuppetX::Puppetlabs::FetchingAWSDataError.new("Route 53", self.resource_type.name.to_s, e.) end end |
.prefetch(resources) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/puppet/provider/route53_record.rb', line 28 def self.prefetch(resources) instances.each do |prov| if resource = resources[prov.name] resource.provider = prov end end end |
Instance Method Details
#create ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/puppet/provider/route53_record.rb', line 78 def create Puppet.info("Creating #{self.class.record_type} record #{name}") route53_client.change_resource_record_sets( record_hash('UPSERT') ) @property_hash[:ensure] = :present end |
#destroy ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/puppet/provider/route53_record.rb', line 86 def destroy Puppet.info("Deleting #{self.class.record_type} record #{name}") route53_client.change_resource_record_sets( record_hash('DELETE') ) @property_hash[:ensure] = :absent end |
#exists? ⇒ Boolean
36 37 38 39 |
# File 'lib/puppet/provider/route53_record.rb', line 36 def exists? Puppet.info("Checking if #{self.class.record_type} record #{name} exists") @property_hash[:ensure] == :present end |
#record_hash(action) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/puppet/provider/route53_record.rb', line 41 def record_hash(action) values = resource[:values] || @property_hash[:values] records = values ? values.map { |v| {value: v} } : [] ttl = resource[:ttl] || @property_hash[:ttl] { hosted_zone_id: zone_id, change_batch: { changes: [{ action: action, resource_record_set: { name: resource[:name], type: self.class.record_type, ttl: ttl, resource_records: records, } }] } } end |
#update ⇒ Object
71 72 73 74 75 76 |
# File 'lib/puppet/provider/route53_record.rb', line 71 def update Puppet.info("Updating #{self.class.record_type} record #{name}") route53_client.change_resource_record_sets( record_hash('UPSERT') ) end |
#zone_id ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/puppet/provider/route53_record.rb', line 61 def zone_id zone_name = resource[:zone] || @property_hash[:zone] zones = route53_client.list_hosted_zones.data.hosted_zones.select { |zone| zone.name == zone_name } fail "No Zone named #{zone_name}" if zones.count < 1 fail "Multiple Zone records found for #{zone_name}" if zones.count > 1 zones.first.id end |