dockistrano 0.0.3 → 0.0.4
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/lib/dockistrano/service_dependency.rb +28 -28
- data/lib/dockistrano/version.rb +1 -1
- data/spec/dockistrano/service_dependency_spec.rb +24 -16
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4869a713668f9a34a7ff283320a89025f37be8fc
|
4
|
+
data.tar.gz: 6cd46f26c5b421a8a1244ff07bc8ee13fc5c9d25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3d575c20065873bdd259cce1b1d16c76885c2c3843c7ab8bac87f84fdc901d0b9953abfbf4eff4b73fe6003d66b729aea61b588a19f15ad8397d619e4bfd04f
|
7
|
+
data.tar.gz: c67764b501790eb79ebf7a7a0f8e21feedef23bf9394b7b7e775c5c8a8430311ff243df252343ddbb5f8086f5780f71e20558dc25e1e4a0b9763b55f540f5f07
|
@@ -6,7 +6,7 @@ module Dockistrano
|
|
6
6
|
# configuration is not local, the configuration is fetched from Github and
|
7
7
|
# processed.
|
8
8
|
def self.factory(service, name, config)
|
9
|
-
ServiceDependency.new(service, name, config).
|
9
|
+
ServiceDependency.new(service, name, config).initialized_backing_service
|
10
10
|
end
|
11
11
|
|
12
12
|
class DefaultEnvironmentMissingInConfiguration < StandardError
|
@@ -21,32 +21,32 @@ module Dockistrano
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def backing_service
|
24
|
-
@backing_service ||=
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
backing_service.tag = tag_with_fallback(service.registry, name, service.tag)
|
33
|
-
|
34
|
-
begin
|
35
|
-
loaded_config = load_config
|
36
|
-
if loaded_config and loaded_config["default"]
|
37
|
-
backing_service.config = loaded_config["default"]
|
38
|
-
else
|
39
|
-
raise DefaultEnvironmentMissingInConfiguration.new("No 'default' configuration found in /dockistrano.yml file in #{name} container.")
|
40
|
-
end
|
41
|
-
rescue ContainerConfigurationMissing
|
42
|
-
puts "Warning: no configuration file found for service #{name}."
|
43
|
-
rescue HostDirectoriesMissing
|
44
|
-
puts "Error: missing host directory configuration for #{name}. Please execute `doc setup`"
|
45
|
-
exit 1
|
46
|
-
end
|
24
|
+
@backing_service ||= Service.new("default" => {
|
25
|
+
"registry" => service.registry,
|
26
|
+
"image_name" => name,
|
27
|
+
"tag" => service.tag,
|
28
|
+
"backing_service_env" => config
|
29
|
+
})
|
30
|
+
end
|
47
31
|
|
48
|
-
|
32
|
+
def initialized_backing_service
|
33
|
+
backing_service.tag = tag_with_fallback(service.tag)
|
34
|
+
|
35
|
+
begin
|
36
|
+
loaded_config = load_config
|
37
|
+
if loaded_config and loaded_config["default"]
|
38
|
+
backing_service.config = loaded_config["default"]
|
39
|
+
else
|
40
|
+
raise DefaultEnvironmentMissingInConfiguration.new("No 'default' configuration found in /dockistrano.yml file in #{name} container.")
|
41
|
+
end
|
42
|
+
rescue ContainerConfigurationMissing
|
43
|
+
puts "Warning: no configuration file found for service #{name}."
|
44
|
+
rescue HostDirectoriesMissing
|
45
|
+
puts "Error: missing host directory configuration for #{name}. Please execute `doc setup`"
|
46
|
+
exit 1
|
49
47
|
end
|
48
|
+
|
49
|
+
backing_service
|
50
50
|
end
|
51
51
|
|
52
52
|
def load_config
|
@@ -89,10 +89,10 @@ module Dockistrano
|
|
89
89
|
class NoTagFoundForImage < StandardError
|
90
90
|
end
|
91
91
|
|
92
|
-
def tag_with_fallback(
|
92
|
+
def tag_with_fallback(tag)
|
93
93
|
fallback_tags = [tag, "develop", "master", "latest"]
|
94
94
|
|
95
|
-
available_tags = Docker.tags_for_image("#{registry}/#{image_name}")
|
95
|
+
available_tags = Docker.tags_for_image("#{backing_service.registry}/#{backing_service.image_name}")
|
96
96
|
|
97
97
|
begin
|
98
98
|
tag_suggestion = fallback_tags.shift
|
@@ -102,7 +102,7 @@ module Dockistrano
|
|
102
102
|
if final_tag
|
103
103
|
final_tag
|
104
104
|
else
|
105
|
-
raise NoTagFoundForImage.new("No tag found for image #{image_name}, locally available tags: #{available_tags} `doc pull` for more tags from repository.")
|
105
|
+
raise NoTagFoundForImage.new("No tag found for image #{backing_service.image_name}, locally available tags: #{available_tags} `doc pull` for more tags from repository.")
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
data/lib/dockistrano/version.rb
CHANGED
@@ -9,17 +9,12 @@ describe Dockistrano::ServiceDependency do
|
|
9
9
|
context ".factory" do
|
10
10
|
it "creates a new service based on the name" do
|
11
11
|
expect(described_class).to receive(:new).and_return(service_dependency)
|
12
|
-
expect(service_dependency).to receive(:
|
12
|
+
expect(service_dependency).to receive(:initialized_backing_service).and_return(service)
|
13
13
|
expect(described_class.factory(service, "redis", { foo: "bar" })).to eq(service)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context "#
|
18
|
-
before do
|
19
|
-
allow(subject).to receive(:load_config).and_return({ "default" => {} })
|
20
|
-
allow(subject).to receive(:tag_with_fallback).and_return("develop")
|
21
|
-
end
|
22
|
-
|
17
|
+
context "#backing_service" do
|
23
18
|
it "backing service has registry of the service" do
|
24
19
|
expect(subject.backing_service.registry).to eq("my.registry.net")
|
25
20
|
end
|
@@ -31,19 +26,26 @@ describe Dockistrano::ServiceDependency do
|
|
31
26
|
it "backing service has the tag of the service" do
|
32
27
|
expect(subject.backing_service.tag).to eq("develop")
|
33
28
|
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "#initialized_backing_service" do
|
32
|
+
before do
|
33
|
+
allow(subject).to receive(:load_config).and_return({ "default" => {} })
|
34
|
+
allow(subject).to receive(:tag_with_fallback).and_return("develop")
|
35
|
+
end
|
34
36
|
|
35
37
|
it "backing service has backing service environment variables from configuration" do
|
36
|
-
expect(subject.
|
38
|
+
expect(subject.initialized_backing_service.backing_service_env).to eq({ database: "application_development" })
|
37
39
|
end
|
38
40
|
|
39
41
|
it "sets the tag with a fallback" do
|
40
|
-
expect(subject).to receive(:tag_with_fallback).with("
|
41
|
-
expect(subject.
|
42
|
+
expect(subject).to receive(:tag_with_fallback).with("develop").and_return("latest")
|
43
|
+
expect(subject.initialized_backing_service.tag).to eq("latest")
|
42
44
|
end
|
43
45
|
|
44
46
|
it "loads the configuration" do
|
45
47
|
expect(subject).to receive(:load_config).and_return({ "default" => { "test_command" => "foobar" }})
|
46
|
-
expect(subject.
|
48
|
+
expect(subject.initialized_backing_service.test_command).to eq("foobar")
|
47
49
|
end
|
48
50
|
end
|
49
51
|
|
@@ -119,29 +121,35 @@ describe Dockistrano::ServiceDependency do
|
|
119
121
|
end
|
120
122
|
|
121
123
|
context "#tag_with_fallback" do
|
124
|
+
let(:backing_service) { double(registry: "registry", image_name: "postgresql") }
|
125
|
+
|
126
|
+
before do
|
127
|
+
allow(subject).to receive(:backing_service).and_return(backing_service)
|
128
|
+
end
|
129
|
+
|
122
130
|
it "returns the given tag when the tag is available" do
|
123
131
|
expect(Dockistrano::Docker).to receive(:tags_for_image).and_return(["feature-branch", "develop", "master", "latest"])
|
124
|
-
expect(subject.tag_with_fallback("
|
132
|
+
expect(subject.tag_with_fallback("feature-branch")).to eq("feature-branch")
|
125
133
|
end
|
126
134
|
|
127
135
|
it "returns develop when the specific tag is not available" do
|
128
136
|
expect(Dockistrano::Docker).to receive(:tags_for_image).and_return(["develop", "master", "latest"])
|
129
|
-
expect(subject.tag_with_fallback("
|
137
|
+
expect(subject.tag_with_fallback("feature-branch")).to eq("develop")
|
130
138
|
end
|
131
139
|
|
132
140
|
it "returns master when develop is not available" do
|
133
141
|
expect(Dockistrano::Docker).to receive(:tags_for_image).and_return(["master", "latest"])
|
134
|
-
expect(subject.tag_with_fallback("
|
142
|
+
expect(subject.tag_with_fallback("feature-branch")).to eq("master")
|
135
143
|
end
|
136
144
|
|
137
145
|
it "returns latest when master is not available" do
|
138
146
|
expect(Dockistrano::Docker).to receive(:tags_for_image).and_return(["latest"])
|
139
|
-
expect(subject.tag_with_fallback("
|
147
|
+
expect(subject.tag_with_fallback("feature-branch")).to eq("latest")
|
140
148
|
end
|
141
149
|
|
142
150
|
it "raises an error when not appropriate tag is found" do
|
143
151
|
expect(Dockistrano::Docker).to receive(:tags_for_image).and_return(["another-feature-branch"])
|
144
|
-
expect { subject.tag_with_fallback("
|
152
|
+
expect { subject.tag_with_fallback("feature-branch") }.to raise_error(Dockistrano::ServiceDependency::NoTagFoundForImage)
|
145
153
|
end
|
146
154
|
end
|
147
155
|
|