r10k 3.11.0 → 3.12.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/CHANGELOG.mkd +9 -0
- data/doc/dynamic-environments/configuration.mkd +7 -3
- data/doc/dynamic-environments/usage.mkd +26 -0
- data/doc/puppetfile.mkd +3 -4
- data/integration/tests/basic_functionality/basic_deployment.rb +176 -0
- data/lib/r10k/action/deploy/environment.rb +8 -1
- data/lib/r10k/action/deploy/module.rb +11 -6
- data/lib/r10k/action/puppetfile/check.rb +7 -5
- data/lib/r10k/action/puppetfile/install.rb +22 -16
- data/lib/r10k/action/puppetfile/purge.rb +12 -9
- data/lib/r10k/cli/deploy.rb +1 -0
- data/lib/r10k/cli/puppetfile.rb +0 -1
- data/lib/r10k/content_synchronizer.rb +16 -4
- data/lib/r10k/environment/base.rb +64 -11
- data/lib/r10k/environment/with_modules.rb +6 -10
- data/lib/r10k/git/stateful_repository.rb +7 -0
- data/lib/r10k/initializers.rb +1 -7
- data/lib/r10k/module/base.rb +5 -1
- data/lib/r10k/module/definition.rb +64 -0
- data/lib/r10k/module/forge.rb +10 -2
- data/lib/r10k/module/git.rb +22 -1
- data/lib/r10k/module/local.rb +2 -3
- data/lib/r10k/module/svn.rb +10 -0
- data/lib/r10k/module.rb +20 -2
- data/lib/r10k/module_loader/puppetfile/dsl.rb +8 -3
- data/lib/r10k/module_loader/puppetfile.rb +95 -29
- data/lib/r10k/puppetfile.rb +1 -2
- data/lib/r10k/settings.rb +11 -0
- data/lib/r10k/version.rb +1 -1
- data/locales/r10k.pot +75 -47
- data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +8 -0
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +9 -0
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +9 -0
- data/spec/r10k-mocks/mock_env.rb +3 -0
- data/spec/r10k-mocks/mock_source.rb +7 -3
- data/spec/unit/action/deploy/environment_spec.rb +80 -30
- data/spec/unit/action/deploy/module_spec.rb +50 -62
- data/spec/unit/action/puppetfile/check_spec.rb +17 -5
- data/spec/unit/action/puppetfile/install_spec.rb +42 -36
- data/spec/unit/action/puppetfile/purge_spec.rb +15 -17
- data/spec/unit/action/runner_spec.rb +0 -8
- data/spec/unit/environment/base_spec.rb +30 -17
- data/spec/unit/environment/git_spec.rb +2 -2
- data/spec/unit/environment/svn_spec.rb +4 -3
- data/spec/unit/environment/with_modules_spec.rb +2 -1
- data/spec/unit/module/base_spec.rb +8 -8
- data/spec/unit/module/forge_spec.rb +32 -4
- data/spec/unit/module/git_spec.rb +51 -10
- data/spec/unit/module/svn_spec.rb +18 -6
- data/spec/unit/module_loader/puppetfile_spec.rb +90 -30
- data/spec/unit/puppetfile_spec.rb +2 -2
- data/spec/unit/settings_spec.rb +25 -2
- metadata +7 -2
@@ -3,7 +3,7 @@ require 'r10k/action/puppetfile/check'
|
|
3
3
|
|
4
4
|
describe R10K::Action::Puppetfile::Check do
|
5
5
|
let(:default_opts) { {root: "/some/nonexistent/path"} }
|
6
|
-
let(:
|
6
|
+
let(:loader) { instance_double('R10K::ModuleLoader::Puppetfile', :load! => {}) }
|
7
7
|
|
8
8
|
def checker(opts = {}, argv = [], settings = {})
|
9
9
|
opts = default_opts.merge(opts)
|
@@ -11,7 +11,11 @@ describe R10K::Action::Puppetfile::Check do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
before(:each) do
|
14
|
-
allow(R10K::Puppetfile).
|
14
|
+
allow(R10K::ModuleLoader::Puppetfile).
|
15
|
+
to receive(:new).
|
16
|
+
with({
|
17
|
+
basedir: "/some/nonexistent/path",
|
18
|
+
}).and_return(loader)
|
15
19
|
end
|
16
20
|
|
17
21
|
it_behaves_like "a puppetfile action"
|
@@ -23,8 +27,11 @@ describe R10K::Action::Puppetfile::Check do
|
|
23
27
|
end
|
24
28
|
|
25
29
|
it "prints an error message when validating the Puppetfile syntax raised an error" do
|
26
|
-
allow(
|
27
|
-
allow(R10K::Errors::Formatting).
|
30
|
+
allow(loader).to receive(:load!).and_raise(R10K::Error.new("Boom!"))
|
31
|
+
allow(R10K::Errors::Formatting).
|
32
|
+
to receive(:format_exception).
|
33
|
+
with(instance_of(R10K::Error), anything).
|
34
|
+
and_return("Formatted error message")
|
28
35
|
|
29
36
|
expect($stderr).to receive(:puts).with("Formatted error message")
|
30
37
|
|
@@ -34,7 +41,12 @@ describe R10K::Action::Puppetfile::Check do
|
|
34
41
|
it "respects --puppetfile option" do
|
35
42
|
allow($stderr).to receive(:puts)
|
36
43
|
|
37
|
-
expect(R10K::Puppetfile).
|
44
|
+
expect(R10K::ModuleLoader::Puppetfile).
|
45
|
+
to receive(:new).
|
46
|
+
with({
|
47
|
+
basedir: "/some/nonexistent/path",
|
48
|
+
puppetfile: "/custom/puppetfile/path"
|
49
|
+
}).and_return(loader)
|
38
50
|
|
39
51
|
checker({puppetfile: "/custom/puppetfile/path"}).call
|
40
52
|
end
|
@@ -3,9 +3,10 @@ require 'r10k/action/puppetfile/install'
|
|
3
3
|
|
4
4
|
describe R10K::Action::Puppetfile::Install do
|
5
5
|
let(:default_opts) { { root: "/some/nonexistent/path" } }
|
6
|
-
let(:
|
7
|
-
R10K::Puppetfile.new(
|
8
|
-
|
6
|
+
let(:loader) {
|
7
|
+
R10K::ModuleLoader::Puppetfile.new({
|
8
|
+
basedir: '/some/nonexistent/path',
|
9
|
+
overrides: {force: false}})
|
9
10
|
}
|
10
11
|
|
11
12
|
def installer(opts = {}, argv = [], settings = {})
|
@@ -14,11 +15,11 @@ describe R10K::Action::Puppetfile::Install do
|
|
14
15
|
end
|
15
16
|
|
16
17
|
before(:each) do
|
17
|
-
allow(
|
18
|
-
allow(R10K::Puppetfile).to receive(:new).
|
19
|
-
with("/some/nonexistent/path",
|
20
|
-
|
21
|
-
and_return(
|
18
|
+
allow(loader).to receive(:load!).and_return({})
|
19
|
+
allow(R10K::ModuleLoader::Puppetfile).to receive(:new).
|
20
|
+
with({basedir: "/some/nonexistent/path",
|
21
|
+
overrides: {force: false}}).
|
22
|
+
and_return(loader)
|
22
23
|
end
|
23
24
|
|
24
25
|
it_behaves_like "a puppetfile install action"
|
@@ -26,13 +27,19 @@ describe R10K::Action::Puppetfile::Install do
|
|
26
27
|
describe "installing modules" do
|
27
28
|
let(:modules) do
|
28
29
|
(1..4).map do |idx|
|
29
|
-
R10K::Module::Base.new("author/modname#{idx}",
|
30
|
+
R10K::Module::Base.new("author/modname#{idx}",
|
31
|
+
"/some/nonexistent/path/modname#{idx}",
|
32
|
+
{})
|
30
33
|
end
|
31
34
|
end
|
32
35
|
|
33
36
|
before do
|
34
|
-
allow(
|
35
|
-
|
37
|
+
allow(loader).to receive(:load!).and_return({
|
38
|
+
modules: modules,
|
39
|
+
managed_directories: [],
|
40
|
+
desired_contents: [],
|
41
|
+
purge_exclusions: []
|
42
|
+
})
|
36
43
|
end
|
37
44
|
|
38
45
|
it "syncs each module in the Puppetfile" do
|
@@ -50,15 +57,15 @@ describe R10K::Action::Puppetfile::Install do
|
|
50
57
|
end
|
51
58
|
|
52
59
|
describe "purging" do
|
53
|
-
before do
|
54
|
-
allow(puppetfile).to receive(:modules).and_return([])
|
55
|
-
end
|
56
|
-
|
57
60
|
it "purges the moduledir after installation" do
|
61
|
+
allow(loader).to receive(:load!).and_return({
|
62
|
+
modules: [],
|
63
|
+
desired_contents: [ 'root/foo' ],
|
64
|
+
managed_directories: [ 'root' ],
|
65
|
+
purge_exclusions: [ 'root/**/**.rb' ]
|
66
|
+
})
|
67
|
+
|
58
68
|
mock_cleaner = double("cleaner")
|
59
|
-
allow(puppetfile).to receive(:desired_contents).and_return(["root/foo"])
|
60
|
-
allow(puppetfile).to receive(:managed_directories).and_return(["root"])
|
61
|
-
allow(puppetfile).to receive(:purge_exclusions).and_return(["root/**/**.rb"])
|
62
69
|
|
63
70
|
expect(R10K::Util::Cleaner).to receive(:new).
|
64
71
|
with(["root"], ["root/foo"], ["root/**/**.rb"]).
|
@@ -70,35 +77,34 @@ describe R10K::Action::Puppetfile::Install do
|
|
70
77
|
end
|
71
78
|
|
72
79
|
describe "using custom paths" do
|
73
|
-
it "can use a custom
|
74
|
-
expect(R10K::Puppetfile).to receive(:new).
|
75
|
-
with("/some/nonexistent/path",
|
76
|
-
|
77
|
-
|
80
|
+
it "can use a custom moduledir path" do
|
81
|
+
expect(R10K::ModuleLoader::Puppetfile).to receive(:new).
|
82
|
+
with({basedir: "/some/nonexistent/path",
|
83
|
+
overrides: { force: false },
|
84
|
+
puppetfile: "/some/other/path/Puppetfile"}).
|
85
|
+
and_return(loader)
|
78
86
|
|
79
87
|
installer({puppetfile: "/some/other/path/Puppetfile"}).call
|
80
|
-
end
|
81
88
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
and_return(
|
89
|
+
expect(R10K::ModuleLoader::Puppetfile).to receive(:new).
|
90
|
+
with({basedir: "/some/nonexistent/path",
|
91
|
+
overrides: { force: false },
|
92
|
+
moduledir: "/some/other/path/site-modules"}).
|
93
|
+
and_return(loader)
|
87
94
|
|
88
95
|
installer({moduledir: "/some/other/path/site-modules"}).call
|
89
96
|
end
|
90
97
|
end
|
91
98
|
|
92
99
|
describe "forcing to overwrite local changes" do
|
93
|
-
before do
|
94
|
-
allow(puppetfile).to receive(:modules).and_return([])
|
95
|
-
end
|
96
|
-
|
97
100
|
it "can use the force overwrite option" do
|
101
|
+
allow(loader).to receive(:load!).and_return({ modules: [] })
|
102
|
+
|
98
103
|
subject = described_class.new({root: "/some/nonexistent/path", force: true}, [], {})
|
99
|
-
expect(R10K::Puppetfile).to receive(:new).
|
100
|
-
with("/some/nonexistent/path",
|
101
|
-
|
104
|
+
expect(R10K::ModuleLoader::Puppetfile).to receive(:new).
|
105
|
+
with({basedir: "/some/nonexistent/path",
|
106
|
+
overrides: { force: true }}).
|
107
|
+
and_return(loader)
|
102
108
|
subject.call
|
103
109
|
end
|
104
110
|
|
@@ -4,11 +4,13 @@ require 'r10k/action/puppetfile/purge'
|
|
4
4
|
describe R10K::Action::Puppetfile::Purge do
|
5
5
|
let(:default_opts) { {root: "/some/nonexistent/path"} }
|
6
6
|
let(:puppetfile) do
|
7
|
-
instance_double('R10K::Puppetfile',
|
8
|
-
:load!
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
instance_double('R10K::ModuleLoader::Puppetfile',
|
8
|
+
:load! => {
|
9
|
+
:modules => %w{mod},
|
10
|
+
:managed_directories => %w{foo},
|
11
|
+
:desired_contents => %w{bar},
|
12
|
+
:purge_exclusions => %w{baz}
|
13
|
+
})
|
12
14
|
end
|
13
15
|
|
14
16
|
def purger(opts = {}, argv = [], settings = {})
|
@@ -17,8 +19,8 @@ describe R10K::Action::Puppetfile::Purge do
|
|
17
19
|
end
|
18
20
|
|
19
21
|
before(:each) do
|
20
|
-
allow(R10K::Puppetfile).to receive(:new).
|
21
|
-
with("/some/nonexistent/path"
|
22
|
+
allow(R10K::ModuleLoader::Puppetfile).to receive(:new).
|
23
|
+
with({basedir: "/some/nonexistent/path"}).
|
22
24
|
and_return(puppetfile)
|
23
25
|
end
|
24
26
|
|
@@ -37,23 +39,19 @@ describe R10K::Action::Puppetfile::Purge do
|
|
37
39
|
end
|
38
40
|
|
39
41
|
describe "using custom paths" do
|
40
|
-
before(:each) do
|
41
|
-
allow(puppetfile).to receive(:purge!)
|
42
|
-
end
|
43
|
-
|
44
42
|
it "can use a custom puppetfile path" do
|
45
|
-
expect(R10K::Puppetfile).to receive(:new).
|
46
|
-
with("/some/nonexistent/path",
|
47
|
-
|
43
|
+
expect(R10K::ModuleLoader::Puppetfile).to receive(:new).
|
44
|
+
with({basedir: "/some/nonexistent/path",
|
45
|
+
puppetfile: "/some/other/path/Puppetfile"}).
|
48
46
|
and_return(puppetfile)
|
49
47
|
|
50
48
|
purger({puppetfile: "/some/other/path/Puppetfile"}).call
|
51
49
|
end
|
52
50
|
|
53
51
|
it "can use a custom moduledir path" do
|
54
|
-
expect(R10K::Puppetfile).to receive(:new).
|
55
|
-
with("/some/nonexistent/path",
|
56
|
-
|
52
|
+
expect(R10K::ModuleLoader::Puppetfile).to receive(:new).
|
53
|
+
with({basedir: "/some/nonexistent/path",
|
54
|
+
moduledir: "/some/other/path/site-modules"}).
|
57
55
|
and_return(puppetfile)
|
58
56
|
|
59
57
|
purger({moduledir: "/some/other/path/site-modules"}).call
|
@@ -310,14 +310,6 @@ describe R10K::Action::Runner do
|
|
310
310
|
runner.setup_settings
|
311
311
|
runner.setup_authorization
|
312
312
|
end
|
313
|
-
|
314
|
-
it 'errors if no custom forge URL is set' do
|
315
|
-
options = { config: "spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml" }
|
316
|
-
runner = described_class.new(options, %w[args yes], action_class)
|
317
|
-
expect(PuppetForge::Connection).not_to receive(:authorization=).with('faketoken')
|
318
|
-
|
319
|
-
expect { runner.setup_settings }.to raise_error(R10K::Error, /Cannot specify a Forge auth/)
|
320
|
-
end
|
321
313
|
end
|
322
314
|
|
323
315
|
context "license auth" do
|
@@ -3,10 +3,13 @@ require 'r10k/environment'
|
|
3
3
|
|
4
4
|
describe R10K::Environment::Base do
|
5
5
|
|
6
|
-
|
6
|
+
let(:basepath) { '/some/imaginary/path' }
|
7
|
+
let(:envname) { 'env_name' }
|
8
|
+
let(:path) { File.join(basepath, envname) }
|
9
|
+
subject(:environment) { described_class.new('envname', basepath, envname, {}) }
|
7
10
|
|
8
11
|
it "can return the fully qualified path" do
|
9
|
-
expect(environment.path).to eq(Pathname.new(
|
12
|
+
expect(environment.path).to eq(Pathname.new(path))
|
10
13
|
end
|
11
14
|
|
12
15
|
it "raises an exception when #sync is called" do
|
@@ -49,45 +52,55 @@ describe R10K::Environment::Base do
|
|
49
52
|
describe "#purge_exclusions" do
|
50
53
|
let(:mock_env) { instance_double("R10K::Environment::Base") }
|
51
54
|
let(:mock_puppetfile) { instance_double("R10K::Puppetfile", :environment= => true, :environment => mock_env) }
|
55
|
+
let(:loader) do
|
56
|
+
instance_double("R10K::ModuleLoader::Puppetfile",
|
57
|
+
:environment= => nil,
|
58
|
+
:load => { :modules => @modules,
|
59
|
+
:managed_directories => @managed_dirs,
|
60
|
+
:desired_contents => @desired_contents,
|
61
|
+
:purge_exclusions => @purge_ex })
|
62
|
+
end
|
52
63
|
|
53
64
|
before(:each) do
|
54
|
-
|
55
|
-
|
56
|
-
|
65
|
+
@modules = []
|
66
|
+
@managed_dirs = []
|
67
|
+
@desired_contents = []
|
68
|
+
@purge_exclusions = []
|
57
69
|
end
|
58
70
|
|
59
71
|
it "excludes .r10k-deploy.json" do
|
72
|
+
allow(R10K::ModuleLoader::Puppetfile).to receive(:new).and_return(loader)
|
73
|
+
subject.deploy
|
74
|
+
|
60
75
|
expect(subject.purge_exclusions).to include(/r10k-deploy\.json/)
|
61
76
|
end
|
62
77
|
|
63
78
|
it "excludes puppetfile managed directories" do
|
64
|
-
managed_dirs = [
|
79
|
+
@managed_dirs = [
|
65
80
|
'/some/imaginary/path/env_name/modules',
|
66
81
|
'/some/imaginary/path/env_name/data',
|
67
82
|
]
|
68
83
|
|
69
|
-
|
84
|
+
allow(R10K::ModuleLoader::Puppetfile).to receive(:new).and_return(loader)
|
85
|
+
subject.deploy
|
70
86
|
|
71
87
|
exclusions = subject.purge_exclusions
|
72
88
|
|
73
|
-
managed_dirs.each do |dir|
|
89
|
+
@managed_dirs.each do |dir|
|
74
90
|
expect(exclusions).to include(dir)
|
75
91
|
end
|
76
92
|
end
|
77
93
|
|
78
94
|
describe "puppetfile desired contents" do
|
79
|
-
let(:desired_contents) do
|
80
|
-
basedir = subject.path.to_s
|
81
|
-
|
82
|
-
[ 'modules/apache', 'data/local/site' ].collect do |c|
|
83
|
-
File.join(basedir, c)
|
84
|
-
end
|
85
|
-
end
|
86
95
|
|
87
96
|
before(:each) do
|
88
|
-
|
97
|
+
@desired_contents = [ 'modules/apache', 'data/local/site' ].collect do |c|
|
98
|
+
File.join(path, c)
|
99
|
+
end
|
89
100
|
|
90
|
-
|
101
|
+
allow(File).to receive(:directory?).and_return true
|
102
|
+
allow(R10K::ModuleLoader::Puppetfile).to receive(:new).and_return(loader)
|
103
|
+
subject.deploy
|
91
104
|
end
|
92
105
|
|
93
106
|
it "excludes desired directory contents with glob" do
|
@@ -78,9 +78,9 @@ describe R10K::Environment::Git do
|
|
78
78
|
|
79
79
|
describe "enumerating modules" do
|
80
80
|
it "loads the Puppetfile and returns modules in that puppetfile" do
|
81
|
+
loaded = { desired_contents: [], managed_directories: [], purge_exclusions: [] }
|
81
82
|
mod = double('A module', :name => 'dbl')
|
82
|
-
expect(subject.
|
83
|
-
expect(subject.puppetfile).to receive(:modules).and_return [mod]
|
83
|
+
expect(subject.loader).to receive(:load).and_return(loaded.merge(modules: [mod]))
|
84
84
|
expect(subject.modules).to eq([mod])
|
85
85
|
end
|
86
86
|
end
|
@@ -78,9 +78,10 @@ describe R10K::Environment::SVN do
|
|
78
78
|
|
79
79
|
describe "enumerating modules" do
|
80
80
|
it "loads the Puppetfile and returns modules in that puppetfile" do
|
81
|
-
|
82
|
-
|
83
|
-
expect(subject.
|
81
|
+
loaded = { managed_directories: [], desired_contents: [], purge_exclusions: [] }
|
82
|
+
mod = double('A module', :name => 'dbl')
|
83
|
+
expect(subject.loader).to receive(:load).and_return(loaded.merge(modules: [mod]))
|
84
|
+
expect(subject.modules).to eq([mod])
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
@@ -65,8 +65,9 @@ describe R10K::Environment::WithModules do
|
|
65
65
|
|
66
66
|
describe "modules method" do
|
67
67
|
it "returns the configured modules, and Puppetfile modules" do
|
68
|
+
loaded = { managed_directories: [], desired_contents: [], purge_exclusions: [] }
|
68
69
|
puppetfile_mod = instance_double('R10K::Module::Base', name: 'zebra')
|
69
|
-
expect(subject.
|
70
|
+
expect(subject.loader).to receive(:load).and_return(loaded.merge(modules: [puppetfile_mod]))
|
70
71
|
returned_modules = subject.modules
|
71
72
|
expect(returned_modules.map(&:name).sort).to eq(%w[concat exec stdlib zebra])
|
72
73
|
end
|
@@ -4,26 +4,26 @@ require 'r10k/module/base'
|
|
4
4
|
describe R10K::Module::Base do
|
5
5
|
describe "parsing the title" do
|
6
6
|
it "parses titles with no owner" do
|
7
|
-
m = described_class.new('eight_hundred', '/moduledir',
|
7
|
+
m = described_class.new('eight_hundred', '/moduledir', {})
|
8
8
|
expect(m.name).to eq 'eight_hundred'
|
9
9
|
expect(m.owner).to be_nil
|
10
10
|
end
|
11
11
|
|
12
12
|
it "parses forward slash separated titles" do
|
13
|
-
m = described_class.new('branan/eight_hundred', '/moduledir',
|
13
|
+
m = described_class.new('branan/eight_hundred', '/moduledir', {})
|
14
14
|
expect(m.name).to eq 'eight_hundred'
|
15
15
|
expect(m.owner).to eq 'branan'
|
16
16
|
end
|
17
17
|
|
18
18
|
it "parses hyphen separated titles" do
|
19
|
-
m = described_class.new('branan-eight_hundred', '/moduledir',
|
19
|
+
m = described_class.new('branan-eight_hundred', '/moduledir', {})
|
20
20
|
expect(m.name).to eq 'eight_hundred'
|
21
21
|
expect(m.owner).to eq 'branan'
|
22
22
|
end
|
23
23
|
|
24
24
|
it "raises an error when the title is not correctly formatted" do
|
25
25
|
expect {
|
26
|
-
described_class.new('branan!eight_hundred', '/moduledir',
|
26
|
+
described_class.new('branan!eight_hundred', '/moduledir', {})
|
27
27
|
}.to raise_error(ArgumentError, "Module name (branan!eight_hundred) must match either 'modulename' or 'owner/modulename'")
|
28
28
|
end
|
29
29
|
end
|
@@ -76,13 +76,13 @@ describe R10K::Module::Base do
|
|
76
76
|
|
77
77
|
describe "path variables" do
|
78
78
|
it "uses the module name as the name" do
|
79
|
-
m = described_class.new('eight_hundred', '/moduledir',
|
79
|
+
m = described_class.new('eight_hundred', '/moduledir', {})
|
80
80
|
expect(m.dirname).to eq '/moduledir'
|
81
81
|
expect(m.path).to eq(Pathname.new('/moduledir/eight_hundred'))
|
82
82
|
end
|
83
83
|
|
84
84
|
it "does not include the owner in the path" do
|
85
|
-
m = described_class.new('branan/eight_hundred', '/moduledir',
|
85
|
+
m = described_class.new('branan/eight_hundred', '/moduledir', {})
|
86
86
|
expect(m.dirname).to eq '/moduledir'
|
87
87
|
expect(m.path).to eq(Pathname.new('/moduledir/eight_hundred'))
|
88
88
|
end
|
@@ -90,7 +90,7 @@ describe R10K::Module::Base do
|
|
90
90
|
|
91
91
|
describe "with alternate variable names" do
|
92
92
|
subject do
|
93
|
-
described_class.new('branan/eight_hundred', '/moduledir',
|
93
|
+
described_class.new('branan/eight_hundred', '/moduledir', {})
|
94
94
|
end
|
95
95
|
|
96
96
|
it "aliases full_name to title" do
|
@@ -107,7 +107,7 @@ describe R10K::Module::Base do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
describe "accepting a visitor" do
|
110
|
-
subject { described_class.new('branan-eight_hundred', '/moduledir',
|
110
|
+
subject { described_class.new('branan-eight_hundred', '/moduledir', {}) }
|
111
111
|
|
112
112
|
it "passes itself to the visitor" do
|
113
113
|
visitor = spy('visitor')
|
@@ -9,6 +9,28 @@ describe R10K::Module::Forge do
|
|
9
9
|
let(:fixture_modulepath) { File.expand_path('spec/fixtures/module/forge', PROJECT_ROOT) }
|
10
10
|
let(:empty_modulepath) { File.expand_path('spec/fixtures/empty', PROJECT_ROOT) }
|
11
11
|
|
12
|
+
describe "statically determined version support" do
|
13
|
+
it 'returns explicitly released forge versions' do
|
14
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { version: '8.0.0' })
|
15
|
+
expect(static_version).to eq('8.0.0')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'returns explicit pre-released forge versions' do
|
19
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { version: '8.0.0-pre1' })
|
20
|
+
expect(static_version).to eq('8.0.0-pre1')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'retuns nil for latest versions' do
|
24
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { version: :latest })
|
25
|
+
expect(static_version).to eq(nil)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'retuns nil for undefined versions' do
|
29
|
+
static_version = described_class.statically_defined_version('branan/eight_hundred', { version: nil })
|
30
|
+
expect(static_version).to eq(nil)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
12
34
|
describe "implementing the Puppetfile spec" do
|
13
35
|
it "should implement 'branan/eight_hundred', '8.0.0'" do
|
14
36
|
expect(described_class).to be_implement('branan/eight_hundred', { version: '8.0.0' })
|
@@ -190,25 +212,31 @@ describe R10K::Module::Forge do
|
|
190
212
|
expect(subject).to receive(:install).never
|
191
213
|
expect(subject).to receive(:upgrade).never
|
192
214
|
expect(subject).to receive(:reinstall).never
|
193
|
-
subject.sync
|
215
|
+
expect(subject.sync).to be false
|
194
216
|
end
|
195
217
|
|
196
218
|
it 'reinstalls the module when it is mismatched' do
|
197
219
|
allow(subject).to receive(:status).and_return :mismatched
|
198
220
|
expect(subject).to receive(:reinstall)
|
199
|
-
subject.sync
|
221
|
+
expect(subject.sync).to be true
|
200
222
|
end
|
201
223
|
|
202
224
|
it 'upgrades the module when it is outdated' do
|
203
225
|
allow(subject).to receive(:status).and_return :outdated
|
204
226
|
expect(subject).to receive(:upgrade)
|
205
|
-
subject.sync
|
227
|
+
expect(subject.sync).to be true
|
206
228
|
end
|
207
229
|
|
208
230
|
it 'installs the module when it is absent' do
|
209
231
|
allow(subject).to receive(:status).and_return :absent
|
210
232
|
expect(subject).to receive(:install)
|
211
|
-
subject.sync
|
233
|
+
expect(subject.sync).to be true
|
234
|
+
end
|
235
|
+
|
236
|
+
it 'returns false if `should_sync?` is false' do
|
237
|
+
# modules do not sync if they are not requested
|
238
|
+
mod = described_class.new('my_org/my_mod', '/path/to/mod', { overrides: { modules: { requested_modules: ['other_mod'] } } })
|
239
|
+
expect(mod.sync).to be false
|
212
240
|
end
|
213
241
|
end
|
214
242
|
|