Class: ProviderDSL::Gandi
- Inherits:
-
Object
- Object
- ProviderDSL::Gandi
- Defined in:
- lib/provider_dsl/gandi.rb
Overview
Manage a domain on Gandi
Instance Attribute Summary collapse
-
#name_servers ⇒ Object
readonly
Returns the value of attribute name_servers.
-
#zone_name ⇒ Object
readonly
Returns the value of attribute zone_name.
Instance Method Summary collapse
- #execute(&block) ⇒ Object
-
#initialize(parameters = {}, &block) ⇒ Gandi
constructor
A new instance of Gandi.
- #name_server_addresses(name_server) ⇒ Object
- #name_server_addresses!(name_server, required_name_server_addresses) ⇒ Object
- #name_servers!(required_name_servers = %w(a.dns.gandi.net b.dns.gandi.net c.dns.gandi.net)) ⇒ Object
- #zone(zone_name, parameters = {}, &block) ⇒ Object
Constructor Details
#initialize(parameters = {}, &block) ⇒ Gandi
Returns a new instance of Gandi.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/provider_dsl/gandi.rb', line 18 def initialize(parameters = {}, &block) session_factory = parameters[:session_factory] api_key = parameters[:api_key] raise 'Gandi API key is not a valid string' unless api_key.is_a?(String) environment = parameters[:environment] || :production @domain_name = parameters[:domain_name] @logger = Log.instance @logger.confidential(/#{Regexp.quote(api_key)}/) @logger.log("Processing Gandi account in #{environment}") @session = session_factory.instance(api_key, environment) if @domain_name @logger.log("Domain name: #{@domain_name}") @name_servers = @session.domain.info(@domain_name).nameservers.uniq.sort @name_server_addresses = Hash[@session.domain.host.list(@domain_name).map { |data| [data['name'], data['ips'].uniq.sort] }] end @zone_name = nil @required_zone = [] instance_eval(&block) if block_given? end |
Instance Attribute Details
#name_servers ⇒ Object (readonly)
Returns the value of attribute name_servers.
16 17 18 |
# File 'lib/provider_dsl/gandi.rb', line 16 def name_servers @name_servers end |
#zone_name ⇒ Object (readonly)
Returns the value of attribute zone_name.
16 17 18 |
# File 'lib/provider_dsl/gandi.rb', line 16 def zone_name @zone_name end |
Instance Method Details
#execute(&block) ⇒ Object
39 40 41 |
# File 'lib/provider_dsl/gandi.rb', line 39 def execute(&block) instance_eval(&block) end |
#name_server_addresses(name_server) ⇒ Object
75 76 77 78 |
# File 'lib/provider_dsl/gandi.rb', line 75 def name_server_addresses(name_server) name_server = "#{name_server}.#{@domain_name}" @name_server_addresses.key?(name_server) ? @name_server_addresses[name_server] : [] end |
#name_server_addresses!(name_server, required_name_server_addresses) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/provider_dsl/gandi.rb', line 80 def name_server_addresses!(name_server, required_name_server_addresses) current_name_server_addresses = name_server_addresses(name_server) required_name_server_addresses = Array(required_name_server_addresses).uniq.sort name_server = "#{name_server}.#{@domain_name}" return if current_name_server_addresses == required_name_server_addresses if @name_server_addresses.key?(name_server) @session.domain.host.update(name_server, required_name_server_addresses) else @session.domain.host.create(name_server, required_name_server_addresses) end end |
#name_servers!(required_name_servers = %w(a.dns.gandi.net b.dns.gandi.net c.dns.gandi.net)) ⇒ Object
92 93 94 95 96 |
# File 'lib/provider_dsl/gandi.rb', line 92 def name_servers!(required_name_servers = %w(a.dns.gandi.net b.dns.gandi.net c.dns.gandi.net)) @name_servers = Array(required_name_servers).uniq.sort @logger.log((["Setting name servers for Gandi domain #{@domain_name} to:"] + @name_servers).join("\n ")) @session.domain.nameservers.set(@domain_name, @name_servers) end |
#zone(zone_name, parameters = {}, &block) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/provider_dsl/gandi.rb', line 43 def zone(zone_name, parameters = {}, &block) @logger.log("Zone: #{zone_name}") original_zone = @session.domain.zone.list.select { |data| data['name'] == zone_name } if original_zone.count.zero? zone_id = nil original_zone = nil else zone_id = original_zone.first['id'] original_zone = @session.domain.zone.record.list(zone_id, 0).map { |record| Hash[record] } end if block_given? zone = Zone.new(original_zone.nil? ? [] : original_zone, parameters) zone.create(&block) zone_id = original_zone.nil? ? @session.domain.zone.create(name: zone_name).id : zone_id if original_zone.nil? || zone.changed? @logger.log("Zone records:\n#{zone.to_s(' ')}") version = @session.domain.zone.version.new(zone_id) @session.domain.zone.record.set(zone_id, version, zone.hash) @session.domain.zone.version.set(zone_id, version) @logger.log("Created version #{version} of zone #{zone_name}") else @logger.log("Zone #{zone_name} is unchanged") end elsif original_zone.nil? raise "Zone #{zone_name} is undefined" end return unless @domain_name @logger.log("Attaching Gandi zone #{zone_name} to domain #{@domain_name}") @session.domain.zone.set(@domain_name, zone_id) name_servers! end |