loom-core 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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