Class: Puppet::Provider::Route53Record

Inherits:
PuppetX::Puppetlabs::Aws
  • Object
show all
Defined in:
lib/puppet/provider/route53_record.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.instancesObject



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.message)
  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

#createObject



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

#destroyObject



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

Returns:

  • (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

#updateObject



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_idObject



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