yaml_inventory 0.0.2 → 0.0.3
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/README.md +47 -12
- data/lib/yaml_inventory/parser.rb +5 -1
- data/lib/yaml_inventory/version.rb +1 -1
- data/spec/fixtures/hosts.yml +38 -24
- data/spec/yaml_inventory_spec.rb +150 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b061deedfb691cd00330e2905ae3875636b1a5a
|
4
|
+
data.tar.gz: 7e124b6af2aa6c64294d15e258e179747bf9efa2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a3549ee0d3ed75573aee0568c16f2be6f30faa02ff84c190d367259b359f40173748c7e6952fecce2f397017aaf9980542608d1bd5e7ea35f47356ab5d5aaf0
|
7
|
+
data.tar.gz: b4b7a6c6acac3110d9eab4e9a7bcee7d1b1cc02fef71f2edd7c0ed0c1452a7084bbcc21733a7b993b7422a92eebf72d42f752be9d7a91d0943e157f4f6e855c5
|
data/README.md
CHANGED
@@ -1,30 +1,61 @@
|
|
1
1
|
# Ansible YAML Inventory
|
2
2
|
|
3
|
-
Ansible inventory script for defining inventory using YAML files.
|
3
|
+
Ansible inventory script for defining inventory using YAML files. YAML is pretty! And readily parseable in a a variety of languages other than Python, unlike the default `.ini` files ansible uses.
|
4
|
+
|
5
|
+
It's adapated from the YAML inventory script which used to be part of ansible but isn't anymore.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
7
|
-
|
9
|
+
Install with
|
8
10
|
|
9
|
-
gem
|
11
|
+
$ gem install yaml_inventory
|
10
12
|
|
11
|
-
|
13
|
+
## Usage
|
12
14
|
|
13
|
-
|
15
|
+
Adds the `yaminv` command.
|
14
16
|
|
15
|
-
|
17
|
+
For help:
|
16
18
|
|
17
|
-
$
|
19
|
+
$ yaminv --help
|
18
20
|
|
19
|
-
|
21
|
+
### With Ansible
|
20
22
|
|
21
|
-
|
23
|
+
Create a `hosts.yml` file in your current dir, and use it like this
|
22
24
|
|
23
|
-
|
25
|
+
$ ansible-playbook -i $(which yaminv) playbook.yml
|
24
26
|
|
25
|
-
|
27
|
+
When run with ansible-playbook it will always pick up the hosts.yml file in the current directory.
|
26
28
|
|
27
|
-
|
29
|
+
### Hosts File Format
|
30
|
+
|
31
|
+
```yaml
|
32
|
+
|
33
|
+
# standalone hosts are okay
|
34
|
+
- standalonehost1
|
35
|
+
- standalonehost2
|
36
|
+
|
37
|
+
# host with vars
|
38
|
+
- host: hostwithvars
|
39
|
+
vars:
|
40
|
+
- var1: hostvar1
|
41
|
+
- var2: hostvar2
|
42
|
+
|
43
|
+
# group with vars and hosts
|
44
|
+
- group: group2
|
45
|
+
vars:
|
46
|
+
- groupvar1: groupvar1
|
47
|
+
hosts:
|
48
|
+
- ghost1
|
49
|
+
- ghost2
|
50
|
+
groups:
|
51
|
+
- group1
|
52
|
+
|
53
|
+
# subgroup
|
54
|
+
- group: group1
|
55
|
+
hosts:
|
56
|
+
- host3
|
57
|
+
- hostwithvars
|
58
|
+
```
|
28
59
|
|
29
60
|
## Contributing
|
30
61
|
|
@@ -33,3 +64,7 @@ For help:
|
|
33
64
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
34
65
|
4. Push to the branch (`git push origin my-new-feature`)
|
35
66
|
5. Create new Pull Request
|
67
|
+
|
68
|
+
### Tests
|
69
|
+
|
70
|
+
Run with `rake test`
|
@@ -8,13 +8,17 @@ module YAMLInventory
|
|
8
8
|
@groups, @hosts = parse_hosts(inventory)
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def full
|
12
12
|
Hash[@groups.map { |g| [g.name, {
|
13
13
|
:hosts => g.get_hosts.map(&:name),
|
14
14
|
:vars => g.get_vars,
|
15
15
|
:children => g.get_children.map(&:name) }]}]
|
16
16
|
end
|
17
17
|
|
18
|
+
def groups
|
19
|
+
Hash[@groups.map { |g| [g.name, g.get_hosts.map(&:name)] }]
|
20
|
+
end
|
21
|
+
|
18
22
|
def host(host_name)
|
19
23
|
vars = @hosts.get_hosts.find { |h| h.name == host_name }.get_vars
|
20
24
|
if @options[:extra]
|
data/spec/fixtures/hosts.yml
CHANGED
@@ -1,37 +1,51 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
-
|
4
|
-
|
5
|
-
- myhost3
|
1
|
+
# standalone hosts are okay
|
2
|
+
- standalonehost1
|
3
|
+
- standalonehost2
|
4
|
+
- notstandalonehost
|
6
5
|
|
6
|
+
# host with vars
|
7
7
|
- host: hostwithvars
|
8
8
|
vars:
|
9
|
-
-
|
10
|
-
-
|
11
|
-
|
12
|
-
- subgroup1
|
9
|
+
- hostvar1: hostvar1v
|
10
|
+
- hostvar2: hostvar2
|
11
|
+
- overriddenh: overriddenbyhost
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
# groups:
|
19
|
-
# - group1
|
20
|
-
# - group2
|
13
|
+
- host: standalonehostwithvars
|
14
|
+
vars:
|
15
|
+
- hostvar3: hostvar3v
|
16
|
+
- hostvar4: hostvar4
|
21
17
|
|
22
|
-
|
18
|
+
# group with vars and hosts
|
19
|
+
- group: group1
|
23
20
|
vars:
|
24
|
-
-
|
21
|
+
- group1var1: group1var1
|
22
|
+
- overriddenh: overridden
|
23
|
+
- overriddenhg: overridden
|
25
24
|
hosts:
|
26
|
-
-
|
27
|
-
-
|
25
|
+
- newhost
|
26
|
+
- hostwithvars
|
28
27
|
groups:
|
29
|
-
-
|
28
|
+
- exsubgroup
|
29
|
+
# - implicitsubgroup
|
30
30
|
|
31
|
-
|
31
|
+
# explicit subgroup
|
32
|
+
- group: exsubgroup
|
33
|
+
vars:
|
34
|
+
- exsubvar1: exsubvar1
|
35
|
+
- overriddenhg: overriddenbygroup
|
32
36
|
hosts:
|
33
|
-
-
|
37
|
+
- notstandalonehost
|
34
38
|
|
39
|
+
# doesn't work
|
35
40
|
|
36
|
-
# -
|
41
|
+
# - host: subgrouphost
|
42
|
+
# vars:
|
43
|
+
# - subgrouphostvar1: subgrouphostvar1
|
44
|
+
# groups:
|
45
|
+
# - implicitsubgroup
|
37
46
|
|
47
|
+
# doesn't work
|
48
|
+
|
49
|
+
# - group: groupwithimpsub
|
50
|
+
# groups:
|
51
|
+
# - implicitsubgroup2
|
data/spec/yaml_inventory_spec.rb
CHANGED
@@ -3,17 +3,165 @@ require "pry"
|
|
3
3
|
require "pp"
|
4
4
|
|
5
5
|
describe YAMLInventory do
|
6
|
-
let(:inventory) do
|
6
|
+
let(:inventory) do
|
7
7
|
YAMLInventory::Parser.new(YAML.load_file("spec/fixtures/hosts.yml"))
|
8
8
|
end
|
9
9
|
|
10
|
+
describe "#full" do
|
11
|
+
it "makes the right groups" do
|
12
|
+
groups = %w( group1 exsubgroup ungrouped )
|
13
|
+
inventory.full.keys.sort.must_equal groups.sort
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "vars" do
|
17
|
+
it "supports setting vars" do
|
18
|
+
inventory.full["group1"][:vars]["group1var1"].must_equal "group1var1"
|
19
|
+
inventory.full["exsubgroup"][:vars]["exsubvar1"].must_equal "exsubvar1"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "inherits vars from parent groups" do
|
23
|
+
inventory.full["exsubgroup"][:vars]["group1var1"].must_equal "group1var1"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "overrides vars inherited from parent groups" do
|
27
|
+
inventory.full["group1"][:vars]["overriddenhg"].must_equal "overridden"
|
28
|
+
inventory.full["exsubgroup"][:vars]["overriddenhg"].must_equal "overriddenbygroup"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "does not inherit vars from child groups" do
|
32
|
+
inventory.full["group1"][:vars]["exsubvar1"].must_be_nil
|
33
|
+
end
|
34
|
+
|
35
|
+
it "does not inherit vars from hosts" do
|
36
|
+
inventory.full["group1"][:vars]["hostvar1"].must_be_nil
|
37
|
+
inventory.full["group1"][:vars]["hostvar2"].must_be_nil
|
38
|
+
end
|
39
|
+
|
40
|
+
it "does not inherit vars from hosts" do
|
41
|
+
inventory.full["group1"][:vars]["hostvar1"].must_be_nil
|
42
|
+
inventory.full["group1"][:vars]["hostvar2"].must_be_nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "hosts" do
|
47
|
+
it "supports setting undefined hosts" do
|
48
|
+
inventory.full["group1"][:hosts].must_include "newhost"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "supports setting previously-defined hosts" do
|
52
|
+
inventory.full["group1"][:hosts].must_include "hostwithvars"
|
53
|
+
inventory.full["exsubgroup"][:hosts].must_include "notstandalonehost"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "encompasses hosts from child groups" do
|
57
|
+
inventory.full["group1"][:hosts].must_include "notstandalonehost"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "does not inherit hosts from parent groups" do
|
61
|
+
inventory.full["exsubgroup"][:hosts].wont_include "newhost"
|
62
|
+
inventory.full["exsubgroup"][:hosts].wont_include "hostwithvars"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "allows defining groups within hosts" do
|
66
|
+
skip "Not implemented yet"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "allows defining groups within groups" do
|
70
|
+
skip "Not implemented yet"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "groups" do
|
75
|
+
it "sets child groups" do
|
76
|
+
inventory.full["group1"][:children].must_include "exsubgroup"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "'ungrouped' group" do
|
81
|
+
subject do
|
82
|
+
inventory.full["ungrouped"]
|
83
|
+
end
|
84
|
+
|
85
|
+
let :standalones do
|
86
|
+
%w(standalonehost1 standalonehost2 standalonehostwithvars).sort
|
87
|
+
end
|
88
|
+
|
89
|
+
it "has hosts" do
|
90
|
+
subject[:hosts].wont_be_nil
|
91
|
+
end
|
92
|
+
|
93
|
+
it "contains only standalone hosts" do
|
94
|
+
subject[:hosts].sort.must_equal standalones
|
95
|
+
end
|
96
|
+
|
97
|
+
it "doesn't contain hosts that have groups" do
|
98
|
+
subject[:hosts].wont_include "notstandalonehost"
|
99
|
+
end
|
100
|
+
|
101
|
+
it "has no vars" do
|
102
|
+
subject[:vars].must_be_empty
|
103
|
+
end
|
104
|
+
|
105
|
+
it "has no children" do
|
106
|
+
subject[:children].must_be_empty
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
10
112
|
describe "#groups" do
|
11
|
-
|
113
|
+
subject do
|
12
114
|
inventory.groups
|
13
115
|
end
|
116
|
+
|
117
|
+
it "puts the ungrouped ones into 'ungrouped'" do
|
118
|
+
subject["ungrouped"].sort.must_equal %w( standalonehost1 standalonehost2 standalonehostwithvars ).sort
|
119
|
+
end
|
120
|
+
|
121
|
+
it "collects subgroup hosts" do
|
122
|
+
subject["group1"].sort.must_equal %w( newhost hostwithvars notstandalonehost ).sort
|
123
|
+
end
|
124
|
+
|
125
|
+
it "doesn't collected supergroup hosts" do
|
126
|
+
subject["exsubgroup"].sort.must_equal %w( notstandalonehost ).sort
|
127
|
+
end
|
14
128
|
end
|
15
129
|
|
16
130
|
describe "#host" do
|
131
|
+
def host(hostname, var = nil)
|
132
|
+
h = inventory.host(hostname)
|
133
|
+
var ? h[var] : h
|
134
|
+
end
|
135
|
+
|
136
|
+
it "returns vars when they are set on hosts" do
|
137
|
+
host("hostwithvars", "hostvar1").must_equal "hostvar1v"
|
138
|
+
host("standalonehostwithvars", "hostvar3").must_equal "hostvar3v"
|
139
|
+
end
|
140
|
+
|
141
|
+
it "returns no vars for standalone hosts" do
|
142
|
+
host("standalonehost1").must_be_empty
|
143
|
+
end
|
144
|
+
|
145
|
+
it "inherits vars from groups" do
|
146
|
+
host("newhost", "group1var1").must_equal "group1var1"
|
147
|
+
end
|
148
|
+
|
149
|
+
it "inherits vars from parent groups" do
|
150
|
+
host("notstandalonehost", "group1var1").must_equal "group1var1"
|
151
|
+
end
|
152
|
+
|
153
|
+
it "overrides inherited vars with its own" do
|
154
|
+
host("hostwithvars", "overriddenh").must_equal "overriddenbyhost"
|
155
|
+
end
|
156
|
+
|
157
|
+
it "gives precedence to group vars from its most direct parent" do
|
158
|
+
host("notstandalonehost", "overriddenhg").must_equal "overriddenbygroup"
|
159
|
+
end
|
160
|
+
|
161
|
+
it "inherits group vars from ALL its parents" do
|
162
|
+
skip "No example yet"
|
163
|
+
end
|
164
|
+
|
17
165
|
it "doesn't explode too hard" do
|
18
166
|
inventory.host("hostwithvars")
|
19
167
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml_inventory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Leavitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|