Class: Fog::DNS::Dynect::Real

Inherits:
Object
  • Object
show all
Defined in:
lib/fog/dynect/dns.rb,
lib/fog/dynect/requests/dns/get_zone.rb,
lib/fog/dynect/requests/dns/put_zone.rb,
lib/fog/dynect/requests/dns/post_zone.rb,
lib/fog/dynect/requests/dns/get_record.rb,
lib/fog/dynect/requests/dns/delete_zone.rb,
lib/fog/dynect/requests/dns/post_record.rb,
lib/fog/dynect/requests/dns/post_session.rb,
lib/fog/dynect/requests/dns/delete_record.rb,
lib/fog/dynect/requests/dns/get_node_list.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/fog/dynect/dns.rb', line 60

def initialize(options={})
  require 'multi_json'

  @dynect_customer = options[:dynect_customer]
  @dynect_username = options[:dynect_username]
  @dynect_password = options[:dynect_password]

  @connection_options = options[:connection_options] || {}
  @host       = "api2.dynect.net"
  @port       = options[:port]        || 443
  @path       = options[:path]        || '/REST'
  @persistent = options[:persistent]  || true
  @scheme     = options[:scheme]      || 'https'
  @version    = options[:version]     || '2.3.1'
  @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
end

Instance Method Details

#auth_tokenObject



77
78
79
# File 'lib/fog/dynect/dns.rb', line 77

def auth_token
  @auth_token ||= post_session.body['data']['token']
end

#delete_record(type, zone, fqdn, record_id) ⇒ Object

Delete a record

Parameters

  • type<~String> - type of record in [‘AAAA’, ‘ANY’, ‘A’, ‘CNAME’, ‘DHCID’, ‘DNAME’, ‘DNSKEY’, ‘DS’, ‘KEY’, ‘LOC’, ‘MX’, ‘NSA’, ‘NS’, ‘PTR’, ‘PX’, ‘RP’, ‘SOA’, ‘SPF’, ‘SRV’, ‘SSHFP’, ‘TXT’]

  • zone<~String> - zone of record

  • fqdn<~String> - fqdn of record

  • record_id<~String> - id of record



14
15
16
17
18
19
20
# File 'lib/fog/dynect/requests/dns/delete_record.rb', line 14

def delete_record(type, zone, fqdn, record_id)
  request(
    :expects  => 200,
    :method   => :delete,
    :path     => ["#{type.to_s.upcase}Record", zone, fqdn, record_id].join('/')
  )
end

#delete_zone(zone) ⇒ Object

Delete a zone

Parameters

  • zone<~String> - zone to host



11
12
13
14
15
16
17
# File 'lib/fog/dynect/requests/dns/delete_zone.rb', line 11

def delete_zone(zone)
  request(
    :expects  => 200,
    :method   => :delete,
    :path     => "Zone/#{zone}"
  )
end

#get_node_list(zone, options = {}) ⇒ Object

Get one or more node lists

Parameters

  • zone<~String> - zone to lookup node lists for

  • options<~Hash>

    • fqdn<~String> - fully qualified domain name of node to lookup



13
14
15
16
17
18
19
# File 'lib/fog/dynect/requests/dns/get_node_list.rb', line 13

def get_node_list(zone, options = {})
  request(
    :expects  => 200,
    :method   => :get,
    :path     => ['NodeList', zone, options['fqdn']].compact.join('/')
  )
end

#get_record(type, zone, fqdn, options = {}) ⇒ Object

List records of a given type

Parameters

  • type<~String> - type of record in [‘AAAA’, ‘ANY’, ‘A’, ‘CNAME’, ‘DHCID’, ‘DNAME’, ‘DNSKEY’, ‘DS’, ‘KEY’, ‘LOC’, ‘MX’, ‘NSA’, ‘NS’, ‘PTR’, ‘PX’, ‘RP’, ‘SOA’, ‘SPF’, ‘SRV’, ‘SSHFP’, ‘TXT’]

  • zone<~String> - name of zone to lookup

  • fqdn<~String> - name of fqdn to lookup

  • options<~Hash>:

    • record_id<~String> - id of record



15
16
17
18
19
20
21
# File 'lib/fog/dynect/requests/dns/get_record.rb', line 15

def get_record(type, zone, fqdn, options = {})
  request(
    :expects  => 200,
    :method   => :get,
    :path     => ["#{type.to_s.upcase}Record", zone, fqdn, options['record_id']].compact.join('/')
  )
