orchestration 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b5689d665c79d3bc7efb105043c7bae48b9ebc2b
4
- data.tar.gz: 795623463bfbe0e52935f35e00e950be6956691c
3
+ metadata.gz: f8ceff8fc2dd990496a6de51dddca57caa2e7000
4
+ data.tar.gz: dd0507265efb67c67ea5164cb2a7ff8b22675f0d
5
5
  SHA512:
6
- metadata.gz: 5505726c481848f3a3276e8be6b53b772b081657bc8401e0c97b0fb18254847f09b14efec8cc56bad53099cfbedddbc8948eef8344db6e04d64051e969bae4ae
7
- data.tar.gz: 37d7a6798a61fc5c6d6531d0b99b3eef0842672b99a404b91e02995b1bcbb90a53f663fd043231ca7b35eb134ccabeebb31d04c551fb7839997f95744c09f5fd
6
+ metadata.gz: 6f254e30b288a9d20aba6b55abd7fc01fd8973690bb31f430904f870a40088a6b0b7b4c5f7677c81c1cf02c6ed99c2fc8552a3a2ead211ed3bf877757dccea80
7
+ data.tar.gz: fc397b5f3341a7f6b2eda9e3231159c5fa5460a9feb3b5059472c5ea21de94796a3f55a4b7ad18571ef6a99eeb1ba3c3896efa7868024ccc577679777ae621fb
data/README.md CHANGED
@@ -18,7 +18,7 @@ Containers are automatically created for the following dependencies:
18
18
  Add this line to your application's Gemfile:
19
19
 
20
20
  ```ruby
21
- gem 'orchestration', '~> 0.2.1'
21
+ gem 'orchestration', '~> 0.2.2'
22
22
  ```
23
23
 
24
24
  And then build your bundle:
data/TODO CHANGED
@@ -1,2 +1,9 @@
1
1
  Be aware of yarn and include build steps in Dockerfile if present. Use dashboard
2
2
  front end as a reference.
3
+
4
+ Create a production docker-compose.yml and set:
5
+ - RAILS_ENV
6
+ - SECRET_KEY_BASE
7
+ - DATABASE_URL (from config/database.yml)
8
+
9
+ Provide volumes for databases and mount appropriate directories for adapter
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orchestration
4
+ module DockerCompose
5
+ class ApplicationService
6
+ PORT = 3000
7
+
8
+ def initialize(config)
9
+ @config = config
10
+ @env = config.environment
11
+ end
12
+
13
+ def definition
14
+ {
15
+ 'image' => image,
16
+ 'environment' => environment,
17
+ 'ports' => ["#{PORT}:#{PORT}"]
18
+ }
19
+ end
20
+
21
+ private
22
+
23
+ def image
24
+ "#{@env.settings.get('docker.username')}/#{@env.application_name}"
25
+ end
26
+
27
+ def environment
28
+ {
29
+ # `nil` values will inherit from environment or `.env` file.
30
+ 'RAILS_ENV' => nil,
31
+ 'SECRET_KEY_BASE' => nil,
32
+ 'DATABASE_URL' => database_url,
33
+ 'RAILS_LOG_TO_STDOUT' => '1'
34
+ }
35
+ end
36
+
37
+ def database_url
38
+ settings = @config.database_settings
39
+ return nil if settings.fetch('adapter') == 'sqlite3'
40
+
41
+ scheme = settings.fetch('scheme')
42
+ database = settings.fetch('database')
43
+ username = settings.fetch('username')
44
+ password = settings.fetch('password')
45
+ port = DatabaseService::PORT
46
+
47
+ "#{scheme}://#{username}:#{password}@database:#{port}/#{database}"
48
+ end
49
+ end
50
+ end
51
+ end
@@ -5,6 +5,7 @@ module Orchestration
5
5
  class Services
6
6
  def initialize(options = {})
