ufo 1.7.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/docs/_docs/conventions.md +4 -0
- data/docs/_docs/helpers.md +1 -1
- data/docs/_docs/install.md +11 -11
- data/docs/_docs/settings.md +64 -23
- data/docs/_docs/structure.md +7 -2
- data/docs/_docs/tutorial-ufo-init.md +22 -16
- data/docs/_docs/tutorial-ufo-ship.md +19 -18
- data/docs/_docs/tutorial-ufo-ships.md +5 -5
- data/docs/_docs/tutorial-ufo-tasks-build.md +50 -63
- data/docs/_docs/ufo-destroy.md +2 -2
- data/docs/_docs/ufo-env.md +54 -0
- data/docs/_docs/ufo-init.md +7 -3
- data/docs/_docs/ufo-scale.md +2 -2
- data/docs/_docs/ufo-ship.md +8 -8
- data/docs/_docs/ufo-ships.md +4 -4
- data/docs/_docs/ufo-tasks-build.md +42 -26
- data/docs/_docs/ufo-tasks-register.md +3 -3
- data/docs/_docs/variables.md +48 -0
- data/docs/_includes/commands.html +1 -0
- data/docs/_includes/subnav.html +2 -0
- data/docs/bin/web +4 -0
- data/docs/img/tutorials/ecs-console-ufo-ship.png +0 -0
- data/docs/quick-start.md +22 -4
- data/lib/starter_project/bin/deploy +1 -1
- data/lib/starter_project/ufo/settings.yml +14 -6
- data/lib/starter_project/ufo/task_definitions.rb +13 -24
- data/lib/starter_project/ufo/variables/base.rb +6 -0
- data/lib/starter_project/ufo/variables/prod.rb +7 -0
- data/lib/starter_project/ufo/variables/stag.rb +7 -0
- data/lib/ufo.rb +3 -0
- data/lib/ufo/default/settings.yml +25 -0
- data/lib/ufo/defaults.rb +11 -10
- data/lib/ufo/dsl/task_definition.rb +31 -0
- data/lib/ufo/env.rb +18 -0
- data/lib/ufo/settings.rb +18 -12
- data/lib/ufo/version.rb +1 -1
- metadata +10 -4
- data/docs/img/tutorials/ufo-init.png +0 -0
- data/docs/img/tutorials/ufo-tasks-build.png +0 -0
@@ -5,45 +5,34 @@
|
|
5
5
|
# * helper.full_image_name - Docker image name with the tag when docker image is built by ufo. This is defined in ufo/settings.yml. The helper.full_image_name includes the git sha tongueroo/hi:ufo-[sha].
|
6
6
|
# * helper.dockerfile_port - Expose port in the Dockerfile. Only supports one exposed port, the first one that is encountered.
|
7
7
|
#
|
8
|
-
# env_vars - is a helper method that generates the proper environment Array of Hashes
|
9
|
-
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
cpu: 128,
|
14
|
-
memory_reservation: 256,
|
15
|
-
environment: helper.env_file(".env")
|
16
|
-
# another example
|
17
|
-
# environment: helper.env_vars(%Q{
|
18
|
-
# RAILS_ENV=production
|
19
|
-
# SECRET_KEY_BASE=secret
|
20
|
-
# })
|
21
|
-
}
|
22
|
-
|
23
|
-
task_definition "<%= @app %>-web-<%= @env %>" do
|
8
|
+
# helper.env_vars - is a helper method that generates the proper environment Array of Hashes
|
9
|
+
#
|
10
|
+
# More info: http://ufoships.com/docs/helpers/
|
11
|
+
#
|
12
|
+
task_definition "<%= @app %>-web" do
|
24
13
|
source "main" # will use ufo/templates/main.json.erb
|
25
|
-
variables(
|
14
|
+
variables(
|
26
15
|
family: task_definition_name,
|
27
16
|
name: "web",
|
28
17
|
container_port: helper.dockerfile_port,
|
29
18
|
command: ["bin/web"]
|
30
|
-
)
|
19
|
+
)
|
31
20
|
end
|
32
21
|
|
33
|
-
task_definition "<%= @app %>-worker
|
22
|
+
task_definition "<%= @app %>-worker" do
|
34
23
|
source "main" # will use ufo/templates/main.json.erb
|
35
|
-
variables(
|
24
|
+
variables(
|
36
25
|
family: task_definition_name,
|
37
26
|
name: "worker",
|
38
27
|
command: ["bin/worker"]
|
39
|
-
)
|
28
|
+
)
|
40
29
|
end
|
41
30
|
|
42
|
-
task_definition "<%= @app %>-clock
|
31
|
+
task_definition "<%= @app %>-clock" do
|
43
32
|
source "main" # will use ufo/templates/main.json.erb
|
44
|
-
variables(
|
33
|
+
variables(
|
45
34
|
family: task_definition_name,
|
46
35
|
name: "clock",
|
47
36
|
command: ["bin/clock"]
|
48
|
-
)
|
37
|
+
)
|
49
38
|
end
|
data/lib/ufo.rb
CHANGED
@@ -5,6 +5,7 @@ require 'colorize'
|
|
5
5
|
require 'fileutils'
|
6
6
|
|
7
7
|
module Ufo
|
8
|
+
autoload :Env, 'ufo/env'
|
8
9
|
autoload :Defaults, 'ufo/defaults'
|
9
10
|
autoload :AwsServices, 'ufo/aws_services'
|
10
11
|
autoload :Command, 'ufo/command'
|
@@ -23,3 +24,5 @@ module Ufo
|
|
23
24
|
autoload :Ecr, 'ufo/ecr'
|
24
25
|
autoload :Tasks, 'ufo/tasks'
|
25
26
|
end
|
27
|
+
|
28
|
+
Ufo::Env.setup!
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# More info: http://ufoships.com/docs/ufo-settings/
|
2
|
+
#
|
3
|
+
# image:
|
4
|
+
# clean_keep: 30
|
5
|
+
# ecr_keep: 30
|
6
|
+
|
7
|
+
# aws_profile_ufo_env_map:
|
8
|
+
# default: prod
|
9
|
+
# # More examples:
|
10
|
+
# aws_profile1: prod
|
11
|
+
# aws_profile2: stag
|
12
|
+
# aws_profile3: dev
|
13
|
+
|
14
|
+
# ufo_env_cluster_map:
|
15
|
+
# default: prod
|
16
|
+
# # More examples:
|
17
|
+
# aws_profile1: prod
|
18
|
+
# aws_profile2: stag
|
19
|
+
# aws_profile3: dev
|
20
|
+
|
21
|
+
# defaults when an new ECS service is created by ufo ship
|
22
|
+
new_service:
|
23
|
+
maximum_percent: 200
|
24
|
+
minimum_healthy_percent: 100
|
25
|
+
desired_count: 1
|
data/lib/ufo/defaults.rb
CHANGED
@@ -8,18 +8,19 @@ module Ufo
|
|
8
8
|
#
|
9
9
|
# So @options must be set
|
10
10
|
module Defaults
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# service_cluster:
|
14
|
-
# default: prod-lo
|
15
|
-
# hi-web-prod: prod-hi
|
16
|
-
# hi-clock-prod: prod-lo
|
17
|
-
# hi-worker-prod: prod-lo
|
11
|
+
# The default cluster normally defaults to the UFO_ENV value.
|
12
|
+
# But it can be overriden by ufo/settings.yml ufo_env_cluster_map
|
18
13
|
#
|
19
|
-
#
|
14
|
+
# Covered: http://localhost:4000/docs/settings/
|
20
15
|
def default_cluster
|
21
|
-
|
22
|
-
|
16
|
+
#
|
17
|
+
|
18
|
+
map = settings.data["ufo_env_cluster_map"]
|
19
|
+
if map
|
20
|
+
ecs_cluster = map[UFO_ENV] || map["default"]
|
21
|
+
end
|
22
|
+
|
23
|
+
ecs_cluster || UFO_ENV
|
23
24
|
end
|
24
25
|
|
25
26
|
# These default service values only are used when a service is created by `ufo`
|
@@ -19,10 +19,41 @@ module Ufo
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def build
|
22
|
+
load_variables
|
22
23
|
instance_eval(&@block)
|
23
24
|
erb_result(source_path)
|
24
25
|
end
|
25
26
|
|
27
|
+
def load_variables
|
28
|
+
load_variables_file("base")
|
29
|
+
load_variables_file(UFO_ENV)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Load the variables defined in ufo/variables/* to make available in the
|
33
|
+
# template blocks in ufo/templates/*.
|
34
|
+
#
|
35
|
+
# Example:
|
36
|
+
#
|
37
|
+
# `ufo/variables/base.rb`:
|
38
|
+
# @name = "docker-process-name"
|
39
|
+
# @image = "docker-image-name"
|
40
|
+
#
|
41
|
+
# `ufo/templates/main.json.erb`:
|
42
|
+
# {
|
43
|
+
# "containerDefinitions": [
|
44
|
+
# {
|
45
|
+
# "name": "<%= @name %>",
|
46
|
+
# "image": "<%= @image %>",
|
47
|
+
# ....
|
48
|
+
# }
|
49
|
+
#
|
50
|
+
# NOTE: Only able to make instance variables avaialble with instance_eval
|
51
|
+
# Wasnt able to make local variables available.
|
52
|
+
def load_variables_file(filename)
|
53
|
+
path = "#{@project_root}/ufo/variables/#{filename}.rb"
|
54
|
+
instance_eval(IO.read(path)) if File.exist?(path)
|
55
|
+
end
|
56
|
+
|
26
57
|
def erb_result(path)
|
27
58
|
template = IO.read(path)
|
28
59
|
begin
|
data/lib/ufo/env.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class Ufo::Env
|
2
|
+
def self.setup!(project_root='.')
|
3
|
+
# Ensures that UFO_ENV is always set to a default value.
|
4
|
+
# For Ufo::Env.setup! we do not need to check if we're in a ufo project
|
5
|
+
# Because we could not be at first. For example when: ufo init is first called.
|
6
|
+
# Other uses of Ufo::Settings assumes that we should be in a ufo project.
|
7
|
+
settings = Ufo::Settings.new(project_root, false).data
|
8
|
+
map = settings['aws_profile_ufo_env_map']
|
9
|
+
|
10
|
+
if map
|
11
|
+
ufo_env = map[ENV['AWS_PROFILE']] || map['default']
|
12
|
+
end
|
13
|
+
ufo_env ||= 'prod' # defaults to prod
|
14
|
+
ufo_env = ENV['UFO_ENV'] if ENV['UFO_ENV'] # highest precedence
|
15
|
+
|
16
|
+
Kernel.const_set(:UFO_ENV, ufo_env)
|
17
|
+
end
|
18
|
+
end
|
data/lib/ufo/settings.rb
CHANGED
@@ -2,31 +2,37 @@ require 'yaml'
|
|
2
2
|
|
3
3
|
module Ufo
|
4
4
|
class Settings
|
5
|
-
def initialize(project_root='.')
|
5
|
+
def initialize(project_root='.', check_ufo_project=true)
|
6
6
|
@project_root = project_root
|
7
|
+
@check_ufo_project = check_ufo_project
|
7
8
|
end
|
8
9
|
|
9
10
|
# data contains the settings.yml config. The order or precedence for settings
|
10
11
|
# is the project ufo/settings.yml and then the ~/.ufo/settings.yml.
|
11
12
|
def data
|
12
|
-
return @
|
13
|
+
return @settings_yaml if @settings_yaml
|
13
14
|
|
14
|
-
if File.exist?(
|
15
|
-
|
16
|
-
@data = user_settings.merge(@data)
|
17
|
-
else
|
18
|
-
puts "ERROR: No settings file at #{settings_path}. Are you sure you are in a project with ufo setup?"
|
15
|
+
if @check_ufo_project && !File.exist?(project_settings_path)
|
16
|
+
puts "ERROR: No settings file at #{project_settings_path}. Are you sure you are in a project with ufo setup?"
|
19
17
|
puts "Please create a settings file via: ufo init"
|
20
18
|
exit 1
|
21
19
|
end
|
22
|
-
end
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
project = File.exist?(project_settings_path) ?
|
22
|
+
YAML.load_file(project_settings_path) :
|
23
|
+
{}
|
24
|
+
|
25
|
+
user_file = "#{ENV['HOME']}/.ufo/settings.yml"
|
26
|
+
user = File.exist?(user_file) ? YAML.load_file(user_file) : {}
|
27
|
+
|
28
|
+
default_file = File.expand_path("../default/settings.yml", __FILE__)
|
29
|
+
default = YAML.load_file(default_file)
|
30
|
+
|
31
|
+
@settings_yaml = default.merge(user.merge(project))
|
27
32
|
end
|
28
33
|
|
29
|
-
|
34
|
+
private
|
35
|
+
def project_settings_path
|
30
36
|
"#{@project_root}/ufo/settings.yml"
|
31
37
|
end
|
32
38
|
end
|
data/lib/ufo/version.rb
CHANGED
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -197,6 +197,7 @@ files:
|
|
197
197
|
- docs/_docs/ufo-docker-build.md
|
198
198
|
- docs/_docs/ufo-docker-clean.md
|
199
199
|
- docs/_docs/ufo-docker-name.md
|
200
|
+
- docs/_docs/ufo-env.md
|
200
201
|
- docs/_docs/ufo-help.md
|
201
202
|
- docs/_docs/ufo-init.md
|
202
203
|
- docs/_docs/ufo-scale.md
|
@@ -204,6 +205,7 @@ files:
|
|
204
205
|
- docs/_docs/ufo-ships.md
|
205
206
|
- docs/_docs/ufo-tasks-build.md
|
206
207
|
- docs/_docs/ufo-tasks-register.md
|
208
|
+
- docs/_docs/variables.md
|
207
209
|
- docs/_includes/about.html
|
208
210
|
- docs/_includes/commands.html
|
209
211
|
- docs/_includes/contact.html
|
@@ -234,6 +236,7 @@ files:
|
|
234
236
|
- docs/_layouts/default.html
|
235
237
|
- docs/_layouts/style.css
|
236
238
|
- docs/articles.md
|
239
|
+
- docs/bin/web
|
237
240
|
- docs/css/font-awesome/css/font-awesome.css
|
238
241
|
- docs/css/font-awesome/css/font-awesome.min.css
|
239
242
|
- docs/css/font-awesome/fonts/FontAwesome.otf
|
@@ -250,8 +253,6 @@ files:
|
|
250
253
|
- docs/img/tutorials/ecs-console-task-definitions.png
|
251
254
|
- docs/img/tutorials/ecs-console-ufo-ship.png
|
252
255
|
- docs/img/tutorials/ecs-console-ufo-ships.png
|
253
|
-
- docs/img/tutorials/ufo-init.png
|
254
|
-
- docs/img/tutorials/ufo-tasks-build.png
|
255
256
|
- docs/index.html
|
256
257
|
- docs/js/bootstrap.js
|
257
258
|
- docs/js/bootstrap.min.js
|
@@ -273,11 +274,15 @@ files:
|
|
273
274
|
- lib/starter_project/ufo/settings.yml
|
274
275
|
- lib/starter_project/ufo/task_definitions.rb
|
275
276
|
- lib/starter_project/ufo/templates/main.json.erb
|
277
|
+
- lib/starter_project/ufo/variables/base.rb
|
278
|
+
- lib/starter_project/ufo/variables/prod.rb
|
279
|
+
- lib/starter_project/ufo/variables/stag.rb
|
276
280
|
- lib/ufo.rb
|
277
281
|
- lib/ufo/aws_services.rb
|
278
282
|
- lib/ufo/cli.rb
|
279
283
|
- lib/ufo/cli/help.rb
|
280
284
|
- lib/ufo/command.rb
|
285
|
+
- lib/ufo/default/settings.yml
|
281
286
|
- lib/ufo/defaults.rb
|
282
287
|
- lib/ufo/destroy.rb
|
283
288
|
- lib/ufo/docker.rb
|
@@ -292,6 +297,7 @@ files:
|
|
292
297
|
- lib/ufo/ecr.rb
|
293
298
|
- lib/ufo/ecr/auth.rb
|
294
299
|
- lib/ufo/ecr/cleaner.rb
|
300
|
+
- lib/ufo/env.rb
|
295
301
|
- lib/ufo/init.rb
|
296
302
|
- lib/ufo/log_group.rb
|
297
303
|
- lib/ufo/scale.rb
|
Binary file
|
Binary file
|