class Stax::Cmd::Dms

Constants

COLORS

Public Instance Methods

connections() click to toggle source
# File lib/stax/mixin/dms.rb, line 103
def connections
  debug("Test connection results for #{my.stack_name}")
  print_table Aws::Dms.connections(filters: [{name: 'endpoint-arn', values: dms_endpoint_arns}]).map { |c|
    [c.endpoint_identifier, c.replication_instance_identifier, color(c.status, COLORS), c.last_failure_message]
  }
end
dms_endpoint_arns() click to toggle source
# File lib/stax/mixin/dms.rb, line 37
def dms_endpoint_arns
  my.stack_dms_endpoints.map(&:physical_resource_id)
end
dms_instance_arns() click to toggle source
# File lib/stax/mixin/dms.rb, line 41
def dms_instance_arns
  my.stack_dms_replication_instances.map(&:physical_resource_id)
end
dms_task_arns() click to toggle source
# File lib/stax/mixin/dms.rb, line 45
def dms_task_arns
  my.stack_dms_replication_tasks.map(&:physical_resource_id)
end
endpoints() click to toggle source
# File lib/stax/mixin/dms.rb, line 51
def endpoints
  debug("DMS endpoints for #{my.stack_name}")
  print_table Aws::Dms.endpoints(filters: [{name: 'endpoint-arn', values: dms_endpoint_arns}]).map { |e|
    [e.endpoint_identifier, e.endpoint_type, color(e.status, COLORS), e.engine_name, e.server_name]
  }
end
instances() click to toggle source
# File lib/stax/mixin/dms.rb, line 59
def instances
  debug("DMS replication instances for #{my.stack_name}")
  print_table Aws::Dms.instances(filters: [{name: 'replication-instance-arn', values: dms_instance_arns}]).map { |i|
    [
      i.replication_instance_identifier, color(i.replication_instance_status, COLORS),
      i.replication_subnet_group&.vpc_id, i.replication_instance_class, i.engine_version,
      i.availability_zone, i.replication_instance_private_ip_address,
    ]
  }
end
start(*tasks) click to toggle source
# File lib/stax/mixin/dms.rb, line 114
def start(*tasks)
  type = (options[:resume] && 'resume-processing') || (options[:reload] && 'reload-target') || 'start-replication'
  options.fetch(:tasks, dms_task_arns).each do |task|
    Aws::Dms.start(replication_task_arn: task, start_replication_task_type: type).tap do |r|
      puts [r.replication_task_identifier, r.status, r.replication_task_start_date].join('  ')
    end
  end
rescue ::Aws::DatabaseMigrationService::Errors::InvalidParameterCombinationException => e
  fail_task(e.message)
rescue ::Aws::DatabaseMigrationService::Errors::InvalidResourceStateFault => e
  fail_task(e.message)
end
tasks() click to toggle source
# File lib/stax/mixin/dms.rb, line 71
def tasks
  debug("DMS replication tasks for #{my.stack_name}")
  print_table Aws::Dms.tasks(filters: [{name: 'replication-task-arn', values: dms_task_arns}]).map { |t|
    [
      t.replication_task_identifier, color(t.status, COLORS), t.migration_type,
      "#{t.replication_task_stats&.full_load_progress_percent}%", "#{(t.replication_task_stats&.elapsed_time_millis/1000).to_i}s",
      "#{t.replication_task_stats&.tables_loaded} loaded", "#{t.replication_task_stats&.tables_errored} errors",
    ]
  }
end
test() click to toggle source
# File lib/stax/mixin/dms.rb, line 83
def test
  instance = dms_instance_arns.first # FIXME: handle multiple instances
  dms_endpoint_arns.each do |endpoint|
    debug("Testing connection for #{endpoint}")
    conn = Aws::Dms.test(replication_instance_arn: instance, endpoint_arn: endpoint)
    loop do
      sleep 3
      c = Aws::Dms.connections(
        filters: [
          { name: 'endpoint-arn',             values: [conn.endpoint_arn] },
          { name: 'replication-instance-arn', values: [conn.replication_instance_arn] },
        ]
      ).first
      puts [c.endpoint_identifier, c.replication_instance_identifier, color(c.status, COLORS), c.last_failure_message].join('  ')
      break unless c.status == 'testing'
    end
  end
end