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.



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

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

Instance Attribute Details

#entryObject (readonly)

Returns the value of attribute entry.



46
47
48
# File 'lib/putpaws/provision/resources/task_definition.rb', line 46

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)


87
88
89
# File 'lib/putpaws/provision/resources/task_definition.rb', line 87

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

#create!Object



91
92
93
# File 'lib/putpaws/provision/resources/task_definition.rb', line 91

def create!
  register!
end

#currentObject



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

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

#desired_paramsObject



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

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

#digestObject



71
72
73
# File 'lib/putpaws/provision/resources/task_definition.rb', line 71

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

#digest_keyObject



75
76
77
# File 'lib/putpaws/provision/resources/task_definition.rb', line 75

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

#nameObject



56
57
58
# File 'lib/putpaws/provision/resources/task_definition.rb', line 56

def name
  config.task_definition_family(suffix)
end

#outputs(current) ⇒ Object



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

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

#register!Object



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

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

#suffixObject



52
53
54
# File 'lib/putpaws/provision/resources/task_definition.rb', line 52

def suffix
  entry[:suffix]
end

#update!(_current) ⇒ Object



95
96
97
# File 'lib/putpaws/provision/resources/task_definition.rb', line 95

def update!(_current)
  register!
end