7
7
  @configurations = {
8
+ 'application' => options.fetch(:application, nil),
8
9
  'database' => options.fetch(:database, nil),
9
10
  'mongo' => options.fetch(:mongo, nil),
10
11
  'rabbitmq' => options.fetch(:rabbitmq, nil)
@@ -27,6 +28,7 @@ module Orchestration
27
28
 
28
29
  def services_available
29
30
  [
31
+ { name: 'application', class: ApplicationService },
30
32
  { name: 'database', class: DatabaseService },
31
33
  { name: 'mongo', class: MongoService },
32
34
  { name: 'rabbitmq', class: RabbitMQService }
@@ -6,6 +6,8 @@ module Orchestration
6
6
  end
7
7
 
8
8
  require 'orchestration/docker_compose/services'
9
+
10
+ require 'orchestration/docker_compose/application_service'
9
11
  require 'orchestration/docker_compose/database_service'
10
12
  require 'orchestration/docker_compose/mongo_service'
11
13
  require 'orchestration/docker_compose/rabbitmq_service'
@@ -9,7 +9,7 @@ module Orchestration
9
9
 
10
10
  def initialize(*_args)
11
11
  super
12
- @env = Environment.new(environment: 'test')
12
+ @env = Environment.new
13
13
  @terminal ||= Terminal.new
14
14
  end
15
15
 
@@ -58,6 +58,7 @@ module Orchestration
58
58
  return if File.exist?(path)
59
59
 
60
60
  docker_compose = DockerCompose::Services.new(
61
+ application: configuration(:application),
61
62
  database: configuration(:database),
62
63
  mongo: configuration(:mongo),
63
64
  rabbitmq: configuration(:rabbitmq)
@@ -68,9 +69,8 @@ module Orchestration
68
69
  private
69
70
 
70
71
  def configuration(service)
71
- # REVIEW: At the moment we only handle test dependencies - it would be
72
- # nice to also handle development dependencies.
73
72
  {
73
+ application: Services::Application::Configuration,
74
74
  database: Services::Database::Configuration,
75
75
  mongo: Services::Mongo::Configuration,
76
76
  rabbitmq: Services::RabbitMQ::Configuration
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orchestration
4
+ module Services
5
+ module Application
6
+ class Configuration
7
+ def initialize(env)
8
+ @env = env
9
+ end
10
+
11
+ def environment
12
+ @env
13
+ end
14
+
15
+ def database_settings
16
+ Database::Configuration.new(@env).settings
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orchestration
4
+ module Services
5
+ module Application
6
+ end
7
+ end
8
+ end
9
+
10
+ require 'orchestration/services/application/configuration'
@@ -33,6 +33,7 @@ module Orchestration
33
33
  base = base_config(environments)
34
34
  @adapter = adapter_object(base['adapter'])
35
35
  @settings = base.merge(@adapter.credentials)
36
+ .merge('scheme' => scheme_name(base['adapter']))
36
37
  @settings.merge!(default_port) unless @settings.key?('port')
37
38
  end
38
39
 
@@ -84,15 +85,19 @@ module Orchestration
84
85
 
85
86
  {
86
87
  'host' => uri.hostname,
87
- 'adapter' => adapter_name_from_scheme(uri.scheme),
88
+ 'adapter' => adapter_name(uri.scheme),
88
89
  'port' => uri.port
89
90
  }.merge(query_params(uri))
90
91
  end
91
92
 
92
- def adapter_name_from_scheme(scheme)
93
- return 'mysql2' if scheme == 'mysql'
94
- return 'postgresql' if scheme == 'postgres'
95
- return 'sqlite3' if scheme == 'sqlite3'
93
+ def scheme_name(adapter_name)
94
+ adapter_mapping.invert.fetch(adapter_name)
95
+ end
96
+
97
+ def adapter_name(scheme)
98
+ name = adapter_mapping.fetch(scheme, nil)
99
+
100
+ return name unless name.nil?
96
101
 
97
102
  raise ArgumentError,
98
103
  I18n.t('orchestration.unknown_scheme', scheme: scheme)
@@ -108,6 +113,14 @@ module Orchestration
108
113
  raise DatabaseConfigurationError,
109
114
  I18n.t('orchestration.database.missing_default')
110
115
  end
116
+
117
+ def adapter_mapping
118
+ {
119
+ 'mysql' => 'mysql2',
120
+ 'postgres' => 'postgresql',
121
+ 'sqlite3' => 'sqlite3'
122
+ }
123
+ end
111
124
  end
112
125
  end
113
126
  end
@@ -5,6 +5,7 @@ module Orchestration
5
5
  end
6
6
  end
7
7
 
8
+ require 'orchestration/services/application'
8
9
  require 'orchestration/services/database'
9
10
  require 'orchestration/services/mongo'
10
11
  require 'orchestration/services/rabbitmq'
@@ -6,6 +6,6 @@ RUN apt-get update \
6
6
  && mkdir /application
7
7
  WORKDIR /application
8
8
  COPY Gemfile Gemfile.lock ./
9
- RUN bundle install --deployment --without development test
9
+ RUN bundle install --deployment
10
10
  ADD .build/context.tar.gz .
11
- CMD ["bundle", "exec", "rails", "server", "-p", "3000"]
11
+ CMD ["bundle", "exec", "rails", "server", "-p", "3000", "-b", "0.0.0.0"]
@@ -20,19 +20,26 @@ start:
20
20
  stop:
21
21
  docker-compose down
22
22
 
23
+ ### Database utility commands ###
24
+
25
+ migrate: wait-database
26
+ @echo "Running migrations..."
27
+ @docker-compose run application bundle exec rake db:migrate
28
+ @echo "Migrations complete."
29
+
23
30
  ### Service healthcheck commands ###
24
31
 
25
32
  wait: <%= wait_commands %>
26
33
  @echo "All Containers ready."
27
34
 
28
35
  wait-database:
29
- @RAILS_ENV=test bundle exec rake orchestration:db:wait
36
+ @bin/rake orchestration:db:wait
30
37
 
31
38
  wait-mongo:
32
- @RAILS_ENV=test bundle exec rake orchestration:mongo:wait
39
+ @bin/rake orchestration:mongo:wait
33
40
 
34
41
  wait-rabbitmq:
35
- @RAILS_ENV=test bundle exec rake orchestration:rabbitmq:wait
42
+ @bin/rake orchestration:rabbitmq:wait
36
43
 
37
44
  ### Docker build commands ###
38
45
 
@@ -45,9 +52,10 @@ docker-build:
45
52
  git archive --format tar.gz -o docker/.build/context.tar.gz master
46
53
  docker build --build-arg BUNDLE_GITHUB__COM \
47
54
  --build-arg BUNDLE_BITBUCKET__ORG \
48
- -t $(shell bundle exec rake orchestration:docker:username)/<%= app_id %>:$(shell git rev-parse --short --verify master) \
55
+ -t $(shell bin/rake orchestration:docker:username)/<%= app_id %> \
56
+ -t $(shell bin/rake orchestration:docker:username)/<%= app_id %>:$(shell git rev-parse --short --verify master) \
49
57
  ./docker/
50
58
 
51
59
  docker-push: VERSION := $(shell git rev-parse --short --verify master)
52
60
  docker-push:
53
- docker push $(shell bundle exec rake orchestration:docker:username)/<%= app_id %>:${VERSION}
61
+ docker push $(shell bin/rake orchestration:docker:username)/<%= app_id %>:${VERSION}
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orchestration
4
- VERSION = '0.2.1'
4
+ VERSION = '0.2.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orchestration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Farrell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-29 00:00:00.000000000 Z
11
+ date: 2018-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -247,6 +247,7 @@ files:
247
247
  - config/locales/en.yml
248
248
  - lib/orchestration.rb
249
249
  - lib/orchestration/docker_compose.rb
250
+ - lib/orchestration/docker_compose/application_service.rb
250
251
  - lib/orchestration/docker_compose/database_service.rb
251
252
  - lib/orchestration/docker_compose/mongo_service.rb
252
253
  - lib/orchestration/docker_compose/rabbitmq_service.rb
@@ -259,6 +260,8 @@ files:
259
260
  - lib/orchestration/railtie.rb
260
261
  - lib/orchestration/service_check.rb
261
262
  - lib/orchestration/services.rb
263
+ - lib/orchestration/services/application.rb
264
+ - lib/orchestration/services/application/configuration.rb
262
265
  - lib/orchestration/services/database.rb
263
266
  - lib/orchestration/services/database/adapters.rb
264
267
  - lib/orchestration/services/database/adapters/mysql2.rb