require_relative "../route53" require_relative '../cli/route53' route53_cli = AwsPocketknife::Cli::Route53.new namespace :route53 do desc "Describe hosted zone" task :describe_hosted_zone, [:hosted_zone] do |t, args| route53_cli.describe_hosted_zone(args) end desc "Listed hosted zones" task :list_hosted_zones do route53_cli.list end desc "List records for hosted zone" task :list_records, [:hosted_zone] do |t, args| route53_cli.list_records(args[:hosted_zone]) end desc "Get record for hosted zone. Record type accepts SOA, A, TXT, NS, CNAME, MX, PTR, SRV, SPF, AAAA" task :get_record, [:hosted_zone, :record_name, :record_type] do |t, args| record_type = args[:record_type] || 'A' record_name = args[:record_name] records = AwsPocketknife::Route53.get_record(hosted_zone_name: args[:hosted_zone], record_name:record_name, record_type: record_type) headers = ["Name", "Type", "DNS Name"] data = [] if records.length > 0 records.each do |record| if record.type == 'CNAME' data << [record.name, record.type, record.resource_records[0].value] else data << [record.name, record.type, record.alias_target.dns_name] end end AwsPocketknife::Route53.pretty_table(headers: headers, data: data) else puts "Record #{record_name} not found in hosted zone #{args[:hosted_zone]}" end end desc "Update dns record from existing dns entry." task :update_record, [:hosted_zone, :record_name, :destiny_record_name, :destiny_hosted_zone, :record_type] do |t, args| record_type = args[:record_type] || 'A' origin_dns_name = args[:record_name] destiny_record_name = args[:destiny_record_name] hosted_zone = args[:hosted_zone] destiny_hosted_zone = args[:destiny_hosted_zone] AwsPocketknife::Route53.update_record(origin_hosted_zone: hosted_zone, origin_dns_name: origin_dns_name, record_type: record_type, destiny_dns_name: destiny_record_name, destiny_hosted_zone: destiny_hosted_zone ) end end