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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/bin/loom +5 -1
  4. data/lib/loom/config.rb +10 -3
  5. data/lib/loom/facts/fact_set.rb +7 -1
  6. data/lib/loom/mods/module.rb +3 -4
  7. data/lib/loom/pattern/definition_context.rb +1 -1
  8. data/lib/loom/pattern/dsl.rb +113 -32
  9. data/lib/loom/pattern/reference_set.rb +7 -7
  10. data/lib/loom/runner.rb +8 -0
  11. data/lib/loom/shell/api.rb +2 -0
  12. data/lib/loom/version.rb +1 -1
  13. data/lib/loomext/corefacts/system_info_provider.rb +2 -1
  14. data/lib/loomext/coremods/all.rb +2 -1
  15. data/lib/loomext/coremods/exec.rb +10 -0
  16. data/lib/loomext/coremods/git.rb +19 -0
  17. data/lib/loomext/coremods/package/adapter.rb +1 -1
  18. data/lib/loomext/coremods/systemd.rb +1 -0
  19. data/lib/loomext/coremods/systemd/all.rb +2 -0
  20. data/lib/loomext/coremods/{system.rb → systemd/systemd.rb} +19 -5
  21. data/lib/loomext/coremods/systemd/systemd_units.rb +69 -0
  22. data/scripts/harness.sh +1 -0
  23. data/spec/.loom/error_handling.loom +15 -0
  24. data/spec/.loom/fail.loom +20 -0
  25. data/spec/.loom/files.loom +39 -0
  26. data/spec/.loom/net.loom +21 -0
  27. data/spec/.loom/pattern_context.loom +78 -0
  28. data/spec/.loom/pkg.loom +33 -0
  29. data/spec/.loom/shell.loom +46 -0
  30. data/spec/.loom/test.loom +73 -0
  31. data/spec/.loom/user.loom +29 -0
  32. data/spec/.loom/vms.loom +22 -0
  33. data/spec/loom/facts/fact_set_spec.rb +57 -0
  34. data/spec/loom/pattern/dsl_spec.rb +58 -9
  35. data/spec/loom/shell/harness_blob_spec.rb +1 -1
  36. data/spec/loom/shell/harness_command_builder_spec.rb +1 -1
  37. data/spec/loomext/coremods/systemd_spec.rb +31 -0
  38. data/spec/runloom.sh +12 -19
  39. data/spec/scripts/harness_spec.rb +1 -1
  40. data/spec/shared/loom_internals_helper.rb +41 -0
  41. data/spec/spec_helper.rb +5 -1
  42. data/spec/systemd.loom +22 -0
  43. data/spec/test_loom_spec.rb +95 -17
  44. data/test +2 -0
  45. metadata +26 -5
  46. data/spec/test.loom +0 -370
data/test ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ bundle exec rspec --tag ~integration
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.5
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-22 00:00:00.000000000 Z
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/system.rb
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/test.loom
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/test.loom
338
+ - spec/systemd.loom
318
339
  - spec/test_loom_spec.rb
@@ -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