Class: Ufo::Tasks::Register
- Inherits:
-
Object
- Object
- Ufo::Tasks::Register
- Includes:
- AwsService, Util
- Defined in:
- lib/ufo/tasks/register.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(template_definition_path, options = {}) ⇒ Register
constructor
A new instance of Register.
-
#register ⇒ Object
aws ecs register-task-definition –cli-input-json file://.ufo/output/demo-web-prod.json.
- #register_task_definition(data) ⇒ Object
-
#rubyize_format(original_data) ⇒ Object
The ruby aws-sdk expects symbols for keys and AWS docs for the task definition uses json camelCase for the keys.
Methods included from AwsService
#cloudformation, #cloudwatchlogs, #ec2, #ecr, #ecs, #elb
Methods included from Util
#default_cluster, #display_params, #execute, #pretty_time, #settings, #task_definition_arns, #user_params
Constructor Details
#initialize(template_definition_path, options = {}) ⇒ Register
Returns a new instance of Register.
18 19 20 21 |
# File 'lib/ufo/tasks/register.rb', line 18 def initialize(template_definition_path, ={}) @template_definition_path = template_definition_path @options = end |
Class Method Details
.register(task_name, options = {}) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/ufo/tasks/register.rb', line 9 def self.register(task_name, ={}) Dir.glob("#{Ufo.root}/.ufo/output/*").each do |path| if task_name == :all or path.include?(task_name) task_register = Tasks::Register.new(path, ) task_register.register end end end |
Instance Method Details
#register ⇒ Object
aws ecs register-task-definition –cli-input-json file://.ufo/output/demo-web-prod.json
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/ufo/tasks/register.rb', line 24 def register data = JSON.parse(IO.read(@template_definition_path)) data = rubyize_format(data) = "#{data[:family]} task definition registered." if @options[:noop] = "NOOP: #{}" else register_task_definition(data) end unless @options[:mute] puts "Equivalent aws cli command:" file_path = "file://#{@template_definition_path.sub(/^\.\//,'')}" puts " aws ecs register-task-definition --cli-input-json #{file_path}".color(:green) puts end end |
#register_task_definition(data) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ufo/tasks/register.rb', line 43 def register_task_definition(data) if ENV["UFO_SHOW_REGISTER_TASK_DEFINITION"] puts "Registering task definition with:" display_params(data) end ecs.register_task_definition(data) rescue Aws::ECS::Errors::ClientException => e if e. =~ /No Fargate configuration exists for given values/ puts "ERROR: #{e.}".color(:red) puts "Configured values are: cpu #{data[:cpu]} memory #{data[:memory]}" puts "Check that the cpu and memory values are a supported combination by Fargate." puts "More info: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html" exit 1 else raise end end |
#rubyize_format(original_data) ⇒ Object
The ruby aws-sdk expects symbols for keys and AWS docs for the task definition uses json camelCase for the keys. This method transforms the keys to the expected ruby aws-sdk format.
One quirk is that the logConfiguration options casing should not be transformed.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/ufo/tasks/register.rb', line 68 def rubyize_format(original_data) data = original_data.to_snake_keys.deep_symbolize_keys definitions = data[:container_definitions] definitions.each_with_index do |definition, i| next unless definition[:log_configuration] || definition[:firelens_configuration] { log_configuration: 'logConfiguration', firelens_configuration: 'firelensConfiguration' }.each_pair do |key, value| next unless definition.dig(key, :options) # LogConfiguration and firelensConfiguration options do not get transformed and # keep their original structure: # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ECS/Types/ContainerDefinition.html original_definition = original_data["containerDefinitions"][i] definition[key][:options] = original_definition[value]["options"] end end data end |