ufo 3.3.2 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +9 -7
- data/docs/README.md +1 -2
- data/docs/_docs/params.md +72 -0
- data/docs/_docs/settings.md +1 -6
- data/docs/_docs/tutorial-ufo-init.md +0 -5
- data/docs/_docs/ufo-env.md +1 -1
- data/docs/_includes/subnav.html +1 -0
- data/docs/_reference/ufo-deploy.md +9 -1
- data/docs/_reference/ufo-init.md +30 -9
- data/docs/_reference/ufo-task.md +11 -12
- data/docs/_reference/ufo-upgrade3_3_to_3_4.md +23 -0
- data/docs/reference.md +1 -0
- data/lib/template/.ufo/params.yml.tt +65 -0
- data/lib/template/.ufo/settings.yml.tt +0 -4
- data/lib/template/.ufo/templates/fargate.json.erb +37 -0
- data/lib/template/.ufo/variables/base.rb.tt +15 -0
- data/lib/template/.ufo/variables/development.rb +1 -1
- data/lib/ufo.rb +3 -1
- data/lib/ufo/cli.rb +7 -3
- data/lib/ufo/default/settings.yml +0 -4
- data/lib/ufo/destroy.rb +1 -1
- data/lib/ufo/docker/builder.rb +1 -5
- data/lib/ufo/docker/cleaner.rb +1 -2
- data/lib/ufo/docker/pusher.rb +1 -5
- data/lib/ufo/dsl.rb +1 -1
- data/lib/ufo/dsl/helper.rb +3 -8
- data/lib/ufo/dsl/task_definition.rb +7 -45
- data/lib/ufo/ecr/cleaner.rb +2 -2
- data/lib/ufo/help/deploy.md +9 -1
- data/lib/ufo/help/init.md +18 -0
- data/lib/ufo/help/task.md +6 -6
- data/lib/ufo/init.rb +9 -2
- data/lib/ufo/param.rb +24 -0
- data/lib/ufo/scale.rb +1 -1
- data/lib/ufo/sequence.rb +14 -0
- data/lib/ufo/ship.rb +6 -6
- data/lib/ufo/task.rb +9 -1
- data/lib/ufo/tasks/register.rb +21 -1
- data/lib/ufo/template_scope.rb +45 -0
- data/lib/ufo/upgrade/params.yml +47 -0
- data/lib/ufo/upgrade33_to_34.rb +32 -0
- data/lib/ufo/util.rb +25 -0
- data/lib/ufo/version.rb +1 -1
- data/spec/fixtures/settings.yml +0 -4
- data/spec/lib/setting_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -1
- data/ufo.gemspec +1 -0
- metadata +25 -4
- data/lib/template/.ufo/variables/base.rb +0 -6
- data/lib/ufo/default.rb +0 -40
data/lib/ufo/task.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Ufo
|
2
2
|
class Task
|
3
|
-
include
|
3
|
+
include Util
|
4
4
|
include AwsService
|
5
5
|
|
6
6
|
def initialize(task_definition, options)
|
@@ -12,15 +12,23 @@ module Ufo
|
|
12
12
|
def run
|
13
13
|
puts "Running task_definition: #{@task_definition}".colorize(:green) unless @options[:mute]
|
14
14
|
return if @options[:noop]
|
15
|
+
|
15
16
|
task_options = {
|
16
17
|
cluster: @cluster,
|
17
18
|
task_definition: @task_definition
|
18
19
|
}
|
20
|
+
task_options = task_options.merge(default_params[:run_task] || {})
|
21
|
+
|
19
22
|
if @options[:command]
|
20
23
|
task_options.merge!(overrides: overrides)
|
21
24
|
puts "Running task with container overrides."
|
22
25
|
puts "Command: #{@options[:command].join(' ')}"
|
23
26
|
end
|
27
|
+
|
28
|
+
unless @options[:mute]
|
29
|
+
puts "Running task with params:"
|
30
|
+
display_params(task_options)
|
31
|
+
end
|
24
32
|
resp = ecs.run_task(task_options)
|
25
33
|
puts "Task ARN: #{resp.tasks[0].task_arn}" unless @options[:mute]
|
26
34
|
end
|
data/lib/ufo/tasks/register.rb
CHANGED
@@ -3,6 +3,7 @@ require 'json'
|
|
3
3
|
|
4
4
|
module Ufo
|
5
5
|
class Tasks::Register
|
6
|
+
include Util
|
6
7
|
include AwsService
|
7
8
|
|
8
9
|
def self.register(task_name, options={})
|
@@ -28,11 +29,30 @@ module Ufo
|
|
28
29
|
if @options[:noop]
|
29
30
|
message = "NOOP: #{message}"
|
30
31
|
else
|
31
|
-
|
32
|
+
register_task_definition(data)
|
32
33
|
end
|
33
34
|
puts message unless @options[:mute]
|
34
35
|
end
|
35
36
|
|
37
|
+
def register_task_definition(data)
|
38
|
+
if ENV["UFO_SHOW_REGISTER_TASK_DEFINITION"]
|
39
|
+
puts "Registering task definition with:"
|
40
|
+
display_params(data)
|
41
|
+
end
|
42
|
+
|
43
|
+
ecs.register_task_definition(data)
|
44
|
+
rescue Aws::ECS::Errors::ClientException => e
|
45
|
+
if e.message =~ /No Fargate configuration exists for given values/
|
46
|
+
puts "ERROR: #{e.message}".colorize(:red)
|
47
|
+
puts "Configured values are: cpu #{data[:cpu]} memory #{data[:memory]}"
|
48
|
+
puts "Check that the cpu and memory values are a supported combination by Fargate."
|
49
|
+
puts "More info: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html"
|
50
|
+
exit 1
|
51
|
+
else
|
52
|
+
raise
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
36
56
|
# LogConfiguration requires a string with dashes as the keys
|
37
57
|
# https://docs.aws.amazon.com/sdkforruby/api/Aws/ECS/Client.html
|
38
58
|
def fix_log_configuation_option(data)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Ufo
|
2
|
+
class TemplateScope
|
3
|
+
attr_reader :helper
|
4
|
+
def initialize(helper=nil)
|
5
|
+
@helper = helper
|
6
|
+
load_variables_file("base")
|
7
|
+
load_variables_file(Ufo.env)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Load the variables defined in ufo/variables/* to make available in the
|
11
|
+
# template blocks in ufo/templates/*.
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
#
|
15
|
+
# `ufo/variables/base.rb`:
|
16
|
+
# @name = "docker-process-name"
|
17
|
+
# @image = "docker-image-name"
|
18
|
+
#
|
19
|
+
# `ufo/templates/main.json.erb`:
|
20
|
+
# {
|
21
|
+
# "containerDefinitions": [
|
22
|
+
# {
|
23
|
+
# "name": "<%= @name %>",
|
24
|
+
# "image": "<%= @image %>",
|
25
|
+
# ....
|
26
|
+
# }
|
27
|
+
#
|
28
|
+
# NOTE: Only able to make instance variables avaialble with instance_eval
|
29
|
+
# Wasnt able to make local variables available.
|
30
|
+
def load_variables_file(filename)
|
31
|
+
path = "#{Ufo.root}/.ufo/variables/#{filename}.rb"
|
32
|
+
instance_eval(IO.read(path)) if File.exist?(path)
|
33
|
+
end
|
34
|
+
|
35
|
+
def assign_instance_variables
|
36
|
+
# copy over the instance variables to make available in RenderMePretty's scope
|
37
|
+
hash = {}
|
38
|
+
instance_variables.each do |var|
|
39
|
+
key = var.to_s.sub('@','') # rid of the leading @
|
40
|
+
hash[key.to_sym] = instance_variable_get(var)
|
41
|
+
end
|
42
|
+
hash
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<%%
|
2
|
+
# replace with actual values:
|
3
|
+
@subnets = ["subnet-111","subnet-222"]
|
4
|
+
@security_groups = ["sg-111"]
|
5
|
+
%>
|
6
|
+
# These params are passsed to the corresponding aws-sdk ecs client methods.
|
7
|
+
# AWS Docs example: https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ECS/Client.html#run_task-instance_method
|
8
|
+
#
|
9
|
+
# Comments left in as examples.
|
10
|
+
# Uncomment launch_type and network_configuration sections to enable fargate.
|
11
|
+
#
|
12
|
+
|
13
|
+
create_service:
|
14
|
+
deployment_configuration:
|
15
|
+
maximum_percent: 200
|
16
|
+
minimum_healthy_percent: 100
|
17
|
+
desired_count: 1
|
18
|
+
# launch_type: "FARGATE"
|
19
|
+
# network_configuration:
|
20
|
+
# awsvpc_configuration:
|
21
|
+
# subnets: <%%= @subnets.inspect %> # required
|
22
|
+
# security_groups: <%%= @security_groups.inspect %>
|
23
|
+
# assign_public_ip: "ENABLED" # accepts ENABLED, DISABLED
|
24
|
+
|
25
|
+
# update service is provide as an example below. Though it is probably better
|
26
|
+
# to not add any options to update_service if you are using the ECS console
|
27
|
+
# to update these settings often.
|
28
|
+
update_service:
|
29
|
+
# force_new_deployment: true
|
30
|
+
# deployment_configuration:
|
31
|
+
# maximum_percent: 200
|
32
|
+
# minimum_healthy_percent: 100
|
33
|
+
# desired_count: 1
|
34
|
+
# launch_type: "FARGATE"
|
35
|
+
# network_configuration:
|
36
|
+
# awsvpc_configuration:
|
37
|
+
# subnets: <%%= @subnets.inspect %> # required
|
38
|
+
# security_groups: <%%= @security_groups.inspect %>
|
39
|
+
# assign_public_ip: "ENABLED" # accepts ENABLED, DISABLED
|
40
|
+
|
41
|
+
run_task:
|
42
|
+
# launch_type: "FARGATE"
|
43
|
+
# network_configuration:
|
44
|
+
# awsvpc_configuration:
|
45
|
+
# subnets: <%%= @subnets.inspect %> # required
|
46
|
+
# security_groups: <%%= @security_groups.inspect %>
|
47
|
+
# assign_public_ip: "ENABLED" # accepts ENABLED, DISABLED
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Ufo
|
5
|
+
class Upgrade33_to_34
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
if File.exist?("#{Ufo.root}/.ufo/params.yml")
|
12
|
+
puts "It looks like you already have a .ufo/params.yml project. This is the new project structure so exiting without updating anything."
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
create_params_yaml
|
17
|
+
warn_about_removing_new_service_from_settings
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_params_yaml
|
21
|
+
src = File.expand_path("./upgrade/params.yml", File.dirname(__FILE__))
|
22
|
+
dest = "#{Ufo.root}/.ufo/params.yml"
|
23
|
+
FileUtils.cp(src, dest)
|
24
|
+
puts "File .ufo/params.yml created.".colorize(:green)
|
25
|
+
puts "Please check it out and adjust it to your needs."
|
26
|
+
end
|
27
|
+
|
28
|
+
def warn_about_removing_new_service_from_settings
|
29
|
+
puts "WARN: The new_service option is not longer a part of the .ufo/settings.yml. Please remove it. It is now a part of the .ufo/params.yml file."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/ufo/util.rb
CHANGED
@@ -1,5 +1,26 @@
|
|
1
|
+
require 'active_support/core_ext/hash'
|
2
|
+
|
1
3
|
module Ufo
|
2
4
|
module Util
|
5
|
+
# The default cluster normally defaults to the Ufo.env value.
|
6
|
+
# But it can be overriden by ufo/settings.yml cluster
|
7
|
+
#
|
8
|
+
# More info: http://ufoships.com/docs/settings/
|
9
|
+
def default_cluster
|
10
|
+
settings["cluster"] || Ufo.env
|
11
|
+
end
|
12
|
+
|
13
|
+
# Keys are strings for simplicity.
|
14
|
+
def settings
|
15
|
+
@settings ||= Setting.new.data
|
16
|
+
end
|
17
|
+
|
18
|
+
# Naming it default_params because params is too commonly used in ufo.
|
19
|
+
# Param keys must be symbols for the aws-sdk calls.
|
20
|
+
def default_params
|
21
|
+
@default_params ||= Param.new.data.deep_symbolize_keys
|
22
|
+
end
|
23
|
+
|
3
24
|
def execute(command, local_options={})
|
4
25
|
if @options[:noop] && !local_options[:live]
|
5
26
|
say "NOOP: #{command}"
|
@@ -24,5 +45,9 @@ module Ufo
|
|
24
45
|
"#{minutes.to_i}m #{seconds.to_i}s"
|
25
46
|
end
|
26
47
|
end
|
48
|
+
|
49
|
+
def display_params(options)
|
50
|
+
puts YAML.dump(options.deep_stringify_keys)
|
51
|
+
end
|
27
52
|
end
|
28
53
|
end
|
data/lib/ufo/version.rb
CHANGED
data/spec/fixtures/settings.yml
CHANGED
@@ -4,10 +4,6 @@ base:
|
|
4
4
|
# clean_keep: 30 # cleans up docker images on your docker server.
|
5
5
|
# ecr_keep: 30 # cleans up images on ECR and keeps this remaining amount. Defaults to keep all.
|
6
6
|
# defaults when an new ECS service is created by ufo ship
|
7
|
-
new_service:
|
8
|
-
maximum_percent: 200
|
9
|
-
minimum_healthy_percent: 100
|
10
|
-
desired_count: 1
|
11
7
|
|
12
8
|
development:
|
13
9
|
cluster: dev
|
data/spec/lib/setting_spec.rb
CHANGED
@@ -5,8 +5,8 @@ describe Ufo::Setting do
|
|
5
5
|
|
6
6
|
let(:setting) { Ufo::Setting.new }
|
7
7
|
|
8
|
-
it "includes
|
9
|
-
|
10
|
-
expect(
|
8
|
+
it "includes the cluster setting" do
|
9
|
+
cluster = setting.data["cluster"]
|
10
|
+
expect(cluster).to eq "dev"
|
11
11
|
end
|
12
12
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
ENV["TEST"] = "1"
|
2
|
-
# Ensures aws api never called. Fixture home
|
2
|
+
# Ensures aws api never called. Fixture home does not contain ~/.aws/credentials
|
3
3
|
ENV['HOME'] = "spec/fixtures/home"
|
4
4
|
|
5
5
|
# CodeClimate test coverage: https://docs.codeclimate.com/docs/configuring-test-coverage
|
data/ufo.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency "aws-sdk-elasticloadbalancingv2"
|
26
26
|
spec.add_dependency "colorize"
|
27
27
|
spec.add_dependency "deep_merge"
|
28
|
+
spec.add_dependency "memoist"
|
28
29
|
spec.add_dependency "plissken"
|
29
30
|
spec.add_dependency "render_me_pretty"
|
30
31
|
spec.add_dependency "thor"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ufo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-cloudwatchlogs
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: memoist
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: plissken
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,6 +268,7 @@ files:
|
|
254
268
|
- docs/_docs/install.md
|
255
269
|
- docs/_docs/migrations.md
|
256
270
|
- docs/_docs/next-steps.md
|
271
|
+
- docs/_docs/params.md
|
257
272
|
- docs/_docs/run-in-pieces.md
|
258
273
|
- docs/_docs/settings.md
|
259
274
|
- docs/_docs/single-task.md
|
@@ -319,6 +334,7 @@ files:
|
|
319
334
|
- docs/_reference/ufo-tasks-register.md
|
320
335
|
- docs/_reference/ufo-tasks.md
|
321
336
|
- docs/_reference/ufo-upgrade3.md
|
337
|
+
- docs/_reference/ufo-upgrade3_3_to_3_4.md
|
322
338
|
- docs/_reference/ufo-version.md
|
323
339
|
- docs/articles.md
|
324
340
|
- docs/bin/web
|
@@ -356,10 +372,12 @@ files:
|
|
356
372
|
- docs/style.css
|
357
373
|
- exe/ufo
|
358
374
|
- lib/template/.env
|
375
|
+
- lib/template/.ufo/params.yml.tt
|
359
376
|
- lib/template/.ufo/settings.yml.tt
|
360
377
|
- lib/template/.ufo/task_definitions.rb.tt
|
378
|
+
- lib/template/.ufo/templates/fargate.json.erb
|
361
379
|
- lib/template/.ufo/templates/main.json.erb
|
362
|
-
- lib/template/.ufo/variables/base.rb
|
380
|
+
- lib/template/.ufo/variables/base.rb.tt
|
363
381
|
- lib/template/.ufo/variables/development.rb
|
364
382
|
- lib/template/.ufo/variables/production.rb
|
365
383
|
- lib/template/Dockerfile
|
@@ -372,7 +390,6 @@ files:
|
|
372
390
|
- lib/ufo/completer/script.rb
|
373
391
|
- lib/ufo/completer/script.sh
|
374
392
|
- lib/ufo/core.rb
|
375
|
-
- lib/ufo/default.rb
|
376
393
|
- lib/ufo/default/settings.yml
|
377
394
|
- lib/ufo/default/templates/main.json.erb
|
378
395
|
- lib/ufo/deploy.rb
|
@@ -415,6 +432,7 @@ files:
|
|
415
432
|
- lib/ufo/help/tasks/register.md
|
416
433
|
- lib/ufo/init.rb
|
417
434
|
- lib/ufo/log_group.rb
|
435
|
+
- lib/ufo/param.rb
|
418
436
|
- lib/ufo/scale.rb
|
419
437
|
- lib/ufo/sequence.rb
|
420
438
|
- lib/ufo/setting.rb
|
@@ -423,7 +441,10 @@ files:
|
|
423
441
|
- lib/ufo/tasks.rb
|
424
442
|
- lib/ufo/tasks/builder.rb
|
425
443
|
- lib/ufo/tasks/register.rb
|
444
|
+
- lib/ufo/template_scope.rb
|
445
|
+
- lib/ufo/upgrade/params.yml
|
426
446
|
- lib/ufo/upgrade3.rb
|
447
|
+
- lib/ufo/upgrade33_to_34.rb
|
427
448
|
- lib/ufo/util.rb
|
428
449
|
- lib/ufo/version.rb
|
429
450
|
- spec/fixtures/home_existing/.aws/config
|
data/lib/ufo/default.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
module Ufo
|
2
|
-
# To include this module must have this in initialize:
|
3
|
-
#
|
4
|
-
# def initialize(optiions, ...)
|
5
|
-
# @options = options
|
6
|
-
# ...
|
7
|
-
# end
|
8
|
-
#
|
9
|
-
# So @options must be set
|
10
|
-
module Default
|
11
|
-
# The default cluster normally defaults to the Ufo.env value.
|
12
|
-
# But it can be overriden by ufo/settings.yml cluster
|
13
|
-
#
|
14
|
-
# More info: http://ufoships.com/docs/settings/
|
15
|
-
def default_cluster
|
16
|
-
setting.data["cluster"] || Ufo.env
|
17
|
-
end
|
18
|
-
|
19
|
-
# These default service values only are used when a service is created by `ufo`
|
20
|
-
def default_maximum_percent
|
21
|
-
Integer(new_service_setting["maximum_percent"] || 200)
|
22
|
-
end
|
23
|
-
|
24
|
-
def default_minimum_healthy_percent
|
25
|
-
Integer(new_service_setting["minimum_healthy_percent"] || 100)
|
26
|
-
end
|
27
|
-
|
28
|
-
def default_desired_count
|
29
|
-
Integer(new_service_setting["desired_count"] || 1)
|
30
|
-
end
|
31
|
-
|
32
|
-
def new_service_setting
|
33
|
-
setting.data["new_service"] || {}
|
34
|
-
end
|
35
|
-
|
36
|
-
def setting
|
37
|
-
@setting ||= Setting.new
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|