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
# 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|
      records_response = route53_client.list_resource_record_sets(hosted_zone_id: zone.id)
      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
    records
  rescue StandardError => e
    raise PuppetX::Puppetlabs::FetchingAWSDataError.new(region, self.resource_type.name.to_s, e.message)
  end
end

.prefetch(resources) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/puppet/provider/route53_record.rb', line 27

def self.prefetch(resources)
  instances.each do |prov|
    if resource = resources[prov.name]
      resource.provider = prov
    end
  end
end

Instance Method Details

#createObject



77
78
79
80
81
82
83
# File 'lib/puppet/provider/route53_record.rb', line 77

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



85
86
87
88
89
90
91
# File 'lib/puppet/provider/route53_record.rb', line 85

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)


35
36
37
38
# File 'lib/puppet/provider/route53_record.rb', line 35

def exists?
  Puppet.info("Checking if #{self.class.record_type} record #{name} exists")
  @property_hash[:ensure] == :present
end

#record_hash(action) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/puppet/provider/route53_record.rb', line 40

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



70
71
72
73
74
75
# File 'lib/puppet/provider/route53_record.rb', line 70

def update
  Puppet.info("Updating #{self.class.record_type} record #{name}")
  route53_client.change_resource_record_sets(
    record_hash('UPSERT')
  )
end

#zone_idObject



60
61
62
63
64
65
66
67
68
# File 'lib/puppet/provider/route53_record.rb', line 60

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