Class: Putpaws::Provision::Resources::TaskDefinition

Inherits:
Base
  • Object
show all
Defined in:
lib/putpaws/provision/resources/task_definition.rb

Defined Under Namespace

Classes: TemplateContext

Instance Attribute Summary collapse

Attributes inherited from Base

#clients, #config, #state

Instance Method Summary collapse

Methods inherited from Base

#ensure!, #kind, #plan

Constructor Details

#initialize(entry:, **args) ⇒ TaskDefinition

Returns a new instance of TaskDefinition.



49
50
51
52
# File 'lib/putpaws/provision/resources/task_definition.rb', line 49

def initialize(entry:, **args)
  super(**args)
  @entry = entry
end

Instance Attribute Details

#entry ⇒ Object (readonly)

Returns the value of attribute entry.



48
49
50
# File 'lib/putpaws/provision/resources/task_definition.rb', line 48

def entry
  @entry
end

Instance Method Details

#changed?(_current) ⇒ Boolean

AWS-side normalization makes a field-by-field diff noisy, so compare against the digest of the params we registered last time.

Returns:

  • (Boolean)


89
90
91
# File 'lib/putpaws/provision/resources/task_definition.rb', line 89

def changed?(_current)
  state.resources[digest_key] != digest
end

#create! ⇒ Object



93
94
95
# File 'lib/putpaws/provision/resources/task_definition.rb', line 93

def create!
  register!
end

#current ⇒ Object



81
82
83
84
85
# File 'lib/putpaws/provision/resources/task_definition.rb', line 81

def current
  clients.ecs.describe_task_definition(task_definition: name).task_definition
rescue Aws::ECS::Errors::ClientException, Aws::ECS::Errors::ClientError
  nil
end

#desired_params ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/putpaws/provision/resources/task_definition.rb', line 62

def desired_params
  @desired_params ||= begin
    template = File.read(config.preset.template_path(entry[:template]))
    rendered = ERB.new(template, trim_mode: '-').result(TemplateContext.new(config).get_binding)
    params = Util.deep_underscore_keys(JSON.parse(rendered))
    params[:family] = name
    params[:tags] = [MANAGED_TAG]
    params
  end
end

#digest ⇒ Object



73
74
75
# File 'lib/putpaws/provision/resources/task_definition.rb', line 73

def digest
  Digest::SHA256.hexdigest(JSON.generate(desired_params))
end

#digest_key ⇒ Object



77
78
79
# File 'lib/putpaws/provision/resources/task_definition.rb', line 77

def digest_key
  :"taskdef_#{suffix}_digest"
end

#name ⇒ Object



58
59
60
# File 'lib/putpaws/provision/resources/task_definition.rb', line 58

def name
  config.task_definition_family(suffix)
end

#outputs(current) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/putpaws/provision/resources/task_definition.rb', line 111

def outputs(current)
  {
    :"taskdef_#{suffix}" => name,
    :"taskdef_#{suffix}_arn" => current.task_definition_arn,
    digest_key => digest,
  }
end

#register! ⇒ Object



101
102
103
104
105
106
107
108
109
# File 'lib/putpaws/provision/resources/task_definition.rb', line 101

def register!
  res = clients.ecs.register_task_definition(**desired_params)
  td = res.task_definition
  {
    :"taskdef_#{suffix}" => name,
    :"taskdef_#{suffix}_arn" => td.task_definition_arn,
    digest_key => digest,
  }
end

#suffix ⇒ Object



54
55
56
# File 'lib/putpaws/provision/resources/task_definition.rb', line 54

def suffix
  entry[:suffix]
end

#update!(_current) ⇒ Object



97
98
99
# File 'lib/putpaws/provision/resources/task_definition.rb', line 97

def update!(_current)
  register!
end