class EcsDeployer::Task::Client

Public Class Methods

new(aws_options = {}) click to toggle source

@param [Hash] aws_options @return [EcsDeployer::Task::Client]

# File lib/ecs_deployer/task/client.rb, line 10
def initialize(aws_options = {})
  @ecs = Aws::ECS::Client.new(aws_options)
  @cipher = EcsDeployer::Util::Cipher.new(aws_options)
end

Public Instance Methods

register(path, replace_variables = {}) click to toggle source

@param [String] path @param [Hash] replace_variables @return [Aws::ECS::Types::TaskDefinition]

# File lib/ecs_deployer/task/client.rb, line 18
def register(path, replace_variables = {})
  raise IOError, "File does not exist. [#{path}]" unless File.exist?(path)

  register_hash(YAML.load(File.read(path)), replace_variables)
end
register_clone(cluster, service) click to toggle source

@param [String] cluster @param [String] service @return [String]

# File lib/ecs_deployer/task/client.rb, line 40
def register_clone(cluster, service)
  result = @ecs.describe_services(
    cluster: cluster,
    services: [service]
  )

  result[:services].each do |svc|
    next unless svc[:service_name] == service

    result = @ecs.describe_task_definition(
      task_definition: svc[:task_definition]
    )

    task_definition = result[:task_definition].to_hash

    delete_keys = %i[task_definition_arn revision status requires_attributes compatibilities]
    delete_keys.each do |delete_key|
      task_definition.delete(delete_key)
    end

    return register_hash(task_definition)
  end

  raise ServiceNotFoundError, "'#{service}' service is not found."
end
register_hash(task_definition, replace_variables = {}) click to toggle source

@param [Hash] task_definition @param [Hash] replace_variables @return [Aws::ECS::Types::TaskDefinition]

# File lib/ecs_deployer/task/client.rb, line 27
def register_hash(task_definition, replace_variables = {})
  task_definition = Oj.load(Oj.dump(task_definition), symbol_keys: true)

  replace_parameter_variables!(task_definition, replace_variables)
  decrypt_environment_variables!(task_definition)

  result = @ecs.register_task_definition(task_definition)
  result[:task_definition]
end

Private Instance Methods

decrypt_environment_variables!(task_definition) click to toggle source

@param [Hash] task_definition

# File lib/ecs_deployer/task/client.rb, line 83
def decrypt_environment_variables!(task_definition)
  raise TaskDefinitionValidateError, '\'container_definition\' is undefined.' unless task_definition.key?(:container_definitions)

  task_definition[:container_definitions].each do |container_definition|
    next unless container_definition.key?(:environment)

    container_definition[:environment].each do |environment|
      if environment[:value].class == String
        environment[:value] = @cipher.decrypt(environment[:value]) if @cipher.encrypt_value?(environment[:value])
      else
        # https://github.com/naomichi-y/ecs_deployer/issues/6
        environment[:value] = environment[:value].to_s
      end
    end
  end
end
replace_parameter_variables!(variables, replace_variables = {}) click to toggle source

@param [Array, Hash] variables @param [Hash] replace_variables

# File lib/ecs_deployer/task/client.rb, line 70
def replace_parameter_variables!(variables, replace_variables = {})
  variables.each do |variable|
    if variable.class == Array || variable.class == Hash
      replace_parameter_variables!(variable, replace_variables)
    elsif variable.class == String
      replace_variables.each do |replace_key, replace_value|
        variable.gsub!("{{#{replace_key}}}", replace_value)
      end
    end
  end
end