docker-stack 0.1.1 → 0.2.1
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/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +2 -0
- data/Gemfile +2 -0
- data/Rakefile +2 -0
- data/bin/console +1 -0
- data/config/stack.yml +15 -0
- data/docker-stack.gemspec +2 -0
- data/lib/docker/stack.rb +14 -0
- data/lib/docker/stack/container.rb +2 -0
- data/lib/docker/stack/controller.rb +11 -13
- data/lib/docker/stack/localstack/endpoint_stub.rb +58 -0
- data/lib/docker/stack/rake_task.rb +2 -0
- data/lib/docker/stack/version.rb +3 -1
- data/lib/generators/docker/stack/install_generator.rb +2 -0
- data/lib/generators/docker/stack/service.rb +4 -5
- data/lib/generators/docker/stack/service/fedora_generator.rb +2 -0
- data/lib/generators/docker/stack/service/localstack_generator.rb +23 -0
- data/lib/generators/docker/stack/service/postgres_generator.rb +2 -0
- data/lib/generators/docker/stack/service/redis_generator.rb +2 -0
- data/lib/generators/docker/stack/service/solr_generator.rb +2 -0
- data/lib/generators/docker/stack/templates/config/database.yml +1 -2
- data/lib/generators/docker/stack/templates/config/fedora.yml +2 -2
- data/lib/generators/docker/stack/templates/config/initializers/localstack_stub.rb +5 -0
- data/lib/generators/docker/stack/templates/config/redis.yml +2 -2
- data/lib/generators/docker/stack/templates/config/solr.yml +2 -2
- data/lib/generators/docker/stack/templates/docker.rake +3 -1
- data/lib/generators/docker/stack/templates/services/fedora.yml.erb +1 -1
- data/lib/generators/docker/stack/templates/services/localstack.yml.erb +17 -0
- data/lib/generators/docker/stack/templates/services/postgres.yml.erb +1 -1
- data/lib/generators/docker/stack/templates/services/redis.yml.erb +1 -1
- data/lib/generators/docker/stack/templates/services/solr.yml.erb +1 -1
- data/lib/generators/docker/stack/util.rb +3 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 459b321cbce7417b7e02f01e338162fabf1a1d9109757feff3d6675821ab17d4
|
4
|
+
data.tar.gz: 15e5832ed64387b472f60e5514171c64d7349daec651423feab004de11287c57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04f40264d833ecfd68f76600b950c814a2c6b4f9e18e07833e5ed14b3226c6e23c155a442dfe08c7cdd33d32e2940c24e039305c7d214e0b603b9dce68a36dc9
|
7
|
+
data.tar.gz: 8a183d19433fae5718292935d0c57140424aefb15a5e4bf6ec1cd34ad7a9b10a92aae6f955a1a0fb795d73fe2b1713b57f0997aec26f50e9e1b46fcb56487eb2
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -13,10 +13,12 @@ Style/Documentation:
|
|
13
13
|
- 'lib/docker/stack.rb'
|
14
14
|
- 'lib/docker/stack/container.rb'
|
15
15
|
- 'lib/docker/stack/controller.rb'
|
16
|
+
- 'lib/docker/stack/localstack/endpoint_stub.rb'
|
16
17
|
- 'lib/generators/docker/stack/util.rb'
|
17
18
|
- 'lib/generators/docker/stack/service.rb'
|
18
19
|
- 'lib/generators/docker/stack/install_generator.rb'
|
19
20
|
- 'lib/generators/docker/stack/service/fedora_generator.rb'
|
21
|
+
- 'lib/generators/docker/stack/service/localstack_generator.rb'
|
20
22
|
- 'lib/generators/docker/stack/service/postgres_generator.rb'
|
21
23
|
- 'lib/generators/docker/stack/service/redis_generator.rb'
|
22
24
|
- 'lib/generators/docker/stack/service/solr_generator.rb'
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/config/stack.yml
ADDED
data/docker-stack.gemspec
CHANGED
data/lib/docker/stack.rb
CHANGED
@@ -1,8 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'docker/stack/container'
|
2
4
|
require 'docker/stack/controller'
|
3
5
|
require 'docker/stack/version'
|
4
6
|
|
5
7
|
module Docker
|
6
8
|
module Stack
|
9
|
+
def self.port_for(service, environment = Rails.env)
|
10
|
+
port_map[service.to_s][environment.to_s]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.port_map
|
14
|
+
return @port_map unless @port_map.nil?
|
15
|
+
config_file = [
|
16
|
+
Rails.root&.join('config', 'stack.yml'),
|
17
|
+
File.expand_path('../../config/stack.yml', __dir__)
|
18
|
+
].find { |f| File.exist?(f.to_s) }
|
19
|
+
@port_map = YAML.safe_load(File.read(config_file))
|
20
|
+
end
|
7
21
|
end
|
8
22
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'docker/compose'
|
2
4
|
require 'docker-api'
|
3
5
|
|
@@ -23,13 +25,11 @@ module Docker
|
|
23
25
|
down(cleanup: true)
|
24
26
|
images = config['services'].values.map { |conf| conf['image'] }
|
25
27
|
images.each do |image_name|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
yield %{[{"Skipped":"#{image_name} (image not present)"}]}
|
32
|
-
end
|
28
|
+
image = ::Docker::Image.get(image_name)
|
29
|
+
result = image.remove(prune: true)
|
30
|
+
yield result if block_given?
|
31
|
+
rescue ::Docker::Error::NotFoundError
|
32
|
+
yield %{[{"Skipped":"#{image_name} (image not present)"}]}
|
33
33
|
end
|
34
34
|
::Docker::Image.prune
|
35
35
|
end
|
@@ -37,12 +37,10 @@ module Docker
|
|
37
37
|
def status
|
38
38
|
containers = dc.ps.map(&:id)
|
39
39
|
containers.map do |c|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
{ id: c, service: 'unknown', status: 'unknown', started: 'unknown', running: 'unknown' }
|
45
|
-
end
|
40
|
+
container = Container.new(c)
|
41
|
+
container.to_h
|
42
|
+
rescue StandardError
|
43
|
+
{ id: c, service: 'unknown', status: 'unknown', started: 'unknown', running: 'unknown' }
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aws-sdk'
|
4
|
+
|
5
|
+
module Docker
|
6
|
+
module Stack
|
7
|
+
module Localstack
|
8
|
+
module EndpointStub
|
9
|
+
class Plugin < Seahorse::Client::Plugin
|
10
|
+
PORT_MAP = {
|
11
|
+
'Aws::APIGateway' => 4567,
|
12
|
+
'Aws::CloudFormation' => 4581,
|
13
|
+
'Aws::CloudWatch' => 4582,
|
14
|
+
'Aws::DynamoDB' => 4569,
|
15
|
+
'Aws::DynamoDBStreams' => 4570,
|
16
|
+
'Aws::Elasticsearch' => 4571,
|
17
|
+
'Aws::ElasticsearchService' => 4578,
|
18
|
+
'Aws::Firehose' => 4573,
|
19
|
+
'Aws::Kinesis' => 4568,
|
20
|
+
'Aws::Lambda' => 4574,
|
21
|
+
'Aws::Redshift' => 4577,
|
22
|
+
'Aws::Route53' => 4580,
|
23
|
+
'Aws::S3' => 4572,
|
24
|
+
'Aws::SES' => 4579,
|
25
|
+
'Aws::SNS' => 4575,
|
26
|
+
'Aws::SQS' => 4576,
|
27
|
+
'Aws::SSM' => 4583
|
28
|
+
}.freeze
|
29
|
+
|
30
|
+
def after_initialize(client)
|
31
|
+
client.config.endpoint = endpoint_for(client) || client.config.endpoint
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def endpoint_for(client)
|
37
|
+
base_port = PORT_MAP[client.class.parent_name]
|
38
|
+
return nil if base_port.nil?
|
39
|
+
base_url = 'http://localhost'
|
40
|
+
offset = Docker::Stack.port_for(:localstack)
|
41
|
+
base_uri = URI.parse(base_url)
|
42
|
+
base_uri.port = base_port + offset
|
43
|
+
base_uri.to_s
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.stub_endpoints!
|
48
|
+
Aws.config.update(
|
49
|
+
region: 'us-east-1',
|
50
|
+
credentials: Aws::Credentials.new('localstack-key', 'localstack-secret')
|
51
|
+
)
|
52
|
+
Seahorse::Client::Base.add_plugin(Plugin)
|
53
|
+
Aws::S3::Plugins::BucketDns.options.find { |opt| opt.name == :force_path_style }.default = true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/docker/stack/version.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'docker/stack'
|
1
4
|
require 'generators/docker/stack/util'
|
2
5
|
require 'active_support/core_ext/hash/deep_merge'
|
3
6
|
require 'ostruct'
|
@@ -32,16 +35,12 @@ module Docker
|
|
32
35
|
|
33
36
|
def service_from_template(service)
|
34
37
|
source = File.expand_path(find_in_source_paths("services/#{service}.yml.erb"))
|
35
|
-
context = OpenStruct.new(env: @env,
|
38
|
+
context = OpenStruct.new(env: @env, port: Docker::Stack.port_for(service)).instance_eval { binding }
|
36
39
|
yaml = Thor::Actions::CapturableERB.new(::File.binread(source), nil, '-', '@output_buffer').tap do |erb|
|
37
40
|
erb.filename = source
|
38
41
|
end.result(context)
|
39
42
|
YAML.safe_load(yaml)
|
40
43
|
end
|
41
|
-
|
42
|
-
def port_offset
|
43
|
-
{ 'development' => 0, 'test' => 2 }[@env] || 0
|
44
|
-
end
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'generators/docker/stack/service'
|
4
|
+
|
5
|
+
module Docker
|
6
|
+
module Stack
|
7
|
+
module Service
|
8
|
+
class LocalstackGenerator < Rails::Generators::Base
|
9
|
+
include Docker::Stack::Service
|
10
|
+
|
11
|
+
desc %(This generator makes the following changes to your application:
|
12
|
+
1. Adds a localstack service configuration to the docker-compose.yml files.
|
13
|
+
2. Creates a config/initializers/localstack_stub.rb file pointing to the new service.
|
14
|
+
)
|
15
|
+
|
16
|
+
def install_service
|
17
|
+
copy_file 'config/initializers/localstack_stub.rb', 'config/initializers/localstack_stub.rb'
|
18
|
+
gem 'aws-sdk', '~> 3.0'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
default: &default
|
2
2
|
adapter: postgresql
|
3
3
|
host: localhost
|
4
|
+
port: <%= Docker::Stack.port_for(:postgres) %>
|
4
5
|
encoding: unicode
|
5
6
|
pool: 5
|
6
7
|
username: docker
|
@@ -8,12 +9,10 @@ default: &default
|
|
8
9
|
|
9
10
|
development:
|
10
11
|
<<: *default
|
11
|
-
port: 5433
|
12
12
|
database: docker_dev
|
13
13
|
|
14
14
|
test:
|
15
15
|
<<: *default
|
16
|
-
port: <%= Rails.env.development? ? 5433 : 5435 %>
|
17
16
|
database: docker_test
|
18
17
|
|
19
18
|
production:
|
@@ -1,12 +1,12 @@
|
|
1
1
|
development:
|
2
2
|
user: fedoraAdmin
|
3
3
|
password: fedoraAdmin
|
4
|
-
url: http://127.0.0.1:<%= ENV['FCREPO_DEVELOPMENT_PORT'] ||
|
4
|
+
url: http://127.0.0.1:<%= ENV['FCREPO_DEVELOPMENT_PORT'] || Docker::Stack::port_for(:fedora) %>/rest
|
5
5
|
base_path: /dev
|
6
6
|
test:
|
7
7
|
user: fedoraAdmin
|
8
8
|
password: fedoraAdmin
|
9
|
-
url: http://127.0.0.1:<%= ENV['FCREPO_TEST_PORT'] ||
|
9
|
+
url: http://127.0.0.1:<%= ENV['FCREPO_TEST_PORT'] || Docker::Stack::port_for(:fedora) %>/rest
|
10
10
|
base_path: /test
|
11
11
|
production:
|
12
12
|
user: fedoraAdmin
|
@@ -1,9 +1,9 @@
|
|
1
1
|
development:
|
2
2
|
host: localhost
|
3
|
-
port:
|
3
|
+
port: Docker::Stack.port_for(:redis)
|
4
4
|
test:
|
5
5
|
host: localhost
|
6
|
-
port:
|
6
|
+
port: Docker::Stack.port_for(:redis)
|
7
7
|
production:
|
8
8
|
host: <%= ENV['REDIS_HOST'] || 'localhost' %>
|
9
9
|
port: <%= ENV['REDIS_PORT'] || 6379 %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# This is a sample config file that points to a solr server for each environment
|
2
2
|
development:
|
3
|
-
url: http://127.0.0.1:<%= ENV['SOLR_TEST_PORT'] ||
|
3
|
+
url: http://127.0.0.1:<%= ENV['SOLR_TEST_PORT'] || Docker::Stack.port_for(:solr) %>/solr/development-core
|
4
4
|
test:
|
5
|
-
url: http://127.0.0.1:<%= ENV['SOLR_TEST_PORT'] ||
|
5
|
+
url: http://127.0.0.1:<%= ENV['SOLR_TEST_PORT'] || Docker::Stack.port_for(:solr) %>/solr/test-core
|
6
6
|
production:
|
7
7
|
url: http://127.0.0.1:8983/solr/donut
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'docker/stack/rake_task'
|
2
4
|
|
3
5
|
def get_named_task(task_name)
|
@@ -19,7 +21,7 @@ namespace :docker do
|
|
19
21
|
task = get_named_task(ENV['SPEC_TASK']) ||
|
20
22
|
get_named_task('spec') ||
|
21
23
|
get_named_task('rspec')
|
22
|
-
task
|
24
|
+
task&.invoke
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
volumes:
|
2
|
+
localstack:
|
3
|
+
services:
|
4
|
+
localstack:
|
5
|
+
image: localstack/localstack
|
6
|
+
ports:
|
7
|
+
- "<%= 4772 + port %>:4572"
|
8
|
+
volumes:
|
9
|
+
- localstack:/data
|
10
|
+
environment:
|
11
|
+
SERVICES: s3
|
12
|
+
DATA_DIR: /data
|
13
|
+
healthcheck:
|
14
|
+
test: ["CMD", "curl", "-f", "http://localhost:4572/"]
|
15
|
+
interval: 30s
|
16
|
+
timeout: 5s
|
17
|
+
retries: 3
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-stack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Klein
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docker-api
|
@@ -210,24 +210,29 @@ files:
|
|
210
210
|
- Rakefile
|
211
211
|
- bin/console
|
212
212
|
- bin/setup
|
213
|
+
- config/stack.yml
|
213
214
|
- docker-stack.gemspec
|
214
215
|
- lib/docker/stack.rb
|
215
216
|
- lib/docker/stack/container.rb
|
216
217
|
- lib/docker/stack/controller.rb
|
218
|
+
- lib/docker/stack/localstack/endpoint_stub.rb
|
217
219
|
- lib/docker/stack/rake_task.rb
|
218
220
|
- lib/docker/stack/version.rb
|
219
221
|
- lib/generators/docker/stack/install_generator.rb
|
220
222
|
- lib/generators/docker/stack/service.rb
|
221
223
|
- lib/generators/docker/stack/service/fedora_generator.rb
|
224
|
+
- lib/generators/docker/stack/service/localstack_generator.rb
|
222
225
|
- lib/generators/docker/stack/service/postgres_generator.rb
|
223
226
|
- lib/generators/docker/stack/service/redis_generator.rb
|
224
227
|
- lib/generators/docker/stack/service/solr_generator.rb
|
225
228
|
- lib/generators/docker/stack/templates/config/database.yml
|
226
229
|
- lib/generators/docker/stack/templates/config/fedora.yml
|
230
|
+
- lib/generators/docker/stack/templates/config/initializers/localstack_stub.rb
|
227
231
|
- lib/generators/docker/stack/templates/config/redis.yml
|
228
232
|
- lib/generators/docker/stack/templates/config/solr.yml
|
229
233
|
- lib/generators/docker/stack/templates/docker.rake
|
230
234
|
- lib/generators/docker/stack/templates/services/fedora.yml.erb
|
235
|
+
- lib/generators/docker/stack/templates/services/localstack.yml.erb
|
231
236
|
- lib/generators/docker/stack/templates/services/postgres.yml.erb
|
232
237
|
- lib/generators/docker/stack/templates/services/redis.yml.erb
|
233
238
|
- lib/generators/docker/stack/templates/services/solr.yml.erb
|