Class: Cumulus::Route53::RecordConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/route53/models/RecordConfig.rb

Overview

Public: An object representing configurationf for a single record in a zone

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(json = nil, domain = nil, zone_id = nil) ⇒ RecordConfig

Public: Constructor.

json - a hash containing the JSON configuration for the record domain - the domain of the zone this record belongs to zone_id - the id of the zone this record belongs to



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/route53/models/RecordConfig.rb', line 33

def initialize(json = nil, domain = nil, zone_id = nil)
  if !json.nil?
    @name = if json["name"] == "" then domain else "#{json["name"].chomp(".")}.#{domain}".chomp(".") end
    @ttl = json["ttl"]
    @type = json["type"]

    if !json["value"].nil?
      @value = json["value"]

      # TXT and SPF records have each value wrapped in quotes
      if @type == "TXT" or @type == "SPF"
        @value = @value.map { |v| "\"#{v}\"" }
      end
    else
      alias_name = if json["alias"]["name"].nil?
        if json["alias"]["type"] == "s3" then @name else domain end
      else
        json["alias"]["name"].chomp(".")
      end
      @alias_target = AliasTarget.new(
        alias_name,
        json["alias"]["type"],
        zone_id
      )
    end
  end
end

Instance Attribute Details

#alias_targetObject (readonly)

Returns the value of attribute alias_target.



22
23
24
# File 'lib/route53/models/RecordConfig.rb', line 22

def alias_target
  @alias_target
end

#nameObject (readonly)

Returns the value of attribute name.



23
24
25
# File 'lib/route53/models/RecordConfig.rb', line 23

def name
  @name
end

#ttlObject (readonly)

Returns the value of attribute ttl.



24
25
26
# File 'lib/route53/models/RecordConfig.rb', line 24

def ttl
  @ttl
end

#typeObject (readonly)

Returns the value of attribute type.



25
26
27
# File 'lib/route53/models/RecordConfig.rb', line 25

def type
  @type
end

#valueObject (readonly)

Returns the value of attribute value.



26
27
28
# File 'lib/route53/models/RecordConfig.rb', line 26

def value
  @value
end

Instance Method Details

#diff(aws) ⇒ Object

Public: Produce an array of differences between this local configuration and the configuration in AWS

aws - the AWS resource

Returns an array of the RecordDiffs that were found



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/route53/models/RecordConfig.rb', line 113

def diff(aws)
  diffs = []

  if @ttl != aws.ttl
    diffs << SingleRecordDiff.new(RecordChange::TTL, aws, self)
  end
  if !@value.nil? and @value.sort != aws.resource_records.map(&:value).sort
    diffs << SingleRecordDiff.new(RecordChange::VALUE, aws, self)
  end
  if !@alias_target.nil?
    if aws.alias_target.nil? or
      (is_elb_alias? and aws.alias_target.elb_dns_name != ELB::get_aws(@alias_target.name).dns_name) or
      (aws.alias_target.chomped_dns != @alias_target.dns_name)
      diffs << SingleRecordDiff.new(RecordChange::ALIAS, aws, self)
    end
  end

  diffs
end

#is_cloudfront_alias?Boolean

Public: Determine if the record is an alias for a Cloudfront distribution

Returns whether this record is an alias for a Cloudfront distribution

Returns:

  • (Boolean)


157
158
159
# File 'lib/route53/models/RecordConfig.rb', line 157

def is_cloudfront_alias?
  !@alias_target.nil? and @alias_target.is_cloudfront?
end

#is_elb_alias?Boolean

Public: Determine if the record is an alias for an ELB

Returns whether this record is an alias for an ELB

Returns:

  • (Boolean)


136
137
138
# File 'lib/route53/models/RecordConfig.rb', line 136

def is_elb_alias?
  !@alias_target.nil? and @alias_target.is_elb?
end

#is_record_set_alias?Boolean

Public: Determine if the recourd is an alias for another record

Returns whether this record is an alias for another record

Returns:

  • (Boolean)


143
144
145
# File 'lib/route53/models/RecordConfig.rb', line 143

def is_record_set_alias?
  !@alias_target.nil? and @alias_target.is_record_set?
end

#is_s3_alias?Boolean

Public: Determine if the record is an alias for an S3 website

Returns whether this record is an alias for an S3 website

Returns:

  • (Boolean)


150
151
152
# File 'lib/route53/models/RecordConfig.rb', line 150

def is_s3_alias?
  !@alias_target.nil? and @alias_target.is_s3?
end

#populate(aws, domain) ⇒ Object

Public: Populate this RecordConfig from an AWS resource.

aws - the aws resource domain - the domain of the parent hosted zone



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/route53/models/RecordConfig.rb', line 65

def populate(aws, domain)
  @name = aws.name.chomp(domain).chomp(".")
  @ttl = aws.ttl
  @type = aws.type
  if !aws.resource_records.nil?
    if @type == "TXT" or @type == "SPF"
      @value = aws.resource_records.map { |r| r.value[1..-2] }
    else
      @value = aws.resource_records.map(&:value)
    end
  end

  if !aws.alias_target.nil?
    if aws.alias_target.dns_name.include? "elb"
      @alias_target = AliasTarget.new(
        Cumulus::ELB::get_aws_by_dns_name(aws.alias_target.elb_dns_name).load_balancer_name,
        "elb",
        nil
      )
    elsif aws.alias_target.dns_name.include? "s3"
      @alias_target = AliasTarget.new(nil, "s3", nil)
    elsif aws.alias_target.dns_name.include? "cloudfront"
      @alias_target = AliasTarget.new(nil, "cloudfront", nil)
    else
      @alias_target = AliasTarget.new(aws.alias_target.dns_name.chomp("."), "record", nil)
    end
  end
end

#readable_nameObject

Public: Produce a useful human readable version of the name of this RecordConfig

Returns the string name



174
175
176
# File 'lib/route53/models/RecordConfig.rb', line 174

def readable_name
  "(#{@type}) #{@name}"
end

#resource_recordsObject

Public: Produce a ‘resource_records` array that is analogous to the one used in AWS from the values array used by Cumulus

Returns the ‘resource_records`



165
166
167
168
169
# File 'lib/route53/models/RecordConfig.rb', line 165

def resource_records
  if !@value.nil?
    @value.map { |v| { value: v } }
  end
end

#to_hashObject

Public: Get the config as a hash

Returns the hash



97
98
99
100
101
102
103
104
105
# File 'lib/route53/models/RecordConfig.rb', line 97

def to_hash
  {
    "name" => @name,
    "type" => @type,
    "ttl" => @ttl,
    "value" => @value,
    "alias" => if @alias_target.nil? then nil else @alias_target.to_hash end,
  }.reject { |k, v| v.nil? }
end