vagrant-ansible_auto 0.1.5 → 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/CHANGELOG.md +26 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +172 -0
- data/README.md +53 -12
- data/Rakefile +9 -7
- data/TODO.md +14 -0
- data/Vagrantfile +37 -15
- data/lib/vagrant/ansible_auto/cap/guest/posix/check_open_port.rb +22 -3
- data/lib/vagrant/ansible_auto/cap/guest/posix/executable_installed.rb +10 -2
- data/lib/vagrant/ansible_auto/cap/guest/posix/gateway_addresses.rb +8 -23
- data/lib/vagrant/ansible_auto/cap/guest/posix/private_key.rb +16 -1
- data/lib/vagrant/ansible_auto/cap/guest/posix/public_key.rb +18 -3
- data/lib/vagrant/ansible_auto/cap/guest/posix/ssh_server_address.rb +22 -12
- data/lib/vagrant/ansible_auto/cap/guest/posix.rb +16 -0
- data/lib/vagrant/ansible_auto/command/inventory.rb +37 -11
- data/lib/vagrant/ansible_auto/command/root.rb +34 -31
- data/lib/vagrant/ansible_auto/config.rb +74 -33
- data/lib/vagrant/ansible_auto/errors.rb +30 -1
- data/lib/vagrant/ansible_auto/host.rb +123 -34
- data/lib/vagrant/ansible_auto/inventory.rb +196 -34
- data/lib/vagrant/ansible_auto/plugin.rb +23 -8
- data/lib/vagrant/ansible_auto/provisioner.rb +121 -79
- data/lib/vagrant/ansible_auto/util/config.rb +61 -0
- data/lib/vagrant/ansible_auto/util/hash_with_indifferent_access.rb +58 -0
- data/lib/vagrant/ansible_auto/util/keys.rb +49 -0
- data/lib/vagrant/ansible_auto/util/shell_quote.rb +24 -0
- data/lib/vagrant/ansible_auto/version.rb +2 -1
- data/lib/vagrant/ansible_auto.rb +15 -0
- data/locales/en.yml +34 -0
- data/spec/spec_helper.rb +5 -85
- data/spec/support/context.rb +111 -0
- data/spec/support/matchers.rb +45 -0
- data/spec/unit/vagrant/ansible_auto/config_spec.rb +72 -0
- data/spec/unit/vagrant/ansible_auto/host_spec.rb +131 -0
- data/spec/unit/vagrant/ansible_auto/inventory_spec.rb +349 -0
- data/spec/unit/vagrant/ansible_auto/provisioner_spec.rb +248 -0
- data/spec/unit/vagrant/ansible_auto/util/config_spec.rb +63 -0
- data/spec/unit/vagrant/ansible_auto/util/keys_spec.rb +66 -0
- data/vagrant-ansible_auto.gemspec +6 -4
- data/vagrant-spec.config.rb +3 -0
- data/yard/extensions.rb +45 -0
- metadata +36 -11
- data/Vagrantfile2 +0 -4
- data/Vagrantfile3 +0 -8
- data/Vagrantfile4 +0 -31
- data/lib/vagrant/ansible_auto/cap/guest/posix/bash_installed.rb +0 -30
- data/lib/vagrant/ansible_auto/util.rb +0 -24
- data/spec/vagrant/ansible_auto/host_spec.rb +0 -43
- data/spec/vagrant/ansible_auto/inventory_spec.rb +0 -79
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
require 'vagrant/ansible_auto/util/keys'
|
6
|
+
|
7
|
+
describe VagrantPlugins::AnsibleAuto::Util::Keys do
|
8
|
+
include_context 'machine'
|
9
|
+
|
10
|
+
let(:including_klass) do
|
11
|
+
Class.new do
|
12
|
+
include VagrantPlugins::AnsibleAuto::Util::Keys
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:including_instance) { including_klass.new }
|
17
|
+
|
18
|
+
let(:fake_private_key_path) { temporary_file('+-----NOT AN RSA PRIVATE KEY-----+') }
|
19
|
+
|
20
|
+
describe '#insecure_key_path' do
|
21
|
+
it 'returns the path to the Vagrant insecure key' do
|
22
|
+
expect(including_instance.insecure_key_path).to be_a Pathname
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#insecure_key_contents' do
|
27
|
+
it 'returns the contents of the Vagrant insecure key' do
|
28
|
+
expect(including_instance.insecure_key_contents).to be_a String
|
29
|
+
expect(including_instance.insecure_key_contents).to include('BEGIN RSA PRIVATE KEY')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#insecure_key?' do
|
34
|
+
it 'indicates whether the provided key file contains the Vagrant insecure key' do
|
35
|
+
expect(including_instance.insecure_key?(including_instance.insecure_key_path)).to be true
|
36
|
+
expect(including_instance.insecure_key?(fake_private_key_path)).to be false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#fetch_private_key' do
|
41
|
+
context 'given a machine with no private keys configured' do
|
42
|
+
before do
|
43
|
+
allow(machine).to receive(:ssh_info).and_return(nil)
|
44
|
+
allow(machine.config.ssh).to receive(:insert_key).and_return(true)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns the machine's default private key" do
|
48
|
+
expect(including_instance.fetch_private_key(machine)).to eq(machine.env.default_private_key_path)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'given a machine with at least one private key configured' do
|
53
|
+
let(:private_key_paths) do
|
54
|
+
[including_instance.insecure_key_path, fake_private_key_path]
|
55
|
+
end
|
56
|
+
|
57
|
+
before do
|
58
|
+
allow(ssh_info).to receive(:fetch).with(:private_key_path, anything).and_return(private_key_paths)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns the first of the machine's private keys that is not the Vagrant insecure key" do
|
62
|
+
expect(including_instance.fetch_private_key(machine)).to eq(fake_private_key_path)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'vagrant/ansible_auto/version'
|
@@ -16,17 +17,18 @@ Gem::Specification.new do |spec|
|
|
16
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
18
|
|
18
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |file|
|
19
|
-
file.start_with?('.')
|
20
|
+
file.start_with?('.') || spec.test_files.include?(file)
|
20
21
|
end
|
21
22
|
|
22
23
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
24
|
spec.require_paths = ['lib']
|
24
25
|
|
25
|
-
spec.add_development_dependency 'bundler',
|
26
|
-
spec.add_development_dependency 'rake',
|
27
|
-
spec.add_development_dependency 'rspec',
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.12.5'
|
27
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
28
|
+
spec.add_development_dependency 'rspec', '~> 2.14'
|
28
29
|
spec.add_development_dependency 'simplecov'
|
29
30
|
spec.add_development_dependency 'rubocop'
|
30
31
|
spec.add_development_dependency 'cane'
|
31
32
|
spec.add_development_dependency 'coveralls'
|
33
|
+
spec.add_development_dependency 'yard'
|
32
34
|
end
|
data/yard/extensions.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
|
3
|
+
module YARD
|
4
|
+
module VagrantPlugins
|
5
|
+
# Custom class handler for documenting class inheritance from
|
6
|
+
# +Vagrant.plugin+
|
7
|
+
class ClassHandler < YARD::Handlers::Ruby::ClassHandler
|
8
|
+
private
|
9
|
+
|
10
|
+
def parse_superclass(superclass)
|
11
|
+
return nil unless superclass
|
12
|
+
|
13
|
+
case superclass.type
|
14
|
+
when :call, :command_call
|
15
|
+
cname = superclass.namespace.source
|
16
|
+
if cname =~ /^Vagrant$/ && superclass.method_name(true) == :plugin
|
17
|
+
members = superclass.parameters.map { |m| handle_superclass_parameter(m) }
|
18
|
+
|
19
|
+
begin
|
20
|
+
return Vagrant.plugin(*(members[0..1])).to_s
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
def handle_superclass_parameter(parameter)
|
29
|
+
case parameter
|
30
|
+
when TrueClass, FalseClass, NilClass
|
31
|
+
parameter
|
32
|
+
else
|
33
|
+
case parameter.type
|
34
|
+
when :symbol_literal
|
35
|
+
parameter.source[1..-1].to_sym
|
36
|
+
when :int
|
37
|
+
parameter.source.to_i
|
38
|
+
else
|
39
|
+
parameter.source
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-ansible_auto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignacio Galindo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.14
|
47
|
+
version: '2.14'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.14
|
54
|
+
version: '2.14'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: simplecov
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: Helps defining and building ansible inventory files programatically via
|
112
126
|
configuration and command modules.
|
113
127
|
email:
|
@@ -116,17 +130,16 @@ executables: []
|
|
116
130
|
extensions: []
|
117
131
|
extra_rdoc_files: []
|
118
132
|
files:
|
133
|
+
- CHANGELOG.md
|
119
134
|
- Gemfile
|
135
|
+
- Gemfile.lock
|
120
136
|
- LICENSE.md
|
121
137
|
- README.md
|
122
138
|
- Rakefile
|
123
139
|
- TODO.md
|
124
140
|
- Vagrantfile
|
125
|
-
- Vagrantfile2
|
126
|
-
- Vagrantfile3
|
127
|
-
- Vagrantfile4
|
128
141
|
- lib/vagrant/ansible_auto.rb
|
129
|
-
- lib/vagrant/ansible_auto/cap/guest/posix
|
142
|
+
- lib/vagrant/ansible_auto/cap/guest/posix.rb
|
130
143
|
- lib/vagrant/ansible_auto/cap/guest/posix/check_open_port.rb
|
131
144
|
- lib/vagrant/ansible_auto/cap/guest/posix/executable_installed.rb
|
132
145
|
- lib/vagrant/ansible_auto/cap/guest/posix/gateway_addresses.rb
|
@@ -141,13 +154,25 @@ files:
|
|
141
154
|
- lib/vagrant/ansible_auto/inventory.rb
|
142
155
|
- lib/vagrant/ansible_auto/plugin.rb
|
143
156
|
- lib/vagrant/ansible_auto/provisioner.rb
|
144
|
-
- lib/vagrant/ansible_auto/util.rb
|
157
|
+
- lib/vagrant/ansible_auto/util/config.rb
|
158
|
+
- lib/vagrant/ansible_auto/util/hash_with_indifferent_access.rb
|
159
|
+
- lib/vagrant/ansible_auto/util/keys.rb
|
160
|
+
- lib/vagrant/ansible_auto/util/shell_quote.rb
|
145
161
|
- lib/vagrant/ansible_auto/version.rb
|
162
|
+
- locales/en.yml
|
146
163
|
- playbooks/test.yml
|
147
164
|
- spec/spec_helper.rb
|
148
|
-
- spec/
|
149
|
-
- spec/
|
165
|
+
- spec/support/context.rb
|
166
|
+
- spec/support/matchers.rb
|
167
|
+
- spec/unit/vagrant/ansible_auto/config_spec.rb
|
168
|
+
- spec/unit/vagrant/ansible_auto/host_spec.rb
|
169
|
+
- spec/unit/vagrant/ansible_auto/inventory_spec.rb
|
170
|
+
- spec/unit/vagrant/ansible_auto/provisioner_spec.rb
|
171
|
+
- spec/unit/vagrant/ansible_auto/util/config_spec.rb
|
172
|
+
- spec/unit/vagrant/ansible_auto/util/keys_spec.rb
|
150
173
|
- vagrant-ansible_auto.gemspec
|
174
|
+
- vagrant-spec.config.rb
|
175
|
+
- yard/extensions.rb
|
151
176
|
homepage: https://github.com/joiggama/vagrant-ansible_auto
|
152
177
|
licenses:
|
153
178
|
- MIT
|
data/Vagrantfile2
DELETED
data/Vagrantfile3
DELETED
data/Vagrantfile4
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
Vagrant.configure(2) do |config|
|
2
|
-
config.vm.box = 'hashicorp/precise64'
|
3
|
-
|
4
|
-
(1..2).each do |i|
|
5
|
-
name = "ansible-test-worker-#{i}"
|
6
|
-
config.vm.define name do |target|
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
config.vm.define 'ansible-test-control' do |machine|
|
11
|
-
machine.vm.provision :ansible_auto do |ansible|
|
12
|
-
ansible.limit = '*'
|
13
|
-
ansible.playbook = 'playbooks/test.yml'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
config.ansible.groups = {
|
18
|
-
'control' => %w(ansible-test-control),
|
19
|
-
'worker' => %w(ansible-test-worker-1 ansible-test-worker-2),
|
20
|
-
'cluster:children' => %w(control worker),
|
21
|
-
}
|
22
|
-
|
23
|
-
config.ansible.vars = {
|
24
|
-
'control' => {
|
25
|
-
'role' => 'ansible-control',
|
26
|
-
},
|
27
|
-
'worker' => {
|
28
|
-
'role' => 'ansible-worker',
|
29
|
-
}
|
30
|
-
}
|
31
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module VagrantPlugins
|
3
|
-
module AnsibleAuto
|
4
|
-
module Cap
|
5
|
-
module Guest
|
6
|
-
module POSIX
|
7
|
-
class BashInstalled
|
8
|
-
class << self
|
9
|
-
def bash_installed?(machine, version = nil)
|
10
|
-
machine.communicate.execute(%q(command bash -c 'printf -- "%s\t%s" "$BASH" "$BASH_VERSION"'), error_check: false) do |type, data|
|
11
|
-
data.chomp!
|
12
|
-
|
13
|
-
# Not sure why, but we always get an empty first line...
|
14
|
-
next if data.empty?
|
15
|
-
|
16
|
-
if type == :stdout
|
17
|
-
bash_path, bash_version = *data.split("\t")
|
18
|
-
return (!bash_path.empty? and (version.nil? or version == bash_version))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
false
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module VagrantPlugins
|
3
|
-
module AnsibleAuto
|
4
|
-
module Util
|
5
|
-
# Adapted from VagrantPlugins::CommunicatorSSH::Communicator#insecure_key?.
|
6
|
-
# This will test whether +path+ is the Vagrant insecure private key.
|
7
|
-
#
|
8
|
-
# @param [String] path
|
9
|
-
def insecure_key?(path)
|
10
|
-
return false if path.nil? or !File.file?(path)
|
11
|
-
@__insecure_key ||= Vagrant.source_root.join('keys/vagrant').read.chomp
|
12
|
-
File.read(path).chomp == @_insecure_key
|
13
|
-
end
|
14
|
-
|
15
|
-
def fetch_private_key(machine)
|
16
|
-
if machine.config.ssh.insert_key && !machine.ssh_info.nil?
|
17
|
-
machine.ssh_info.fetch(:private_key_path, []).find { |k| !insecure_key?(k) }
|
18
|
-
else
|
19
|
-
machine.env.default_private_key_path
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
require 'vagrant/ansible_auto/host'
|
5
|
-
|
6
|
-
describe VagrantPlugins::AnsibleAuto::HostMachine do
|
7
|
-
include_context 'machine'
|
8
|
-
|
9
|
-
subject { described_class.new(machine) }
|
10
|
-
|
11
|
-
describe '#ssh_user' do
|
12
|
-
it 'corresponds to machine.ssh_info[:username]' do
|
13
|
-
expect(ssh_info).to receive(:[]).with(:username).and_return('me')
|
14
|
-
expect(subject.ssh_user).to eq 'me'
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '#ssh_host' do
|
19
|
-
it 'corresponds to machine.ssh_info[:host]' do
|
20
|
-
expect(ssh_info).to receive(:[]).with(:host).and_return('foo.bar.net')
|
21
|
-
expect(subject.ssh_host).to eq 'foo.bar.net'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '#ssh_port' do
|
26
|
-
it 'corresponds to machine.ssh_info[:port]' do
|
27
|
-
expect(ssh_info).to receive(:[]).with(:port).and_return(2222)
|
28
|
-
expect(subject.ssh_port).to eq 2222
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#ssh_private_key_file' do
|
33
|
-
it 'corresponds to machine.ssh_info[:private_key_path]' do
|
34
|
-
expect(ssh_info).to receive(:fetch).with(:private_key_path, anything).and_return(['/path/to/private_key'])
|
35
|
-
expect(subject.ssh_private_key_file).to eq '/path/to/private_key'
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'has no default' do
|
39
|
-
expect(ssh_info).to receive(:fetch).with(:private_key_path, anything).and_return([])
|
40
|
-
expect(subject.ssh_private_key_file).to be_nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
require 'vagrant/ansible_auto/inventory'
|
5
|
-
|
6
|
-
describe VagrantPlugins::AnsibleAuto::Inventory do
|
7
|
-
subject { described_class.new }
|
8
|
-
|
9
|
-
# include_context 'machine'
|
10
|
-
|
11
|
-
describe '#add_group' do
|
12
|
-
it 'adds a list of hosts to the group cache' do
|
13
|
-
subject.add_group(:mygroup, 'db', 'bastion', 'firewall')
|
14
|
-
subject.groups.tap do |groups|
|
15
|
-
expect(groups).to have_key("mygroup")
|
16
|
-
expect(groups["mygroup"]).to include('db', 'bastion', 'firewall')
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'appends new hosts to existing groups' do
|
21
|
-
subject.add_group(:mygroup, 'db', 'bastion', 'firewall')
|
22
|
-
subject.add_group(:mygroup, 'repo')
|
23
|
-
subject.groups.tap do |groups|
|
24
|
-
expect(groups).to have_key("mygroup")
|
25
|
-
expect(groups["mygroup"]).to include('db', 'bastion', 'firewall', 'repo')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '#add_host' do
|
31
|
-
include_context 'host'
|
32
|
-
|
33
|
-
it 'adds a host to the host cache' do
|
34
|
-
subject.add_host(host)
|
35
|
-
expect(subject.hosts).to include(host)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'does not allow duplicates' do
|
39
|
-
2.times { subject.add_host(host) }
|
40
|
-
expect(subject.hosts).to have(1).items
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'coerces instances of Vagrant::Machine to instances of Host' do
|
44
|
-
subject.add_host(machine)
|
45
|
-
expect(subject.hosts).to all(be_a(VagrantPlugins::AnsibleAuto::Host))
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'coerces names + hostvars to instances of Host' do
|
49
|
-
subject.add_host("mymachine", ansible_ssh_host: 'foo.bar.net')
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe '#groups=' do
|
54
|
-
it 'returns a hash of sets' do
|
55
|
-
expect(subject.groups).to be_a(Hash)
|
56
|
-
expect(subject.groups[:foo]).to be_a(Set)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe '#hosts=' do
|
61
|
-
it 'returns a set' do
|
62
|
-
expect(subject.hosts).to be_a(Set)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe '#vars=' do
|
67
|
-
it 'returns a hash of hashes' do
|
68
|
-
expect(subject.vars).to be_a(Hash)
|
69
|
-
expect(subject.vars[:meh]).to be_a(Hash)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe '#children=' do
|
74
|
-
it 'returns a hash of sets' do
|
75
|
-
expect(subject.children).to be_a(Hash)
|
76
|
-
expect(subject.children[:quux]).to be_a(Set)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|