moose-inventory 1.0.8 → 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 +5 -5
- data/.github/workflows/ci.yml +49 -0
- data/.github/workflows/release.yml +58 -0
- data/.gitignore +1 -1
- data/.gitleaks.toml +9 -0
- data/.rubocop.yml +19 -784
- data/BACKLOG.md +290 -0
- data/Gemfile.lock +95 -0
- data/README.md +38 -9
- data/Rakefile +1 -1
- data/bin/moose-inventory +1 -1
- data/docs/release/publishing.md +109 -0
- data/docs/release/release-readiness.md +55 -0
- data/docs/security-audit-2026-05-21.md +71 -0
- data/docs/security-audit-2026-05-26-rerun.md +75 -0
- data/docs/security-audit-2026-05-26.md +63 -0
- data/lib/moose_inventory/cli/formatter.rb +16 -17
- data/lib/moose_inventory/cli/group.rb +4 -1
- data/lib/moose_inventory/cli/group_add.rb +89 -75
- data/lib/moose_inventory/cli/group_addchild.rb +84 -71
- data/lib/moose_inventory/cli/group_addhost.rb +78 -69
- data/lib/moose_inventory/cli/group_addvar.rb +37 -37
- data/lib/moose_inventory/cli/group_get.rb +23 -26
- data/lib/moose_inventory/cli/group_list.rb +12 -15
- data/lib/moose_inventory/cli/group_listvars.rb +12 -14
- data/lib/moose_inventory/cli/group_rm.rb +104 -76
- data/lib/moose_inventory/cli/group_rmchild.rb +99 -54
- data/lib/moose_inventory/cli/group_rmhost.rb +64 -60
- data/lib/moose_inventory/cli/group_rmvar.rb +5 -5
- data/lib/moose_inventory/cli/helpers.rb +76 -0
- data/lib/moose_inventory/cli/host.rb +4 -1
- data/lib/moose_inventory/cli/host_add.rb +51 -66
- data/lib/moose_inventory/cli/host_addgroup.rb +77 -68
- data/lib/moose_inventory/cli/host_addvar.rb +6 -6
- data/lib/moose_inventory/cli/host_get.rb +15 -18
- data/lib/moose_inventory/cli/host_list.rb +3 -3
- data/lib/moose_inventory/cli/host_listvars.rb +21 -23
- data/lib/moose_inventory/cli/host_rm.rb +9 -9
- data/lib/moose_inventory/cli/host_rmgroup.rb +63 -60
- data/lib/moose_inventory/cli/host_rmvar.rb +3 -3
- data/lib/moose_inventory/config/config.rb +43 -40
- data/lib/moose_inventory/db/db.rb +92 -52
- data/lib/moose_inventory/db/models.rb +11 -12
- data/lib/moose_inventory/inventory_context.rb +50 -0
- data/lib/moose_inventory/operations/add_associations.rb +127 -0
- data/lib/moose_inventory/operations/add_groups.rb +115 -0
- data/lib/moose_inventory/operations/add_hosts.rb +110 -0
- data/lib/moose_inventory/operations/group_child_relations.rb +118 -0
- data/lib/moose_inventory/operations/group_cleanup.rb +55 -0
- data/lib/moose_inventory/operations/remove_associations.rb +101 -0
- data/lib/moose_inventory/operations/remove_groups.rb +79 -0
- data/lib/moose_inventory/version.rb +1 -1
- data/moose-inventory.gemspec +38 -20
- data/scripts/check.sh +10 -0
- data/scripts/ci/check_permissions.sh +35 -0
- data/scripts/ci/check_rubocop.sh +28 -0
- data/scripts/ci/check_secrets.sh +26 -0
- data/scripts/ci/check_security.sh +68 -0
- data/scripts/ci/install_security_tools.sh +47 -0
- data/scripts/ci/package_sanity.sh +46 -0
- data/scripts/files.rb +1 -4
- data/scripts/install_dependencies.sh +19 -0
- data/scripts/reports.sh +2 -2
- data/spec/lib/moose_inventory/cli/cli_spec.rb +13 -14
- data/spec/lib/moose_inventory/cli/group_add_spec.rb +118 -119
- data/spec/lib/moose_inventory/cli/group_addchild_spec.rb +49 -51
- data/spec/lib/moose_inventory/cli/group_addhost_spec.rb +80 -83
- data/spec/lib/moose_inventory/cli/group_addvar_spec.rb +91 -91
- data/spec/lib/moose_inventory/cli/group_get_spec.rb +22 -23
- data/spec/lib/moose_inventory/cli/group_list_spec.rb +19 -20
- data/spec/lib/moose_inventory/cli/group_listvar_spec.rb +35 -36
- data/spec/lib/moose_inventory/cli/group_rm_spec.rb +115 -78
- data/spec/lib/moose_inventory/cli/group_rmchild_spec.rb +86 -45
- data/spec/lib/moose_inventory/cli/group_rmhost_spec.rb +43 -46
- data/spec/lib/moose_inventory/cli/group_rmvar_spec.rb +131 -131
- data/spec/lib/moose_inventory/cli/group_spec.rb +9 -9
- data/spec/lib/moose_inventory/cli/host_add_spec.rb +103 -43
- data/spec/lib/moose_inventory/cli/host_addgroup_spec.rb +78 -80
- data/spec/lib/moose_inventory/cli/host_addvar_spec.rb +122 -122
- data/spec/lib/moose_inventory/cli/host_get_spec.rb +16 -16
- data/spec/lib/moose_inventory/cli/host_list_spec.rb +8 -8
- data/spec/lib/moose_inventory/cli/host_listvar_spec.rb +50 -52
- data/spec/lib/moose_inventory/cli/host_rm_spec.rb +12 -12
- data/spec/lib/moose_inventory/cli/host_rmgroup_spec.rb +48 -51
- data/spec/lib/moose_inventory/cli/host_rmvar_spec.rb +136 -136
- data/spec/lib/moose_inventory/config/config_spec.rb +16 -3
- data/spec/lib/moose_inventory/db/db_spec.rb +386 -2
- data/spec/lib/moose_inventory/db/models_spec.rb +10 -11
- data/spec/lib/moose_inventory/operations/add_associations_spec.rb +77 -0
- data/spec/lib/moose_inventory/operations/add_groups_spec.rb +65 -0
- data/spec/lib/moose_inventory/operations/add_hosts_spec.rb +69 -0
- data/spec/lib/moose_inventory/operations/group_child_relations_spec.rb +76 -0
- data/spec/lib/moose_inventory/operations/remove_associations_spec.rb +78 -0
- data/spec/lib/moose_inventory/operations/remove_groups_spec.rb +57 -0
- data/spec/shared/shared_config_setup.rb +2 -2
- data/spec/spec_helper.rb +7 -8
- metadata +157 -105
- data/.coveralls.yml +0 -0
- data/Guardfile +0 -38
- data/config/dotfiles/coveralls.yml +0 -0
- data/config/dotfiles/gitignore +0 -20
- data/config/dotfiles/rubocop.yml +0 -793
- data/scripts/guard_quality.sh +0 -3
- data/scripts/guard_test.sh +0 -2
|
@@ -9,7 +9,7 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
9
9
|
@mockarg_parts = {
|
|
10
10
|
config: File.join(spec_root, 'config/config.yml'),
|
|
11
11
|
format: 'yaml',
|
|
12
|
-
env: 'test'
|
|
12
|
+
env: 'test',
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
@mockargs = []
|
|
@@ -19,7 +19,7 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
@console = Moose::Inventory::Cli::Formatter
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
@config = Moose::Inventory::Config
|
|
24
24
|
@config.init(@mockargs)
|
|
25
25
|
|
|
@@ -49,65 +49,63 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
49
49
|
@app.start(%w(group addchild))
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
# @console.out(actual, 'y')
|
|
53
|
+
|
|
54
54
|
# Check output
|
|
55
|
-
desired = { aborted: true}
|
|
55
|
+
desired = { aborted: true }
|
|
56
56
|
desired[:STDERR] = "ERROR: Wrong number of arguments, 0 for 2 or more.\n"
|
|
57
57
|
expected(actual, desired)
|
|
58
58
|
end
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
#------------------------
|
|
61
61
|
it 'ungrouped ... should abort with an error' do
|
|
62
|
-
parent_name =
|
|
63
|
-
child_name =
|
|
64
|
-
|
|
65
|
-
actual = runner
|
|
62
|
+
parent_name = 'ungrouped'
|
|
63
|
+
child_name = 'fake'
|
|
64
|
+
|
|
65
|
+
actual = runner do
|
|
66
66
|
@app.start(%W(group addchild #{parent_name} #{child_name}))
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
# @console.out(actual, 'y')
|
|
70
|
+
|
|
71
71
|
# Check output
|
|
72
|
-
desired = { aborted: true}
|
|
72
|
+
desired = { aborted: true }
|
|
73
73
|
desired[:STDERR] = "ERROR: Cannot manually manipulate the automatic group 'ungrouped'.\n"
|
|
74
74
|
expected(actual, desired)
|
|
75
|
-
|
|
75
|
+
|
|
76
76
|
############################
|
|
77
|
-
# Should work the other way round too, when the child in the ungrouped item
|
|
78
|
-
parent_name =
|
|
79
|
-
child_name =
|
|
80
|
-
|
|
81
|
-
actual = runner
|
|
77
|
+
# Should work the other way round too, when the child in the ungrouped item
|
|
78
|
+
parent_name = 'fake'
|
|
79
|
+
child_name = 'ungrouped'
|
|
80
|
+
|
|
81
|
+
actual = runner do
|
|
82
82
|
@app.start(%W(group rmchild #{parent_name} #{child_name}))
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
# @console.out(actual, 'y')
|
|
86
|
+
|
|
87
87
|
# Check output
|
|
88
|
-
desired = { aborted: true}
|
|
88
|
+
desired = { aborted: true }
|
|
89
89
|
desired[:STDERR] = "ERROR: Cannot manually manipulate the automatic group 'ungrouped'.\n"
|
|
90
90
|
expected(actual, desired)
|
|
91
|
-
|
|
92
|
-
end
|
|
91
|
+
end
|
|
93
92
|
|
|
94
93
|
#------------------------
|
|
95
94
|
it 'GROUP CHILDGROUP ... should abort if GROUP does not exist' do
|
|
96
|
-
|
|
97
95
|
pname = 'parent_group'
|
|
98
96
|
cname = 'child group'
|
|
99
|
-
|
|
97
|
+
|
|
100
98
|
actual = runner do
|
|
101
99
|
@app.start(%W(group rmchild #{pname} #{cname}))
|
|
102
100
|
end
|
|
103
101
|
|
|
104
|
-
|
|
102
|
+
# @console.out(actual, 'y')
|
|
105
103
|
# Check output
|
|
106
|
-
desired = { aborted: true}
|
|
107
|
-
desired[:STDOUT] =
|
|
104
|
+
desired = { aborted: true }
|
|
105
|
+
desired[:STDOUT] =
|
|
108
106
|
"Dissociate parent group '#{pname}' from child group(s) '#{cname}':\n"\
|
|
109
107
|
" - retrieve group '#{pname}'...\n"
|
|
110
|
-
desired[:STDERR] =
|
|
108
|
+
desired[:STDERR] =
|
|
111
109
|
"ERROR: The group '#{pname}' does not exist.\n"\
|
|
112
110
|
"An error occurred during a transaction, any changes have been rolled back.\n"
|
|
113
111
|
expected(actual, desired)
|
|
@@ -115,21 +113,20 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
115
113
|
|
|
116
114
|
#------------------------
|
|
117
115
|
it 'GROUP CHILDGROUP ... should succeed with warnings if CHILDGROUP is not associated' do
|
|
118
|
-
|
|
119
116
|
pname = 'parent_group'
|
|
120
117
|
cname = 'child group'
|
|
121
118
|
|
|
122
119
|
runner { @app.start(%W(group add #{pname} #{cname})) }
|
|
123
|
-
|
|
120
|
+
|
|
124
121
|
actual = runner do
|
|
125
122
|
@app.start(%W(group rmchild #{pname} #{cname}))
|
|
126
123
|
end
|
|
127
124
|
|
|
128
|
-
|
|
129
|
-
|
|
125
|
+
# @console.out(actual, 'y')
|
|
126
|
+
|
|
130
127
|
# Check output
|
|
131
128
|
desired = {}
|
|
132
|
-
desired[:STDOUT] =
|
|
129
|
+
desired[:STDOUT] =
|
|
133
130
|
"Dissociate parent group '#{pname}' from child group(s) '#{cname}':\n"\
|
|
134
131
|
" - retrieve group '#{pname}'...\n"\
|
|
135
132
|
" - OK\n"\
|
|
@@ -137,9 +134,9 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
137
134
|
" - doesn't exist, skipping.\n"\
|
|
138
135
|
" - OK\n"\
|
|
139
136
|
" - all OK\n"\
|
|
140
|
-
"Succeeded, with warnings.\n"
|
|
141
|
-
|
|
142
|
-
desired[:STDERR] =
|
|
137
|
+
"Succeeded, with warnings.\n"
|
|
138
|
+
|
|
139
|
+
desired[:STDERR] =
|
|
143
140
|
"WARNING: Association {group:#{pname} <-> group:#{cname}} does not exist, skipping.\n"
|
|
144
141
|
|
|
145
142
|
expected(actual, desired)
|
|
@@ -147,31 +144,75 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
147
144
|
|
|
148
145
|
#------------------------
|
|
149
146
|
it 'GROUP CHILDGROUP ... should succeed without warnings if CHILDGROUP is associated' do
|
|
150
|
-
|
|
151
147
|
pname = 'parent_group'
|
|
152
148
|
cname = 'child group'
|
|
153
149
|
|
|
154
150
|
runner { @app.start(%W(group add #{pname} #{cname})) }
|
|
155
151
|
runner { @app.start(%W(group addchild #{pname} #{cname})) }
|
|
156
|
-
|
|
152
|
+
|
|
157
153
|
actual = runner do
|
|
158
154
|
@app.start(%W(group rmchild #{pname} #{cname}))
|
|
159
155
|
end
|
|
160
156
|
|
|
161
|
-
|
|
162
|
-
|
|
157
|
+
# @console.out(actual, 'y')
|
|
158
|
+
|
|
163
159
|
# Check output
|
|
164
160
|
desired = {}
|
|
165
|
-
desired[:STDOUT] =
|
|
161
|
+
desired[:STDOUT] =
|
|
166
162
|
"Dissociate parent group '#{pname}' from child group(s) '#{cname}':\n"\
|
|
167
163
|
" - retrieve group '#{pname}'...\n"\
|
|
168
164
|
" - OK\n"\
|
|
169
165
|
" - remove association {group:#{pname} <-> group:#{cname}}...\n"\
|
|
170
166
|
" - OK\n"\
|
|
171
167
|
" - all OK\n"\
|
|
172
|
-
"Succeeded.\n"
|
|
173
|
-
|
|
168
|
+
"Succeeded.\n"
|
|
169
|
+
|
|
174
170
|
expected(actual, desired)
|
|
175
171
|
end
|
|
172
|
+
|
|
173
|
+
#------------------------
|
|
174
|
+
it 'GROUP CHILDGROUP --delete-orphans ... should delete orphaned child groups recursively' do
|
|
175
|
+
runner { @app.start(%w(group add parent)) }
|
|
176
|
+
runner { @app.start(%w(group add child --hosts child-host)) }
|
|
177
|
+
runner { @app.start(%w(group add grandchild)) }
|
|
178
|
+
runner { @app.start(%w(group addchild parent child)) }
|
|
179
|
+
runner { @app.start(%w(group addchild child grandchild)) }
|
|
180
|
+
|
|
181
|
+
actual = runner do
|
|
182
|
+
@app.start(%w(group rmchild --delete-orphans parent child))
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
expect(actual[:unexpected]).to eq(false)
|
|
186
|
+
expect(actual[:aborted]).to eq(false)
|
|
187
|
+
expect(actual[:STDOUT]).to include("- Recursively delete orphaned group 'child'...\n")
|
|
188
|
+
expect(actual[:STDOUT]).to include("- Recursively delete orphaned group 'grandchild'...\n")
|
|
189
|
+
|
|
190
|
+
expect(@db.models[:group].find(name: 'parent')).not_to be_nil
|
|
191
|
+
%w(child grandchild).each do |name|
|
|
192
|
+
expect(@db.models[:group].find(name: name)).to be_nil
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
host = @db.models[:host].find(name: 'child-host')
|
|
196
|
+
expect(host.groups_dataset[name: 'ungrouped']).not_to be_nil
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
#------------------------
|
|
200
|
+
it 'GROUP CHILDGROUP --delete-orphans ... should preserve child groups with another parent' do
|
|
201
|
+
runner { @app.start(%w(group add parent other-parent)) }
|
|
202
|
+
runner { @app.start(%w(group addchild parent child)) }
|
|
203
|
+
runner { @app.start(%w(group addchild other-parent child)) }
|
|
204
|
+
|
|
205
|
+
actual = runner do
|
|
206
|
+
@app.start(%w(group rmchild --delete-orphans parent child))
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
expect(actual[:unexpected]).to eq(false)
|
|
210
|
+
expect(actual[:aborted]).to eq(false)
|
|
211
|
+
|
|
212
|
+
child = @db.models[:group].find(name: 'child')
|
|
213
|
+
expect(child).not_to be_nil
|
|
214
|
+
expect(child.parents_dataset[name: 'parent']).to be_nil
|
|
215
|
+
expect(child.parents_dataset[name: 'other-parent']).not_to be_nil
|
|
216
|
+
end
|
|
176
217
|
end
|
|
177
218
|
end
|
|
@@ -9,7 +9,7 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
9
9
|
@mockarg_parts = {
|
|
10
10
|
config: File.join(spec_root, 'config/config.yml'),
|
|
11
11
|
format: 'yaml',
|
|
12
|
-
env: 'test'
|
|
12
|
+
env: 'test',
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
@mockargs = []
|
|
@@ -41,7 +41,7 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
41
41
|
result = @group.instance_methods(false).include?(:rmhost)
|
|
42
42
|
expect(result).to eq(true)
|
|
43
43
|
end
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
#----------------
|
|
46
46
|
|
|
47
47
|
#------------------------
|
|
@@ -51,7 +51,7 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
# Check output
|
|
54
|
-
desired = { aborted: true}
|
|
54
|
+
desired = { aborted: true }
|
|
55
55
|
desired[:STDERR] = "ERROR: Wrong number of arguments, 0 for 2 or more.\n"
|
|
56
56
|
expected(actual, desired)
|
|
57
57
|
end
|
|
@@ -65,16 +65,16 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
# Check output
|
|
68
|
-
desired = { aborted: true}
|
|
69
|
-
desired[:STDOUT] =
|
|
68
|
+
desired = { aborted: true }
|
|
69
|
+
desired[:STDOUT] =
|
|
70
70
|
"Dissociate group '#{group_name}' from host(s) '#{host_name}':\n"\
|
|
71
71
|
" - retrieve group '#{group_name}'...\n"
|
|
72
|
-
desired[:STDERR] =
|
|
72
|
+
desired[:STDERR] =
|
|
73
73
|
"ERROR: The group '#{group_name}' does not exist.\n"\
|
|
74
74
|
"An error occurred during a transaction, any changes have been rolled back.\n"
|
|
75
75
|
expected(actual, desired)
|
|
76
76
|
end
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
#------------------------
|
|
79
79
|
it 'GROUP HOST ... should dissociate the group from an existing group' do
|
|
80
80
|
host_name = 'test1'
|
|
@@ -82,22 +82,22 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
82
82
|
|
|
83
83
|
runner { @app.start(%W(host add #{host_name})) }
|
|
84
84
|
runner { @app.start(%W(group add #{group_name})) }
|
|
85
|
-
runner { @app.start(%W(group addhost #{group_name} #{host_name}
|
|
85
|
+
runner { @app.start(%W(group addhost #{group_name} #{host_name})) }
|
|
86
86
|
|
|
87
87
|
#
|
|
88
88
|
# Dissociate the host
|
|
89
89
|
# 1. expect that the group association is removed
|
|
90
90
|
# 2. expect that no association with ungrouped is made.
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
actual = runner do
|
|
93
|
-
@app.start(%W(group rmhost #{group_name} #{host_name}
|
|
93
|
+
@app.start(%W(group rmhost #{group_name} #{host_name}))
|
|
94
94
|
end
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
|
|
96
|
+
# @console.dump(actual, 'y')
|
|
97
|
+
|
|
98
98
|
# rubocop:disable Metrics/LineLength
|
|
99
|
-
desired = { aborted: false}
|
|
100
|
-
desired[:STDOUT] =
|
|
99
|
+
desired = { aborted: false }
|
|
100
|
+
desired[:STDOUT] =
|
|
101
101
|
"Dissociate group '#{group_name}' from host(s) '#{host_name}':\n"\
|
|
102
102
|
" - retrieve group '#{group_name}'...\n"\
|
|
103
103
|
" - OK\n"\
|
|
@@ -115,56 +115,55 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
115
115
|
hosts = group.hosts_dataset
|
|
116
116
|
expect(hosts.count).to eq(0)
|
|
117
117
|
end
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
#------------------------
|
|
120
120
|
it 'GROUP HOST ... should warn about non-existing associations' do
|
|
121
121
|
# 1. Should warn that the association doesn't exist.
|
|
122
|
-
# 2. Should complete with success. (desired state == actual state)
|
|
123
|
-
|
|
122
|
+
# 2. Should complete with success. (desired state == actual state)
|
|
123
|
+
|
|
124
124
|
host_name = 'test_host'
|
|
125
125
|
group_name = 'test_group'
|
|
126
126
|
runner { @app.start(%W(host add #{host_name})) }
|
|
127
127
|
runner { @app.start(%W(group add #{group_name})) }
|
|
128
128
|
runner { @app.start(%W(group addhost #{host_name})) }
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
actual = runner do
|
|
131
|
-
@app.start(%W(group rmhost #{group_name} #{host_name}))
|
|
131
|
+
@app.start(%W(group rmhost #{group_name} #{host_name}))
|
|
132
132
|
end
|
|
133
|
-
|
|
133
|
+
|
|
134
134
|
# rubocop:disable Metrics/LineLength
|
|
135
|
-
desired = { aborted: false}
|
|
136
|
-
desired[:STDOUT] =
|
|
135
|
+
desired = { aborted: false }
|
|
136
|
+
desired[:STDOUT] =
|
|
137
137
|
"Dissociate group '#{group_name}' from host(s) '#{host_name}':\n"\
|
|
138
138
|
" - retrieve group \'#{group_name}\'...\n"\
|
|
139
139
|
" - OK\n"\
|
|
140
|
-
" - remove association {group:#{group_name
|
|
140
|
+
" - remove association {group:#{group_name} <-> host:#{host_name}}...\n"\
|
|
141
141
|
" - doesn't exist, skipping.\n"\
|
|
142
142
|
" - OK\n"\
|
|
143
143
|
" - all OK\n"\
|
|
144
144
|
"Succeeded, with warnings.\n"
|
|
145
|
-
desired[:STDERR] =
|
|
145
|
+
desired[:STDERR] =
|
|
146
146
|
"WARNING: Association {group:#{group_name} <-> host:#{host_name}} "\
|
|
147
|
-
"doesn't exist, skipping.\n"
|
|
147
|
+
"doesn't exist, skipping.\n"
|
|
148
148
|
|
|
149
149
|
expected(actual, desired)
|
|
150
|
-
end
|
|
150
|
+
end
|
|
151
151
|
|
|
152
152
|
#------------------------
|
|
153
153
|
it '\'ungrouped\' HOST ... should abort with an error' do
|
|
154
|
-
|
|
155
154
|
host_name = 'test_host'
|
|
156
155
|
group_name = 'ungrouped'
|
|
157
156
|
|
|
158
157
|
runner { @app.start(%W(host add #{name})) } # <- auto creates the association with ungrouped
|
|
159
158
|
|
|
160
|
-
actual = runner { @app.start(%W(group rmhost #{group_name} #{host_name}
|
|
159
|
+
actual = runner { @app.start(%W(group rmhost #{group_name} #{host_name})) }
|
|
161
160
|
|
|
162
|
-
desired = { aborted: true}
|
|
161
|
+
desired = { aborted: true }
|
|
163
162
|
desired[:STDERR] =
|
|
164
163
|
"ERROR: Cannot manually manipulate the automatic group 'ungrouped'.\n"
|
|
165
164
|
expected(actual, desired)
|
|
166
165
|
end
|
|
167
|
-
|
|
166
|
+
|
|
168
167
|
#------------------------
|
|
169
168
|
it 'GROUP HOST1 HOST2 ... should dissociate the group from'\
|
|
170
169
|
' multiple hosts at once' do
|
|
@@ -173,33 +172,31 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
173
172
|
# if it has no other groups.
|
|
174
173
|
|
|
175
174
|
group_name = 'test_group'
|
|
176
|
-
host_names = %
|
|
175
|
+
host_names = %w(test_host1 test_host2 test_host3)
|
|
176
|
+
|
|
177
|
+
runner { @app.start(%W(group add #{group_name})) }
|
|
178
|
+
runner { @app.start(%W(group addhost #{group_name}) + host_names) }
|
|
177
179
|
|
|
178
|
-
runner { @app.start(%W(group add #{group_name} )) }
|
|
179
|
-
runner { @app.start(%W(group addhost #{group_name}) + host_names) }
|
|
180
|
-
|
|
181
180
|
actual = runner do
|
|
182
181
|
@app.start(%W(group rmhost #{group_name}) + host_names)
|
|
183
182
|
end
|
|
184
183
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
# rubocop:disable Metrics/LineLength
|
|
188
|
-
desired = { aborted: false}
|
|
184
|
+
# @console.out(actual, 'y')
|
|
185
|
+
desired = { aborted: false }
|
|
189
186
|
desired[:STDOUT] =
|
|
190
187
|
"Dissociate group '#{group_name}' from host(s) '#{host_names.join(',')}':\n"\
|
|
191
188
|
" - retrieve group \'#{group_name}\'...\n"\
|
|
192
189
|
" - OK\n"
|
|
193
190
|
host_names.each do |host|
|
|
194
191
|
desired[:STDOUT] = desired[:STDOUT] +
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
192
|
+
" - remove association {group:#{group_name} <-> host:#{host}}...\n"\
|
|
193
|
+
" - OK\n"\
|
|
194
|
+
" - add automatic association {group:ungrouped <-> host:#{host}}...\n"\
|
|
195
|
+
" - OK\n"\
|
|
199
196
|
end
|
|
200
197
|
desired[:STDOUT] = desired[:STDOUT] +
|
|
201
|
-
|
|
202
|
-
|
|
198
|
+
" - all OK\n"\
|
|
199
|
+
"Succeeded.\n"
|
|
203
200
|
expected(actual, desired)
|
|
204
201
|
# rubocop:enable Metrics/LineLength
|
|
205
202
|
|
|
@@ -210,6 +207,6 @@ RSpec.describe Moose::Inventory::Cli::Group do
|
|
|
210
207
|
host_names.each do |host|
|
|
211
208
|
expect(hosts[name: host]).to be_nil
|
|
212
209
|
end
|
|
213
|
-
end
|
|
210
|
+
end
|
|
214
211
|
end
|
|
215
212
|
end
|