module AwsPocketknife::Ecs

Constants

DELAY_SECONDS
Logging
MAX_ATTEMPTS
STATE_AVAILABLE
STATE_DEREGISTERED
STATE_ERROR
STATE_FAILED
STATE_INVALID
STATE_PENDING

Public Class Methods

clone_service(name: '', cluster: '') click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 122
def clone_service(name: '', cluster: '')
  d = DateTime.now
  date_fmt = d.strftime("%d%m%Y_%H%M%S")
  current_service = describe_services name: name, cluster: cluster
  new_name = "#{name}-clone-#{date_fmt}"
  payload = {
    cluster: cluster,
    service_name: new_name,
    task_definition: current_service.task_definition,
    load_balancers: current_service.load_balancers.to_a,
    desired_count: current_service.desired_count,
    role: current_service.role_arn,
    deployment_configuration: current_service.deployment_configuration.to_h,
    placement_constraints: current_service.placement_constraints.to_a,
    placement_strategy: current_service.placement_strategy.to_a,
  }
  puts "Cloned service payload:"
  AwsPocketknife::Ecs.nice_print(object: payload.to_h)
  create_service payload: payload
end
create_service(payload: {}) click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 118
def create_service(payload: {})
  ecs_client.create_service(payload)
end
describe_clusters(name: '') click to toggle source

clusters

# File lib/aws_pocketknife/ecs.rb, line 81
def describe_clusters(name: '')
  ecs_client.describe_clusters({clusters: [name]}).clusters.first
end
describe_container_instances(cluster: '', container: '') click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 38
def describe_container_instances(cluster: '', container: '')
  ecs_client.describe_container_instances({cluster: cluster, container_instances: [container]}).container_instances.first
end
describe_services(name: '', cluster: '') click to toggle source

services

# File lib/aws_pocketknife/ecs.rb, line 114
def describe_services(name: '', cluster: '')
  ecs_client.describe_services({cluster: cluster, services: [name]}).services.first
end
describe_task_definition(task_definition: '') click to toggle source

tasks-definitions

# File lib/aws_pocketknife/ecs.rb, line 173
def describe_task_definition(task_definition: '')
  resp = ecs_client.describe_task_definition({task_definition: task_definition})
  return resp.task_definition.container_definitions.first
end
describe_tasks(cluster: '', tasks: []) click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 185
def describe_tasks cluster: '', tasks: []
  if tasks.empty?
    return []
  else
    return ecs_client.describe_tasks({
      cluster: cluster,
      tasks: tasks, 
    })
  end
end
drain_instances(cluster: '', names: '') click to toggle source

set a list of instances to draining. instances is a comma delimited string

# File lib/aws_pocketknife/ecs.rb, line 30
def drain_instances(cluster: '', names: '')
  ecs_client.update_container_instances_state({
    cluster: cluster,
    container_instances: names.split(';'), # required
    status: "DRAINING", # required, accepts ACTIVE, DRAINING
  })
end
get_clusters(next_token: "", max_results: 100) click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 206
def get_clusters(next_token: "", max_results: 100)
  ecs_client.list_clusters({
      max_results: max_results,
      next_token: next_token
  })
end
get_containers(cluster: "", next_token: "", max_results: 100) click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 213
def get_containers(cluster: "", next_token: "", max_results: 100)
  ecs_client.list_container_instances({
      max_results: max_results,
      cluster: cluster,
      next_token: next_token
  })
end
get_services(next_token: "", max_results: 100, cluster: '') click to toggle source

helpers

# File lib/aws_pocketknife/ecs.rb, line 198
def get_services(next_token: "", max_results: 100, cluster: '')
  ecs_client.list_services({
      max_results: max_results,
      cluster: cluster,
      next_token: next_token,
  })
end
list_clusters(max_results: 50) click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 85
def list_clusters(max_results: 50)
  clusters_list = []
  responses = []

  clusters = get_clusters max_results: max_results
  responses << clusters.cluster_arns
  next_token = clusters.next_token

  while true
    break if next_token.nil? or next_token.empty?
    resp = get_clusters(next_token: next_token, max_results: max_results)
    responses << resp.cluster_arns
    next_token = resp.next_token
  end

  responses.flatten!

  responses.each do |cluster|
    cluster_map = {}
    cluster_map[:name] = cluster.split('/')[1]
    info = describe_clusters name: cluster
    cluster_map[:info] = info
    clusters_list << cluster_map
  end
  return clusters_list
end
list_container_instances(cluster: '', max_results: 50) click to toggle source

list container instances

# File lib/aws_pocketknife/ecs.rb, line 43
def list_container_instances(cluster: '', max_results: 50)
  containers_list = []
  responses = []

  containers = get_containers cluster: cluster, max_results: max_results
  responses << containers.container_instance_arns
  next_token = containers.next_token

  while true
    break if next_token.nil? or next_token.empty?
    resp = get_containers(cluster: cluster, next_token: next_token, max_results: max_results)
    responses << resp.container_instance_arns
    next_token = resp.next_token
  end

  responses.flatten!

  responses.each do |container|
    container_map = {}
    task_list = []
    container_map[:name] = container.split('/')[1]
    info = describe_container_instances cluster: cluster, container: container
    container_map[:info] = info
    #container_map[:tasks] = list_container_tasks(cluster: cluster, container_name: container_map[:name])
    containers_list << container_map
  end
  return containers_list
end
list_container_tasks(cluster: '', container_name: '') click to toggle source

list tasks in container instance

# File lib/aws_pocketknife/ecs.rb, line 73
def list_container_tasks(cluster: '', container_name: '')
  tasks_list = []
  tasks = list_tasks cluster: cluster, container_instance: container_name
  describe_tasks(cluster: cluster, tasks: tasks)
end
list_services(cluster: '', max_results: 50) click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 143
def list_services(cluster: '', max_results: 50)
  services_list = []
  responses = []

  services = get_services max_results: max_results, cluster: cluster
  responses << services.service_arns
  next_token = services.next_token

  while true
    break if next_token.nil? or next_token.empty?
    resp = get_services(next_token: next_token, max_results: max_results, cluster: cluster)
    responses << resp.service_arns
    next_token = resp.next_token
  end

  responses.flatten!

  responses.each do |service|
    service_map = {}
    service_map[:name] = service.split('/')[1]
    info = describe_services name: service, cluster: cluster
    service_map[:info] = info
    service_map[:task_definition] = describe_task_definition task_definition: info.task_definition
    services_list << service_map          
  end
  return services_list
end
list_tasks(cluster: '', container_instance: '') click to toggle source
# File lib/aws_pocketknife/ecs.rb, line 178
def list_tasks cluster: '', container_instance: ''
  ecs_client.list_tasks({
    cluster: cluster, 
    container_instance: container_instance, 
  }).task_arns
end