loom-core 0.0.5 → 0.0.6
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/Gemfile.lock +1 -1
- data/bin/loom +5 -1
- data/lib/loom/config.rb +10 -3
- data/lib/loom/facts/fact_set.rb +7 -1
- data/lib/loom/mods/module.rb +3 -4
- data/lib/loom/pattern/definition_context.rb +1 -1
- data/lib/loom/pattern/dsl.rb +113 -32
- data/lib/loom/pattern/reference_set.rb +7 -7
- data/lib/loom/runner.rb +8 -0
- data/lib/loom/shell/api.rb +2 -0
- data/lib/loom/version.rb +1 -1
- data/lib/loomext/corefacts/system_info_provider.rb +2 -1
- data/lib/loomext/coremods/all.rb +2 -1
- data/lib/loomext/coremods/exec.rb +10 -0
- data/lib/loomext/coremods/git.rb +19 -0
- data/lib/loomext/coremods/package/adapter.rb +1 -1
- data/lib/loomext/coremods/systemd.rb +1 -0
- data/lib/loomext/coremods/systemd/all.rb +2 -0
- data/lib/loomext/coremods/{system.rb → systemd/systemd.rb} +19 -5
- data/lib/loomext/coremods/systemd/systemd_units.rb +69 -0
- data/scripts/harness.sh +1 -0
- data/spec/.loom/error_handling.loom +15 -0
- data/spec/.loom/fail.loom +20 -0
- data/spec/.loom/files.loom +39 -0
- data/spec/.loom/net.loom +21 -0
- data/spec/.loom/pattern_context.loom +78 -0
- data/spec/.loom/pkg.loom +33 -0
- data/spec/.loom/shell.loom +46 -0
- data/spec/.loom/test.loom +73 -0
- data/spec/.loom/user.loom +29 -0
- data/spec/.loom/vms.loom +22 -0
- data/spec/loom/facts/fact_set_spec.rb +57 -0
- data/spec/loom/pattern/dsl_spec.rb +58 -9
- data/spec/loom/shell/harness_blob_spec.rb +1 -1
- data/spec/loom/shell/harness_command_builder_spec.rb +1 -1
- data/spec/loomext/coremods/systemd_spec.rb +31 -0
- data/spec/runloom.sh +12 -19
- data/spec/scripts/harness_spec.rb +1 -1
- data/spec/shared/loom_internals_helper.rb +41 -0
- data/spec/spec_helper.rb +5 -1
- data/spec/systemd.loom +22 -0
- data/spec/test_loom_spec.rb +95 -17
- data/test +2 -0
- metadata +26 -5
- data/spec/test.loom +0 -370
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loom-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erick Johnson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sshkit
|
@@ -256,10 +256,14 @@ files:
|
|
256
256
|
- lib/loomext/coremods/all.rb
|
257
257
|
- lib/loomext/coremods/exec.rb
|
258
258
|
- lib/loomext/coremods/files.rb
|
259
|
+
- lib/loomext/coremods/git.rb
|
259
260
|
- lib/loomext/coremods/net.rb
|
260
261
|
- lib/loomext/coremods/package/adapter.rb
|
261
262
|
- lib/loomext/coremods/package/package.rb
|
262
|
-
- lib/loomext/coremods/
|
263
|
+
- lib/loomext/coremods/systemd.rb
|
264
|
+
- lib/loomext/coremods/systemd/all.rb
|
265
|
+
- lib/loomext/coremods/systemd/systemd.rb
|
266
|
+
- lib/loomext/coremods/systemd/systemd_units.rb
|
263
267
|
- lib/loomext/coremods/user.rb
|
264
268
|
- lib/loomext/coremods/vm.rb
|
265
269
|
- lib/loomext/coremods/vm/all.rb
|
@@ -267,6 +271,17 @@ files:
|
|
267
271
|
- loom.gemspec
|
268
272
|
- loom/inventory.yml
|
269
273
|
- scripts/harness.sh
|
274
|
+
- spec/.loom/error_handling.loom
|
275
|
+
- spec/.loom/fail.loom
|
276
|
+
- spec/.loom/files.loom
|
277
|
+
- spec/.loom/net.loom
|
278
|
+
- spec/.loom/pattern_context.loom
|
279
|
+
- spec/.loom/pkg.loom
|
280
|
+
- spec/.loom/shell.loom
|
281
|
+
- spec/.loom/test.loom
|
282
|
+
- spec/.loom/user.loom
|
283
|
+
- spec/.loom/vms.loom
|
284
|
+
- spec/loom/facts/fact_set_spec.rb
|
270
285
|
- spec/loom/host_spec_spec.rb
|
271
286
|
- spec/loom/inventory_spec.rb
|
272
287
|
- spec/loom/method_signature_spec.rb
|
@@ -274,11 +289,14 @@ files:
|
|
274
289
|
- spec/loom/shell/cmd_wrapper_spec.rb
|
275
290
|
- spec/loom/shell/harness_blob_spec.rb
|
276
291
|
- spec/loom/shell/harness_command_builder_spec.rb
|
292
|
+
- spec/loomext/coremods/systemd_spec.rb
|
277
293
|
- spec/runloom.sh
|
278
294
|
- spec/scripts/harness_spec.rb
|
295
|
+
- spec/shared/loom_internals_helper.rb
|
279
296
|
- spec/spec_helper.rb
|
280
|
-
- spec/
|
297
|
+
- spec/systemd.loom
|
281
298
|
- spec/test_loom_spec.rb
|
299
|
+
- test
|
282
300
|
homepage:
|
283
301
|
licenses:
|
284
302
|
- MIT
|
@@ -304,6 +322,7 @@ signing_key:
|
|
304
322
|
specification_version: 4
|
305
323
|
summary: Repeatable management of remote hosts over SSH
|
306
324
|
test_files:
|
325
|
+
- spec/loom/facts/fact_set_spec.rb
|
307
326
|
- spec/loom/host_spec_spec.rb
|
308
327
|
- spec/loom/inventory_spec.rb
|
309
328
|
- spec/loom/method_signature_spec.rb
|
@@ -311,8 +330,10 @@ test_files:
|
|
311
330
|
- spec/loom/shell/cmd_wrapper_spec.rb
|
312
331
|
- spec/loom/shell/harness_blob_spec.rb
|
313
332
|
- spec/loom/shell/harness_command_builder_spec.rb
|
333
|
+
- spec/loomext/coremods/systemd_spec.rb
|
314
334
|
- spec/runloom.sh
|
315
335
|
- spec/scripts/harness_spec.rb
|
336
|
+
- spec/shared/loom_internals_helper.rb
|
316
337
|
- spec/spec_helper.rb
|
317
|
-
- spec/
|
338
|
+
- spec/systemd.loom
|
318
339
|
- spec/test_loom_spec.rb
|
data/spec/test.loom
DELETED
@@ -1,370 +0,0 @@
|
|
1
|
-
require "loomext/all"
|
2
|
-
|
3
|
-
desc "Prints some known facts"
|
4
|
-
pattern :three_facts do |loom, facts|
|
5
|
-
puts "first 3 facts..."
|
6
|
-
puts facts.facts.to_a.slice(0, 3).map { |tuple| tuple.join "=" }.join("\n")
|
7
|
-
end
|
8
|
-
|
9
|
-
|
10
|
-
desc "Reports `uptime` status"
|
11
|
-
pattern :uptime do |loom, facts|
|
12
|
-
loom << :uptime
|
13
|
-
loom << :hostname
|
14
|
-
loom.local << :hostname
|
15
|
-
end
|
16
|
-
#produces { pkg.installed? :httpd }
|
17
|
-
|
18
|
-
desc "cd's to the /etc directory and runs `pwd`"
|
19
|
-
pattern :cd do |loom, facts|
|
20
|
-
loom.cd "/etc" do
|
21
|
-
loom << :pwd
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
desc "tests return codes from wrapped commands"
|
26
|
-
pattern :wrap_returns do |loom, facts|
|
27
|
-
# using loom.time as a proxy for Shell::Core#wrap here
|
28
|
-
loom.time do
|
29
|
-
raise "wrapped true is not true" unless loom.test :true
|
30
|
-
raise "wrapped false is not false" if loom.test :false
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
desc "Tests a condition."
|
35
|
-
pattern :test do |loom, facts|
|
36
|
-
unless loom.test :false
|
37
|
-
loom.x :echo, "i tested false"
|
38
|
-
end
|
39
|
-
|
40
|
-
if loom.test :true
|
41
|
-
loom.x :echo, "i tested true"
|
42
|
-
end
|
43
|
-
|
44
|
-
if loom.test :which, "bash"
|
45
|
-
loom.x :echo, "has bash"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
desc "Tests a grep condition."
|
50
|
-
pattern :match do |loom, facts|
|
51
|
-
if loom.files("/etc/hosts").match? :pattern => "aldsfja;ldjf"
|
52
|
-
loom.fail "should not match garbage"
|
53
|
-
else
|
54
|
-
loom.x :echo, "I didnt match garbage"
|
55
|
-
end
|
56
|
-
|
57
|
-
unless loom.files("/etc/hosts").match? :pattern => "localhost"
|
58
|
-
loom.fail "should match localhost"
|
59
|
-
else
|
60
|
-
loom.x :echo, "I did match my target"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
desc "Always fails due to return code."
|
65
|
-
pattern :fail_soft do |loom, facts|
|
66
|
-
unless loom << :false
|
67
|
-
loom.x :echo, "i am false"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
desc "Always fails due to a hard failure"
|
72
|
-
pattern :fail_hard do |loom, facts|
|
73
|
-
loom.fail "Fail big or not at all"
|
74
|
-
end
|
75
|
-
|
76
|
-
desc "Check timeout commands"
|
77
|
-
pattern :timeout_fail do |loom, facts|
|
78
|
-
loom.timeout(:timeout => 1) do
|
79
|
-
loom.x :sleep, 2
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
desc "Wrapped time commands"
|
84
|
-
pattern :time do |loom, facts|
|
85
|
-
loom.time do
|
86
|
-
loom.x :echo, :hi
|
87
|
-
loom.x :sleep, 2
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
module Net
|
92
|
-
include Loom::Pattern
|
93
|
-
|
94
|
-
desc "tests the net package, with_net check"
|
95
|
-
pattern :check_net do |loom, facts|
|
96
|
-
unless loom.net(check_host: '127.0.0.1').has_net?
|
97
|
-
loom.fail 'can not ping localhost'
|
98
|
-
end
|
99
|
-
|
100
|
-
has_local_net = false
|
101
|
-
loom.net(check_host: '127.0.0.1').with_net do
|
102
|
-
has_local_net = true
|
103
|
-
end
|
104
|
-
loom.fail "should have local net" unless has_local_net
|
105
|
-
end
|
106
|
-
|
107
|
-
desc "expected check_net failures"
|
108
|
-
pattern :check_net_fail do |loom, facts|
|
109
|
-
loom.net(timeout: 2, check_host: '1.1.1.1').check_net
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
module Files
|
114
|
-
include Loom::Pattern
|
115
|
-
|
116
|
-
desc "Reads a file"
|
117
|
-
pattern :read do |loom, facts|
|
118
|
-
loom.files("/etc/hosts").cat
|
119
|
-
end
|
120
|
-
|
121
|
-
desc "Gsubs file text"
|
122
|
-
pattern :gsub do |loom, facts|
|
123
|
-
loom.files("/tmp/garbage").write <<EOS
|
124
|
-
This is a bunch of junk
|
125
|
-
192.123.456.0\t\thostname.xyz
|
126
|
-
EOS
|
127
|
-
|
128
|
-
loom.files("/tmp/garbage")
|
129
|
-
.cat
|
130
|
-
.gsub(pattern: /[\d]{3}/, replace: "xxx")
|
131
|
-
.append("this is something new")
|
132
|
-
.cat
|
133
|
-
end
|
134
|
-
|
135
|
-
desc "Chowns a file"
|
136
|
-
pattern :chown do |loom, facts|
|
137
|
-
loom.files("/tmp/chown.me")
|
138
|
-
.touch
|
139
|
-
.append("this file will be owned by root")
|
140
|
-
|
141
|
-
loom.sudo do
|
142
|
-
loom.files("/tmp/chown.me").chown user: :root
|
143
|
-
loom.x :ls, "-lZ", "/tmp/chown.me"
|
144
|
-
|
145
|
-
loom.files("/tmp/chown.me").chown user: :root, group: :root
|
146
|
-
end
|
147
|
-
|
148
|
-
loom.sudo { loom.exec :rm, "/tmp/chown.me" }
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
module Shell
|
153
|
-
include Loom::Pattern
|
154
|
-
|
155
|
-
desc "Executes some commands in a subshell"
|
156
|
-
pattern :subshell do |loom, facts|
|
157
|
-
loom << :"(echo $$; echo $BASHPID; whoami)"
|
158
|
-
loom << :"(sudo -i -u root whoami)"
|
159
|
-
|
160
|
-
loom.local << :"(echo $$; echo $BASHPID; whoami)"
|
161
|
-
# loom.local << "(sudo -i -u root whoami)"
|
162
|
-
end
|
163
|
-
|
164
|
-
desc "Tests nested sudo scenarios"
|
165
|
-
pattern :sudo do |loom, facts|
|
166
|
-
loom.sudo user: "root" do
|
167
|
-
loom << :pwd
|
168
|
-
loom << :whoami
|
169
|
-
loom.exec :touch, "loom.file"
|
170
|
-
|
171
|
-
loom.sudo do
|
172
|
-
loom << :whoami
|
173
|
-
loom << :pwd
|
174
|
-
loom.x :touch, "root.file"
|
175
|
-
|
176
|
-
loom.user.add_system_user :postgres, uid: 999
|
177
|
-
loom.sudo user: :postgres do
|
178
|
-
loom << :whoami
|
179
|
-
loom.cd "/tmp" do
|
180
|
-
loom << :pwd
|
181
|
-
loom.x :touch, "postgres.file"
|
182
|
-
end
|
183
|
-
end
|
184
|
-
loom.user.remove :postgres
|
185
|
-
|
186
|
-
loom.x :touch, "root.file2"
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
loom.cd "/tmp" do
|
191
|
-
loom << :pwd
|
192
|
-
loom.sudo user: :root, cmd: :pwd do loom << :pwd end
|
193
|
-
loom << :pwd
|
194
|
-
end
|
195
|
-
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
module Parent
|
200
|
-
include Loom::Pattern
|
201
|
-
|
202
|
-
with_facts :outer_fact => :outer, :replaced => :original
|
203
|
-
|
204
|
-
before do
|
205
|
-
puts "Test::Parent => before"
|
206
|
-
end
|
207
|
-
|
208
|
-
after do
|
209
|
-
puts "Test::Parent => after"
|
210
|
-
end
|
211
|
-
|
212
|
-
desc "Checks facts on a parent pattern"
|
213
|
-
pattern :check_facts do |loom, facts|
|
214
|
-
unless facts[:outer_fact] == :outer
|
215
|
-
raise "expected outer fact => #{facts[:outer_fact]}"
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
let(:a_let_key) { "the value" }
|
220
|
-
let(:a_fact_based_let) { |facts| facts[:outer_fact].to_s + "/let" }
|
221
|
-
let(:a_referencing_let) { a_let_key + " referenced" }
|
222
|
-
|
223
|
-
desc "Checks let defines"
|
224
|
-
pattern :check_lets do |loom, facts|
|
225
|
-
raise "bad let :a_let_key" unless a_let_key == "the value"
|
226
|
-
raise "bad let :a_fact_based_let" unless a_fact_based_let == "outer/let"
|
227
|
-
|
228
|
-
unless a_referencing_let == "the value referenced"
|
229
|
-
raise "bad let :a_referencing_let => #{a_referencing_let}"
|
230
|
-
end
|
231
|
-
|
232
|
-
puts "a_let_key: %s" % a_let_key
|
233
|
-
puts "a_fact_based_let: %s" % a_fact_based_let
|
234
|
-
end
|
235
|
-
|
236
|
-
module Child
|
237
|
-
include Loom::Pattern
|
238
|
-
|
239
|
-
with_facts :inner_fact => :inner, :replaced => :override
|
240
|
-
let(:a_let_key) { |facts| facts[:inner_fact].to_s + " overrides parent" }
|
241
|
-
|
242
|
-
before do
|
243
|
-
puts "Test::Parent::Child => before"
|
244
|
-
end
|
245
|
-
|
246
|
-
after do
|
247
|
-
puts "Test::Parent::Child => after"
|
248
|
-
end
|
249
|
-
|
250
|
-
desc "Check let overrides"
|
251
|
-
pattern :check_let_overrides do |loom, facts|
|
252
|
-
raise "bad let :a_let_key" unless a_let_key == "inner overrides parent"
|
253
|
-
raise "bad let :a_fact_based_let" unless a_fact_based_let == "outer/let"
|
254
|
-
|
255
|
-
puts "child a_let_key: %s" % a_let_key
|
256
|
-
puts "child a_fact_based_let: %s" % a_fact_based_let
|
257
|
-
end
|
258
|
-
|
259
|
-
desc "Checks inherited facts on a cihld pattern"
|
260
|
-
pattern :check_facts do |loom, facts|
|
261
|
-
unless facts[:inner_fact] == :inner
|
262
|
-
raise "expected inner fact => #{facts[:inner_fact]}"
|
263
|
-
end
|
264
|
-
unless facts[:outer_fact] == :outer
|
265
|
-
raise "expected outer fact => #{facts[:outer_fact]}"
|
266
|
-
end
|
267
|
-
unless facts[:replaced] == :override
|
268
|
-
raise "expected replaced fact => #{facts[:replaced_fact]}"
|
269
|
-
end
|
270
|
-
end
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
module User
|
275
|
-
include Loom::Pattern
|
276
|
-
|
277
|
-
desc "Adds a bunch of users and then removes them right away"
|
278
|
-
pattern :add_users do |loom, facts|
|
279
|
-
loom.sudo do
|
280
|
-
loom.user.add :nara, uid: 1001, home_dir: "/home/nara"
|
281
|
-
loom.user.add :marrian, home_dir: "/home/marrian"
|
282
|
-
|
283
|
-
loom.user.add_system_user :app, uid: 900
|
284
|
-
loom.user.add_system_user :batch
|
285
|
-
|
286
|
-
loom.user.remove :nara
|
287
|
-
loom.user.remove :marrian
|
288
|
-
loom.user.remove :app
|
289
|
-
loom.user.remove :batch
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
desc "Makes the postgres user a sudoer"
|
294
|
-
pattern :sudoers do |loom, facts|
|
295
|
-
loom.sudo do
|
296
|
-
loom.user.add_system_user :postgres, uid: 999
|
297
|
-
loom.user.make_sudoer :postgres
|
298
|
-
loom.user.remove :postgres
|
299
|
-
end
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
module Package
|
304
|
-
include Loom::Pattern
|
305
|
-
|
306
|
-
namespace :pkg
|
307
|
-
|
308
|
-
before do |loom, facts|
|
309
|
-
puts "#{self} in before"
|
310
|
-
end
|
311
|
-
|
312
|
-
after do
|
313
|
-
puts "#{self} in after"
|
314
|
-
end
|
315
|
-
|
316
|
-
desc "Updates the default package manager cache"
|
317
|
-
pattern :update_cache do |loom, facts|
|
318
|
-
loom.sudo { loom.pkg.update_cache }
|
319
|
-
end
|
320
|
-
|
321
|
-
desc "Installs Apache HTTP server"
|
322
|
-
pattern :install_httpd do |loom, facts|
|
323
|
-
loom.sudo do
|
324
|
-
loom.pkg.install 'apache2' unless loom.pkg.installed? 'apache2'
|
325
|
-
end
|
326
|
-
end
|
327
|
-
|
328
|
-
desc "Installs Facter GEM"
|
329
|
-
pattern :install_facter do |loom, facts|
|
330
|
-
loom.sudo do
|
331
|
-
loom.pkg[:gem].ensure_installed :facter
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
module ErrorHandling
|
337
|
-
include Loom::Pattern
|
338
|
-
|
339
|
-
namespace :err
|
340
|
-
|
341
|
-
desc "Handle SSH disconnection errors"
|
342
|
-
pattern :ssh_disconnect do |loom, facts|
|
343
|
-
if facts[:really_really_reboot]
|
344
|
-
loom.sudo cmd: :reboot
|
345
|
-
else
|
346
|
-
puts "to REALLY reboot set fact[:really_really_reboot] = true"
|
347
|
-
end
|
348
|
-
end
|
349
|
-
end
|
350
|
-
|
351
|
-
module VMs
|
352
|
-
include Loom::Pattern
|
353
|
-
|
354
|
-
desc "Check if some virtualbox vms exist"
|
355
|
-
pattern :vm_exists? do |loom, facts|
|
356
|
-
vm0_exists = loom.local.vbox.check_exists "vm0.local"
|
357
|
-
puts "Virtualbox VM 'vm0.local' exists: #{vm0_exists}"
|
358
|
-
end
|
359
|
-
|
360
|
-
desc "Check if some virtualbox vms exist"
|
361
|
-
pattern :list do |loom, facts|
|
362
|
-
loom.local.vbox.list
|
363
|
-
end
|
364
|
-
|
365
|
-
desc "Takes a snapshot of a VM"
|
366
|
-
pattern :snap do |loom, facts|
|
367
|
-
loom.local.vbox.snapshot "vm0.local", snapshot_name: "test:snap"
|
368
|
-
loom.local.vbox.snapshot "vm0.local", action: :delete, snapshot_name: "test:snap"
|
369
|
-
end
|
370
|
-
end
|