end

#get_zone(options = {}) ⇒ Object

Get one or more zones

Parameters

  • options<~Hash>:

    • zone<~String> - name of zone to lookup, or omit to return list of zones



12
13
14
15
16
17
18
# File 'lib/fog/dynect/requests/dns/get_zone.rb', line 12

def get_zone(options = {})
  request(
    :expects  => 200,
    :method   => :get,
    :path     => ['Zone', options['zone']].compact.join('/')
  )
end

#post_record(type, zone, fqdn, rdata, options = {}) ⇒ Object

Create a record

Parameters

  • type<~String> - type of record in [‘AAAA’, ‘ANY’, ‘A’, ‘CNAME’, ‘DHCID’, ‘DNAME’, ‘DNSKEY’, ‘DS’, ‘KEY’, ‘LOC’, ‘MX’, ‘NSA’, ‘NS’, ‘PTR’, ‘PX’, ‘RP’, ‘SOA’, ‘SPF’, ‘SRV’, ‘SSHFP’, ‘TXT’]

  • zone<~String> - zone of record

  • rdata<~Hash> - rdata for record

  • options<~Hash>: (options vary by type, listing below includes common parameters)

    • ttl<~Integer> - ttl for the record, defaults to zone ttl



15
16
17
18
19
20
21
22
23
# File 'lib/fog/dynect/requests/dns/post_record.rb', line 15

def post_record(type, zone, fqdn, rdata, options = {})
  options.merge!('rdata' => rdata)
  request(
    :body     => MultiJson.encode(options),
    :expects  => 200,
    :method   => :post,
    :path     => ["#{type.to_s.upcase}Record", zone, fqdn].join('/')
  )
end

#post_sessionObject



6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/fog/dynect/requests/dns/post_session.rb', line 6

def post_session
  request(
    :expects  => 200,
    :method   => :post,
    :path     => "Session",
    :body     => MultiJson.encode({
      :customer_name  => @dynect_customer,
      :user_name      => @dynect_username,
      :password       => @dynect_password
    })
  )
end

#post_zone(rname, ttl, zone, options = {}) ⇒ Object

Create a zone

Parameters

  • rname<~String> - administrative contact

  • ttl<~Integer> - time to live (in seconds) for records in this zone

  • zone<~String> - name of zone to host

  • options<~Hash>:

    • serial_style<~String> - style of serial number, in [‘day’, ‘epoch’, ‘increment’, ‘minute’]. Defaults to increment



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/fog/dynect/requests/dns/post_zone.rb', line 15

def post_zone(rname, ttl, zone, options = {})
  body = MultiJson.encode({
    :rname  => rname,
    :token  => auth_token,
    :ttl    => ttl
  }.merge!(options))

  request(
    :body     => body,
    :expects  => 200,
    :method   => :post,
    :path     => 'Zone/' << zone
  )
end

#put_zone(zone, options = {}) ⇒ Object

Update a zone

Parameters

  • zone<~String> - name or id of zone

  • options<~Hash>:

    • freeze<~Boolean> - causes zone to become frozen

    • publish<~Boolean> - causes all pending changes to be pushed to nameservers

    • thaw<~Boolean> - causes zone to cease being frozen



15
16
17
18
19
20
21
22
# File 'lib/fog/dynect/requests/dns/put_zone.rb', line 15

def put_zone(zone, options = {})
  request(
    :body     => MultiJson.encode(options),
    :expects  => 200,
    :method   => :put,
    :path     => 'Zone/' << zone
  )
end

#request(params) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/fog/dynect/dns.rb', line 81

def request(params)
  begin
    params[:headers] ||= {}
    params[:headers]['Content-Type'] = 'application/json'
    params[:headers]['API-Version'] = @version
    params[:headers]['Auth-Token'] = auth_token unless params[:path] == "Session"
    params[:path] = "#{@path}/#{params[:path]}"
    response = @connection.request(params.merge!({:host => @host}))

    unless response.body.empty?
      response.body = MultiJson.decode(response.body)
    end
    response

  rescue Excon::Errors::HTTPStatusError => error
    if @auth_token && error.message =~ /login: (Bad or expired credentials|inactivity logout)/
      @auth_token = nil
      retry
    else
      raise error
    end
  end

  response
end