dockercompose-generator 0.1.0 → 0.2.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/.travis.yml +14 -5
- data/README.md +9 -4
- data/docker-compose-generator.gemspec +1 -0
- data/lib/docker-compose/generator/service.rb +55 -49
- data/lib/docker-compose/generator/service/environment.rb +20 -0
- data/lib/docker-compose/generator/service/labels.rb +20 -0
- data/lib/docker-compose/generator/service/links.rb +40 -0
- data/lib/docker-compose/generator/service/net.rb +14 -0
- data/lib/docker-compose/generator/service/pid.rb +13 -0
- data/lib/docker-compose/generator/service/ports.rb +27 -0
- data/lib/docker-compose/generator/service/volumes.rb +30 -0
- data/lib/docker-compose/generator/version.rb +1 -1
- data/spec/docker-compose/generator/service_spec.rb +182 -30
- metadata +12 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce43c3684c9259b4c1272324a0867c8e374164a5
|
4
|
+
data.tar.gz: 88c6897c33bb37782a46fb94264bb6f415ffbbfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e760b9e7d2db5f11ef36f56633f07e8bc03654637b5d97576b57a637e451fb5dbd6a76a326df366779da077be30723be5eea9cda16597b81bc27771778c1545
|
7
|
+
data.tar.gz: 281853a06adff75a9df3869c844e06e298c19f16873f1eb33a68beaee563669ddb108772da000415092c1d5446159a8a988b09b34e4302df0befed72ae0d50b3
|
data/.travis.yml
CHANGED
@@ -1,10 +1,19 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
- 1.9.3
|
4
|
+
- 2.0.0
|
5
|
+
- 2.1.4
|
6
|
+
- 2.2.2
|
6
7
|
notifications:
|
7
8
|
email: false
|
8
9
|
addons:
|
9
|
-
|
10
|
-
|
10
|
+
code_climate:
|
11
|
+
repo_token: 668bb7c5d7f42d3e8dcb17598688bd650d21f6b600f54094f7da97d74c0b43ab
|
12
|
+
deploy:
|
13
|
+
provider: rubygems
|
14
|
+
api_key:
|
15
|
+
secure: UQmEbIJ3z2ZJ1WOuGPQEtIHeDEEhCxol3kdL7CNFDzYge9gU2jqWfVbgBgB2fmhlOCsREy7VHettGpPoPQ0chYtOIAZcoL/8HBjnkcab6ucllCI90NDjQ8wTja2WTAPJQ3f6MeY3bu9bHlI+Wwn8dmPYnGu0NbDva5YdVZmA0jD2f8vOWBLr2RSg7MmP+cvAUMyBf+eNH/IcYdP9mz1/fney37Dy7fUu0mUuLTqP8/gO9uc2wom9GkFcMHZyfnUQwQVun4raimJX7R9i/3zVxPxrL6/IJ9qQ1NxwRRDhN12gmkviJ7vW+zTbjCQc/fXghoaeivJWtMSR3sfYRPBTjSU6YbNZjD0uFLuyHHLwhBbTZyY9vxaYbY9RFtbg5Fmc0MA4xrRNFzi25wUMm3XDDfvMmV6XCRsWFxej/c95AlKzGxaps0uDjnEoETUnz5Dg+pX4WqV788rajDcBFv3Obc5WyDVnelIzoZQ6MCh51ZtDSw3t1t2Go1XaKmjZxLtp0/UmaB4N4qlfN5pMaiVg3lhwuPBWifDSMnyIEmWHLzobIJTlCyEdavDXwFjBBXF1gktHSc+MNvdr4eECGUaxa4T1jMEXQ5IF4POFUFxQlVdp0h0dWFvCHMLlLWNv3ZlMoBa7tV6yl/gOkHH+kyRsEmZZTBgIT9o/YcgTzgd5VO8=
|
16
|
+
gem: dockercompose-generator
|
17
|
+
on:
|
18
|
+
tags: true
|
19
|
+
repo: jwhitcraft/dockercompose-generator
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# DockerCompose::Generator
|
2
2
|
|
3
|
-
[](https://travis-ci.org/jwhitcraft/dockercompose-generator) [](https://coveralls.io/github/jwhitcraft/dockercompose-generator?branch=master) [](https://codeclimate.com/github/jwhitcraft/dockercompose-generator)
|
3
|
+
[](https://travis-ci.org/jwhitcraft/dockercompose-generator) [](https://coveralls.io/github/jwhitcraft/dockercompose-generator?branch=master) [](https://codeclimate.com/github/jwhitcraft/dockercompose-generator) [](http://badge.fury.io/rb/dockercompose-generator)
|
4
4
|
|
5
5
|
Generate a Docker-Compose Yaml file
|
6
6
|
|
@@ -9,7 +9,7 @@ Generate a Docker-Compose Yaml file
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
gem '
|
12
|
+
gem 'dockercompose-generator'
|
13
13
|
```
|
14
14
|
|
15
15
|
And then execute:
|
@@ -18,7 +18,7 @@ And then execute:
|
|
18
18
|
|
19
19
|
Or install it yourself as:
|
20
20
|
|
21
|
-
$ gem install
|
21
|
+
$ gem install dockercompose-generator
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
@@ -55,9 +55,14 @@ web:
|
|
55
55
|
- db:mysql
|
56
56
|
```
|
57
57
|
|
58
|
+
## TODO
|
59
|
+
|
60
|
+
- Support more options than `links`, `ports`, and `environment` variables
|
61
|
+
- Add an Importer to seed the services
|
62
|
+
|
58
63
|
## Contributing
|
59
64
|
|
60
|
-
1. Fork it ( https://github.com/jwhitcraft/
|
65
|
+
1. Fork it ( https://github.com/jwhitcraft/dockercompose-generator/fork )
|
61
66
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
62
67
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
63
68
|
4. Push to the branch (`git push origin my-new-feature`)
|
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
|
+
spec.required_ruby_version = '>= 1.9.3'
|
20
21
|
|
21
22
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
22
23
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -1,9 +1,32 @@
|
|
1
|
+
require 'docker-compose/generator/service/ports'
|
2
|
+
require 'docker-compose/generator/service/links'
|
3
|
+
require 'docker-compose/generator/service/environment'
|
4
|
+
require 'docker-compose/generator/service/labels'
|
5
|
+
require 'docker-compose/generator/service/net'
|
6
|
+
require 'docker-compose/generator/service/pid'
|
7
|
+
require 'docker-compose/generator/service/volumes'
|
8
|
+
|
1
9
|
module DockerCompose
|
2
10
|
module Generator
|
3
11
|
# Service Class
|
4
12
|
#
|
5
13
|
# Used to interact with services
|
6
14
|
class Service
|
15
|
+
# Handles Ports
|
16
|
+
include Ports
|
17
|
+
# Handles Links and External Links
|
18
|
+
include Links
|
19
|
+
# Handles Environment Variables
|
20
|
+
include Environment
|
21
|
+
# Handles Labels
|
22
|
+
include Labels
|
23
|
+
# Handles Net Setting
|
24
|
+
include Net
|
25
|
+
# Handles Pid Setting
|
26
|
+
include Pid
|
27
|
+
# Handles Volumes
|
28
|
+
include Volumes
|
29
|
+
|
7
30
|
attr_reader :name, :attrs
|
8
31
|
|
9
32
|
def initialize(name, image)
|
@@ -13,57 +36,40 @@ module DockerCompose
|
|
13
36
|
}
|
14
37
|
end
|
15
38
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
name = "#{name}:#{link_name}" unless link_name.nil?
|
31
|
-
|
32
|
-
add_to_array('links', name)
|
33
|
-
end
|
34
|
-
|
35
|
-
def drop_link(service, link_name = nil)
|
36
|
-
name = service.name
|
37
|
-
name = "#{name}:#{link_name}" unless link_name.nil?
|
38
|
-
|
39
|
-
drop_from_array('links', name)
|
40
|
-
end
|
41
|
-
|
42
|
-
def link?(service, link_name = nil)
|
43
|
-
name = service.name
|
44
|
-
name = "#{name}:#{link_name}" unless link_name.nil?
|
45
|
-
|
46
|
-
links = @attrs['links'] || []
|
47
|
-
links.include?(name)
|
39
|
+
# Variables that only allow one value
|
40
|
+
#
|
41
|
+
# Create the {method=} and {method?} methods dynamically
|
42
|
+
# since these only accept one value
|
43
|
+
[:build, :dockerfile, :command, :working_dir, :entrypoint, :user,
|
44
|
+
:hostname, :domainname, :mac_address, :mem_limit, :memswap_limit,
|
45
|
+
:privileged, :restart, :stdin_open, :tty, :cpu_shares, :cpuset,
|
46
|
+
:read_only, :volume_driver, :container_name].each do |method|
|
47
|
+
define_method "#{method}?" do
|
48
|
+
(@attrs["#{method}"])
|
49
|
+
end
|
50
|
+
define_method "#{method}=" do |value|
|
51
|
+
@attrs["#{method}"] = value
|
52
|
+
end
|
48
53
|
end
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
55
|
+
# Variables that are a list of single items
|
56
|
+
#
|
57
|
+
# Create the {add_method}, {drop_method} and {method?} dynamically
|
58
|
+
# since they accept a list of single objects
|
59
|
+
[:expose, :volumes_from, :dns, :extra_hosts, :dns_search, :cap_add,
|
60
|
+
:cap_drop, :env_file].each do |method|
|
61
|
+
define_method "#{method}?" do |item|
|
62
|
+
items = @attrs["#{method}"] || []
|
63
|
+
items.include?(item)
|
64
|
+
end
|
65
|
+
|
66
|
+
define_method "add_#{method}" do |item|
|
67
|
+
add_to_array("#{method}", item)
|
68
|
+
end
|
69
|
+
|
70
|
+
define_method "drop_#{method}" do |item|
|
71
|
+
drop_from_array("#{method}", item)
|
72
|
+
end
|
67
73
|
end
|
68
74
|
|
69
75
|
private
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module DockerCompose
|
2
|
+
module Generator
|
3
|
+
class Service
|
4
|
+
# Handles Environment Variables in the docker-compose file
|
5
|
+
module Environment
|
6
|
+
def add_environment(name, value)
|
7
|
+
add_to_object('environment', name.upcase, value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def drop_environment(name)
|
11
|
+
drop_from_object('environment', name.upcase)
|
12
|
+
end
|
13
|
+
|
14
|
+
def environment?(name)
|
15
|
+
(@attrs['environment'] && @attrs['environment'][name.upcase])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module DockerCompose
|
2
|
+
module Generator
|
3
|
+
class Service
|
4
|
+
# Handles Labels in the docker-compose file
|
5
|
+
module Labels
|
6
|
+
def add_label(name, value)
|
7
|
+
add_to_object('labels', name, value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def drop_label(name)
|
11
|
+
drop_from_object('labels', name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def label?(name)
|
15
|
+
(@attrs['labels'] && @attrs['labels'][name])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module DockerCompose
|
2
|
+
module Generator
|
3
|
+
class Service
|
4
|
+
# Handles Service Links in the docker-compose file
|
5
|
+
module Links
|
6
|
+
def add_link(service, link_name = nil)
|
7
|
+
add_to_array('links', link_name(service.name, link_name))
|
8
|
+
end
|
9
|
+
|
10
|
+
def drop_link(service, link_name = nil)
|
11
|
+
drop_from_array('links', link_name(service.name, link_name))
|
12
|
+
end
|
13
|
+
|
14
|
+
def link?(service, link_name = nil)
|
15
|
+
links = @attrs['links'] || []
|
16
|
+
links.include?(link_name(service.name, link_name))
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_external_link(service_name, link_name = nil)
|
20
|
+
add_to_array('external_links', link_name(service_name, link_name))
|
21
|
+
end
|
22
|
+
|
23
|
+
def drop_external_link(service_name, link_name = nil)
|
24
|
+
drop_from_array('external_links', link_name(service_name, link_name))
|
25
|
+
end
|
26
|
+
|
27
|
+
def external_link?(service_name, link_name = nil)
|
28
|
+
links = @attrs['external_links'] || []
|
29
|
+
links.include?(link_name(service_name, link_name))
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def link_name(name, link_name = nil)
|
35
|
+
(link_name) ? "#{name}:#{link_name}" : "#{name}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module DockerCompose
|
2
|
+
module Generator
|
3
|
+
class Service
|
4
|
+
# Handles Net Option in the docker-compose file
|
5
|
+
module Net
|
6
|
+
def net=(value)
|
7
|
+
return @attrs.delete('net') if value.nil?
|
8
|
+
valid_values = %w(bridge none host container:name container:id)
|
9
|
+
@attrs['net'] = value if valid_values.include?(value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module DockerCompose
|
2
|
+
module Generator
|
3
|
+
class Service
|
4
|
+
# Handles Ports in the docker-compose file
|
5
|
+
module Ports
|
6
|
+
def add_port(host, container = nil)
|
7
|
+
host = "#{host}:#{container}" if container
|
8
|
+
|
9
|
+
add_to_array('ports', "#{host}")
|
10
|
+
end
|
11
|
+
|
12
|
+
def drop_port(host, container)
|
13
|
+
host = "#{host}:#{container}" if container
|
14
|
+
|
15
|
+
drop_from_array('ports', "#{host}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def port?(host, container = nil)
|
19
|
+
host = "#{host}:#{container}" if container
|
20
|
+
|
21
|
+
ports = @attrs['ports'] || []
|
22
|
+
ports.include?("#{host}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module DockerCompose
|
2
|
+
module Generator
|
3
|
+
class Service
|
4
|
+
# Handles Volumes in the docker-compose file
|
5
|
+
module Volumes
|
6
|
+
def add_volume(host, container = nil, mode = nil)
|
7
|
+
add_to_array('volumes', volume_name(host, container, mode))
|
8
|
+
end
|
9
|
+
|
10
|
+
def drop_volume(host, container, mode = nil)
|
11
|
+
drop_from_array('volumes', volume_name(host, container, mode))
|
12
|
+
end
|
13
|
+
|
14
|
+
def volume?(host, container = nil, mode = nil)
|
15
|
+
volumes = @attrs['volumes'] || []
|
16
|
+
volumes.include?(volume_name(host, container, mode))
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def volume_name(host, container = nil, mode = nil)
|
22
|
+
volume = "#{host}:#{container}" if container
|
23
|
+
volume += ":#{mode}" if container && mode
|
24
|
+
|
25
|
+
volume
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,6 +2,58 @@ require 'helper.rb'
|
|
2
2
|
|
3
3
|
describe 'DockerCompose::Generator::Service' do
|
4
4
|
let(:service) { DockerCompose::Generator::Service.new('rspec_test', 'test_image') }
|
5
|
+
|
6
|
+
shared_examples_for 'an array list' do
|
7
|
+
let(:variable) { '' }
|
8
|
+
context "array_list" do
|
9
|
+
it 'sets the value' do
|
10
|
+
service.send("add_#{variable}", 'test')
|
11
|
+
expect(service.send("#{variable}?", 'test')).to be_truthy
|
12
|
+
end
|
13
|
+
it 'does not have a value' do
|
14
|
+
expect(service.send("#{variable}?", 'test')).to be_falsey
|
15
|
+
end
|
16
|
+
it 'will drop the value' do
|
17
|
+
service.send("add_#{variable}", 'test')
|
18
|
+
expect(service.send("#{variable}?", 'test')).to be_truthy
|
19
|
+
service.send("drop_#{variable}", 'test')
|
20
|
+
expect(service.send("#{variable}?", 'test')).to be_falsey
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
[:expose, :volumes_from, :dns, :extra_hosts, :dns_search, :cap_add, :cap_drop, :env_file].each do |method|
|
26
|
+
context "##{method}" do
|
27
|
+
it_behaves_like 'an array list' do
|
28
|
+
let(:variable) { "#{method}" }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
shared_examples_for 'a single value' do
|
34
|
+
let(:variable) { '' }
|
35
|
+
context 'single value' do
|
36
|
+
it 'sets the value' do
|
37
|
+
service.send("#{variable}=", 'test')
|
38
|
+
expect(service.send("#{variable}?")).to be_truthy
|
39
|
+
end
|
40
|
+
it 'does not have a value' do
|
41
|
+
expect(service.send("#{variable}?")).to be_falsey
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
[:build, :dockerfile, :command, :working_dir, :entrypoint, :user, :hostname, :domainname, :mac_address,
|
47
|
+
:mem_limit, :memswap_limit, :privileged, :restart, :stdin_open, :tty, :cpu_shares, :cpuset,
|
48
|
+
:read_only, :volume_driver, :container_name].each do |method|
|
49
|
+
context "##{method}" do
|
50
|
+
it_behaves_like 'a single value' do
|
51
|
+
let(:variable) { "#{method}" }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
5
57
|
context 'environment' do
|
6
58
|
it 'sets environment variable' do
|
7
59
|
service.add_environment('test_env', 'value')
|
@@ -13,33 +65,47 @@ describe 'DockerCompose::Generator::Service' do
|
|
13
65
|
end
|
14
66
|
|
15
67
|
it 'will drop environment variable' do
|
16
|
-
|
17
|
-
expect(service
|
68
|
+
service.add_environment('test_env', 'value')
|
69
|
+
expect(service).to be_environment('test_env')
|
70
|
+
service.drop_environment('test_env')
|
18
71
|
expect(service).not_to be_environment('test_env')
|
19
72
|
end
|
20
73
|
end
|
21
74
|
|
75
|
+
context 'labels' do
|
76
|
+
it 'sets labels variable' do
|
77
|
+
service.add_label('com.test.label', 'value')
|
78
|
+
expect(service).to be_label('com.test.label')
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'does not have labels variable' do
|
82
|
+
expect(service).not_to be_label('com.test.label')
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'will drop labels variable' do
|
86
|
+
service.add_label('com.test.label', 'value')
|
87
|
+
expect(service).to be_label('com.test.label')
|
88
|
+
service.drop_label('com.test.label')
|
89
|
+
expect(service).not_to be_label('com.test.label')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
22
93
|
context 'ports' do
|
23
|
-
it 'sets ports variable with no
|
94
|
+
it 'sets ports variable with no container port' do
|
24
95
|
service.add_port('80')
|
25
96
|
expect(service).to be_port('80')
|
26
97
|
end
|
27
98
|
|
28
|
-
it 'sets ports variable with
|
99
|
+
it 'sets ports variable with container port' do
|
29
100
|
service.add_port('80', '8080')
|
30
101
|
expect(service).to be_port('80', '8080')
|
31
102
|
end
|
32
103
|
|
33
|
-
it '
|
34
|
-
service.add_port('80', '8080', 'http')
|
35
|
-
expect(service).to be_port('80', '8080', 'http')
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'does not have ports variable' do
|
104
|
+
it 'does not have ports registered' do
|
39
105
|
expect(service).not_to be_port('9090')
|
40
106
|
end
|
41
107
|
|
42
|
-
it 'will drop ports
|
108
|
+
it 'will drop ports' do
|
43
109
|
service.add_port('80', '8080')
|
44
110
|
service.drop_port('80', '8080')
|
45
111
|
expect(service).not_to be_port('80', '8080')
|
@@ -47,33 +113,119 @@ describe 'DockerCompose::Generator::Service' do
|
|
47
113
|
end
|
48
114
|
|
49
115
|
context 'links' do
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
116
|
+
shared_examples_for 'a link list' do
|
117
|
+
let(:link) { DockerCompose::Generator::Service.new('link_service', 'test_link_image') }
|
118
|
+
let(:attribute) { 'link' }
|
119
|
+
|
120
|
+
context 'adds a link' do
|
121
|
+
it 'sets link variable without a name' do
|
122
|
+
service.send("add_#{attribute}", link)
|
123
|
+
expect(service.send("#{attribute}?", link)).to be_truthy
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'sets link variable with a custom link name' do
|
127
|
+
service.send("add_#{attribute}", link, 'my_custom_name')
|
128
|
+
expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_truthy
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'does not have a link' do
|
133
|
+
it 'does not have a link' do
|
134
|
+
expect(service.send("#{attribute}?", link)).to be_falsey
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'does not have a link with a custom_name' do
|
138
|
+
service.send("add_#{attribute}", link)
|
139
|
+
expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_falsey
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'drops a link' do
|
144
|
+
it 'will drop link without custom name' do
|
145
|
+
service.send("add_#{attribute}", link)
|
146
|
+
expect(service.send("#{attribute}?", link)).to be_truthy
|
147
|
+
service.send("drop_#{attribute}", link)
|
148
|
+
expect(service.send("#{attribute}?", link)).to be_falsey
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'will drop link with a custom name' do
|
152
|
+
service.send("add_#{attribute}", link, 'my_custom_name')
|
153
|
+
expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_truthy
|
154
|
+
service.send("drop_#{attribute}", link, 'my_custom_name')
|
155
|
+
expect(service.send("#{attribute}?", link, 'my_custom_name')).to be_falsey
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
54
159
|
end
|
55
160
|
|
56
|
-
|
57
|
-
|
58
|
-
|
161
|
+
it_behaves_like 'a link list'
|
162
|
+
|
163
|
+
it_behaves_like 'a link list' do
|
164
|
+
let(:attribute) { 'external_link' }
|
165
|
+
let(:link) { 'my_external_link' }
|
59
166
|
end
|
60
167
|
|
61
|
-
|
62
|
-
|
168
|
+
end
|
169
|
+
|
170
|
+
context '#net=' do
|
171
|
+
%w(bridge none host container:name container:id).each do |item|
|
172
|
+
it "sets net to #{item}" do
|
173
|
+
expect(service.net=item).to eq(item)
|
174
|
+
end
|
63
175
|
end
|
64
176
|
|
65
|
-
it '
|
66
|
-
service.
|
67
|
-
|
68
|
-
service.
|
69
|
-
expect(service).not_to be_link(link_service)
|
177
|
+
it 'sets deletes net when nil passed in' do
|
178
|
+
expect(service.net='none').to eq('none')
|
179
|
+
service.net=nil
|
180
|
+
expect(service.attrs.include?('net')).to be_falsey
|
70
181
|
end
|
182
|
+
end
|
183
|
+
|
184
|
+
context '#pid=' do
|
185
|
+
it 'sets pid to host when true is passed in' do
|
186
|
+
service.pid=true
|
187
|
+
expect(service.attrs.include?('pid')).to be_truthy
|
188
|
+
expect(service.attrs['pid']).to eq('host')
|
189
|
+
end
|
190
|
+
it 'does not set pid to host when non TrueClass passed in' do
|
191
|
+
service.pid = 'test'
|
192
|
+
expect(service.attrs.include?('pid')).to be_falsey
|
193
|
+
end
|
194
|
+
end
|
71
195
|
|
72
|
-
|
73
|
-
|
74
|
-
expect(service).
|
75
|
-
service.drop_link(link_service, 'my_custom_name')
|
76
|
-
expect(service).not_to be_link(link_service, 'my_custom_name')
|
196
|
+
context 'volumes' do
|
197
|
+
it 'does not have volume registered' do
|
198
|
+
expect(service).not_to be_volume('/dev/null')
|
77
199
|
end
|
200
|
+
|
201
|
+
shared_examples_for 'volumes' do
|
202
|
+
let(:host) { '/dev/null' }
|
203
|
+
let(:container) { nil }
|
204
|
+
let(:mode) { nil }
|
205
|
+
context 'add' do
|
206
|
+
it 'adds volume' do
|
207
|
+
service.add_volume(host, container, mode)
|
208
|
+
expect(service).to be_volume(host, container, mode)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
context 'drops volume' do
|
212
|
+
it 'will drop volume with container volume' do
|
213
|
+
service.add_volume(host, container, mode)
|
214
|
+
expect(service).to be_volume(host, container, mode)
|
215
|
+
service.drop_volume(host, container, mode)
|
216
|
+
expect(service).not_to be_volume(host, container, mode)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
it_behaves_like 'volumes'
|
222
|
+
it_behaves_like 'volumes' do
|
223
|
+
let(:container) { '/dev/test' }
|
224
|
+
end
|
225
|
+
it_behaves_like 'volumes' do
|
226
|
+
let(:container) { '/dev/test' }
|
227
|
+
let(:mode) { 'ro' }
|
228
|
+
end
|
229
|
+
|
78
230
|
end
|
79
231
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockercompose-generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Whitcraft
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -57,6 +57,13 @@ files:
|
|
57
57
|
- docker-compose-generator.gemspec
|
58
58
|
- lib/docker-compose/generator.rb
|
59
59
|
- lib/docker-compose/generator/service.rb
|
60
|
+
- lib/docker-compose/generator/service/environment.rb
|
61
|
+
- lib/docker-compose/generator/service/labels.rb
|
62
|
+
- lib/docker-compose/generator/service/links.rb
|
63
|
+
- lib/docker-compose/generator/service/net.rb
|
64
|
+
- lib/docker-compose/generator/service/pid.rb
|
65
|
+
- lib/docker-compose/generator/service/ports.rb
|
66
|
+
- lib/docker-compose/generator/service/volumes.rb
|
60
67
|
- lib/docker-compose/generator/version.rb
|
61
68
|
- spec/docker-compose/generator/service_spec.rb
|
62
69
|
- spec/docker-compose/generator_spec.rb
|
@@ -73,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
80
|
requirements:
|
74
81
|
- - ">="
|
75
82
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
83
|
+
version: 1.9.3
|
77
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
85
|
requirements:
|
79
86
|
- - ">="
|
@@ -81,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
88
|
version: '0'
|
82
89
|
requirements: []
|
83
90
|
rubyforge_project:
|
84
|
-
rubygems_version: 2.
|
91
|
+
rubygems_version: 2.2.2
|
85
92
|
signing_key:
|
86
93
|
specification_version: 4
|
87
94
|
summary: Programmatically create a yaml file for docker-compose
|
@@ -89,3 +96,4 @@ test_files:
|
|
89
96
|
- spec/docker-compose/generator/service_spec.rb
|
90
97
|
- spec/docker-compose/generator_spec.rb
|
91
98
|
- spec/helper.rb
|
99
|
+
has_rdoc:
|