opennebula-augeas 0.6.6.pre

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.
@@ -0,0 +1,551 @@
1
+ ##
2
+ # Augeas tests
3
+ #
4
+ # Copyright (C) 2011 Red Hat Inc.
5
+ # Copyright (C) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
6
+ #
7
+ # This library is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU Lesser General Public
9
+ # License as published by the Free Software Foundation; either
10
+ # version 2.1 of the License, or (at your option) any later version.
11
+ #
12
+ # This library is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public
18
+ # License along with this library; if not, write to the Free Software
19
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ #
21
+ # Authors: David Lutterkort <dlutter@redhat.com>
22
+ # Ionuț Arțăriși <iartarisi@suse.cz>
23
+ ##
24
+
25
+ require 'test/unit'
26
+
27
+ TOPDIR = File::expand_path(File::join(File::dirname(__FILE__), ".."))
28
+
29
+ $:.unshift(File::join(TOPDIR, "lib"))
30
+ $:.unshift(File::join(TOPDIR, "ext", "augeas"))
31
+
32
+ require 'augeas'
33
+ require 'fileutils'
34
+
35
+ class TestAugeas < Test::Unit::TestCase
36
+
37
+ SRC_ROOT = File::expand_path(File::join(TOPDIR, "tests", "root")) + "/."
38
+ TST_ROOT = File::expand_path(File::join(TOPDIR, "build", "root")) + "/"
39
+
40
+ def test_basics
41
+ aug = aug_create(:save_mode => :newfile)
42
+ assert_equal("newfile", aug.get("/augeas/save"))
43
+ assert_equal(TST_ROOT, aug.get("/augeas/root"))
44
+
45
+ assert(aug.exists("/augeas/root"))
46
+ assert_not_nil(aug.get("/augeas/root"))
47
+ node = "/ruby/test/node"
48
+ assert_nothing_raised {
49
+ aug.set(node, "value")
50
+ }
51
+ assert_equal("value", aug.get(node))
52
+ assert_nothing_raised {
53
+ aug.clear(node)
54
+ }
55
+ assert_equal(nil, aug.get(node))
56
+ m = aug.match("/*")
57
+ ["/augeas", "/ruby"].each do |p|
58
+ assert(m.include?(p))
59
+ assert(aug.exists(p))
60
+ end
61
+ end
62
+
63
+ def test_no_new
64
+ assert_raise NoMethodError do
65
+ Augeas.new
66
+ end
67
+ end
68
+
69
+ def test_create_unknown_argument
70
+ assert_raise ArgumentError do
71
+ Augeas::create(:bogus => false)
72
+ end
73
+ end
74
+
75
+ def test_create_invalid_save_mode
76
+ assert_raise ArgumentError do
77
+ Augeas::create(:save_mode => :bogus)
78
+ end
79
+ end
80
+
81
+ def test_create_block
82
+ foo = nil
83
+ Augeas::create do |aug|
84
+ aug.set('/foo', 'bar')
85
+ foo = aug.get('/foo')
86
+ end
87
+ assert_equal(foo, 'bar')
88
+ end
89
+
90
+ def test_close
91
+ aug = Augeas::create(:root => "/tmp", :save_mode => :newfile)
92
+ assert_equal("newfile", aug.get("/augeas/save"))
93
+ aug.close
94
+
95
+ assert_raise(SystemCallError) {
96
+ aug.get("/augeas/save")
97
+ }
98
+
99
+ assert_raise(SystemCallError) {
100
+ aug.close
101
+ }
102
+ end
103
+
104
+ def test_mv
105
+ Augeas::create(:root => "/dev/null") do |aug|
106
+ aug.set("/a/b", "value")
107
+ aug.mv("/a/b", "/x/y")
108
+ assert_equal("value", aug.get("/x/y"))
109
+ end
110
+ end
111
+
112
+ def test_mv_descendent_error
113
+ aug = aug_create
114
+ aug.set("/foo", "bar")
115
+ assert_raises(Augeas::DescendantError) {aug.mv("/foo", "/foo/bar/baz")}
116
+ end
117
+
118
+ def test_mv_multiple_matches_error
119
+ aug = aug_create
120
+ aug.set("/foo/bar", "bar")
121
+ aug.set("/foo/baz", "baz")
122
+ assert_raises(Augeas::MultipleMatchesError) {aug.mv("/foo/*", "/qux")}
123
+ end
124
+
125
+ def test_mv_invalid_path_error
126
+ aug = aug_create
127
+ assert_raises(Augeas::InvalidPathError) {aug.mv("/foo", "[]")}
128
+ end
129
+
130
+ def test_mv_no_match_error
131
+ aug = aug_create
132
+ assert_raises(Augeas::NoMatchError) {aug.mv("/nonexistent", "/")}
133
+ end
134
+
135
+ def test_mv_mutiple_dest_error
136
+ aug = aug_create
137
+ aug.set("/foo", "bar")
138
+ assert_raises(Augeas::CommandExecutionError) {aug.mv("/foo", "/bar/baz/*")}
139
+ end
140
+
141
+ def test_load
142
+ aug = aug_create(:no_load => true)
143
+ assert_equal([], aug.match("/files/etc/*"))
144
+ aug.rm("/augeas/load/*");
145
+ assert_nothing_raised {
146
+ aug.load
147
+ }
148
+ assert_equal([], aug.match("/files/etc/*"))
149
+ end
150
+
151
+ def test_load_bad_lens
152
+ aug = aug_create(:no_load => true)
153
+ aug.transform(:lens => "bad_lens", :incl => "irrelevant")
154
+ assert_raises(Augeas::LensNotFoundError) { aug.load }
155
+ assert_equal "Can not find lens bad_lens", aug.error[:details]
156
+ end
157
+
158
+ def test_transform
159
+ aug = aug_create(:no_load => true)
160
+ aug.clear_transforms
161
+ aug.transform(:lens => "Hosts.lns",
162
+ :incl => "/etc/hosts")
163
+ assert_raise(ArgumentError) {
164
+ aug.transform(:name => "Fstab",
165
+ :incl => [ "/etc/fstab" ],
166
+ :excl => [ "*~", "*.rpmnew" ])
167
+ }
168
+ aug.transform(:lens => "Inittab.lns",
169
+ :incl => "/etc/inittab")
170
+ aug.transform(:lens => "Fstab.lns",
171
+ :incl => "/etc/fstab*",
172
+ :excl => "*~")
173
+ assert_equal(["/augeas/load/Fstab", "/augeas/load/Fstab/excl",
174
+ "/augeas/load/Fstab/incl", "/augeas/load/Fstab/lens",
175
+ "/augeas/load/Hosts", "/augeas/load/Hosts/incl",
176
+ "/augeas/load/Hosts/lens", "/augeas/load/Inittab",
177
+ "/augeas/load/Inittab/incl",
178
+ "/augeas/load/Inittab/lens"],
179
+ aug.match("/augeas/load//*").sort)
180
+ aug.load
181
+ assert_equal(["/files/etc/hosts", "/files/etc/inittab"],
182
+ aug.match("/files/etc/*").sort)
183
+ end
184
+
185
+ def test_transform_invalid_path
186
+ aug = aug_create
187
+ assert_raises (Augeas::InvalidPathError) {
188
+ aug.transform :lens => '//', :incl => 'foo' }
189
+ end
190
+
191
+ def test_clear_transforms
192
+ aug = aug_create
193
+ assert_not_equal [], aug.match("/augeas/load/*")
194
+ aug.clear_transforms
195
+ assert_equal [], aug.match("/augeas/load/*")
196
+ end
197
+
198
+ def test_clear
199
+ aug = aug_create
200
+ aug.set("/foo/bar", "baz")
201
+ aug.clear("/foo/bar")
202
+ assert_equal aug.get("/foo/bar"), nil
203
+ end
204
+
205
+ def test_rm
206
+ aug = aug_create
207
+ aug.set("/foo/bar", "baz")
208
+ assert aug.get("/foo/bar")
209
+ assert_equal 2, aug.rm("/foo")
210
+ assert_nil aug.get("/foo")
211
+ end
212
+
213
+ def test_rm_invalid_path
214
+ aug = aug_create
215
+ assert_raises(Augeas::InvalidPathError) { aug.rm('//') }
216
+ end
217
+
218
+ def test_defvar
219
+ Augeas::create(:root => "/dev/null") do |aug|
220
+ aug.set("/a/b", "bval")
221
+ aug.set("/a/c", "cval")
222
+ assert aug.defvar("var", "/a/b")
223
+ assert_equal(["/a/b"], aug.match("$var"))
224
+ assert aug.defvar("var", nil)
225
+ assert_raises(Augeas::InvalidPathError) {
226
+ aug.match("$var")
227
+ }
228
+ assert_raises(Augeas::InvalidPathError) {
229
+ aug.defvar("var", "/foo/")
230
+ }
231
+ end
232
+ end
233
+
234
+ def test_insert_before
235
+ aug = aug_create
236
+ aug.set("/parent/child", "foo")
237
+ aug.insert("/parent/child", "sibling", true)
238
+ assert_equal ["/parent/sibling", "/parent/child"], aug.match("/parent/*")
239
+ end
240
+
241
+ def test_insert_after
242
+ aug = aug_create
243
+ aug.set("/parent/child", "foo")
244
+ aug.insert("/parent/child", "sibling", false)
245
+ assert_equal ["/parent/child", "/parent/sibling"], aug.match("/parent/*")
246
+ end
247
+
248
+ def test_insert_no_match
249
+ aug = aug_create
250
+ assert_raises (Augeas::NoMatchError) { aug.insert "foo", "bar", "baz" }
251
+ end
252
+
253
+ def test_insert_invalid_path
254
+ aug = aug_create
255
+ assert_raises (Augeas::InvalidPathError) { aug.insert "//", "bar", "baz" }
256
+ end
257
+
258
+ def test_insert_too_many_matches
259
+ aug = aug_create
260
+ assert_raises (Augeas::MultipleMatchesError) { aug.insert "/*", "a", "b" }
261
+ end
262
+
263
+ def test_match
264
+ aug = aug_create
265
+ aug.set("/foo/bar", "baz")
266
+ aug.set("/foo/baz", "qux")
267
+ aug.set("/foo/qux", "bar")
268
+
269
+ assert_equal(["/foo/bar", "/foo/baz", "/foo/qux"], aug.match("/foo/*"))
270
+ end
271
+
272
+ def test_match_empty_list
273
+ aug = aug_create
274
+ assert_equal([], aug.match("/nonexistent"))
275
+ end
276
+
277
+ def test_match_invalid_path
278
+ aug = aug_create
279
+ assert_raises(Augeas::InvalidPathError) { aug.match('//') }
280
+ end
281
+
282
+ def test_save
283
+ aug = aug_create
284
+ aug.set("/files/etc/hosts/1/garbage", "trash")
285
+ assert_raises(Augeas::CommandExecutionError) { aug.save }
286
+ end
287
+
288
+ def test_save_tree_error
289
+ aug = aug_create(:no_load => true)
290
+ aug.set("/files/etc/sysconfig/iptables", "bad")
291
+ assert_raises(Augeas::CommandExecutionError) {aug.save}
292
+ assert aug.get("/augeas/files/etc/sysconfig/iptables/error")
293
+ assert_equal("No such file or directory",
294
+ aug.get("/augeas/files/etc/sysconfig/iptables/error/message"))
295
+ end
296
+
297
+ def test_set_invalid_path
298
+ aug = aug_create
299
+ assert_raises(Augeas::InvalidPathError) { aug.set("files/etc//", nil) }
300
+ end
301
+
302
+ def test_set_multiple_matches_error
303
+ aug = aug_create
304
+ # for some reason Augeas does not set aug_error for this,
305
+ # but just returns -1 from aug_set. Should raise Augeas::MultipleMatchesError instead.
306
+ assert_raises(Augeas::CommandExecutionError) { aug.set("files/etc/*", nil) }
307
+ end
308
+
309
+ def test_set
310
+ aug = aug_create
311
+ aug.set("/files/etc/group/disk/user[last()+1]",["user1","user2"])
312
+ assert_equal(aug.get("/files/etc/group/disk/user[1]"), "root")
313
+ assert_equal(aug.get("/files/etc/group/disk/user[2]"), "user1")
314
+ assert_equal(aug.get("/files/etc/group/disk/user[3]"), "user2")
315
+
316
+ aug.set("/files/etc/group/new_group/user[last()+1]",
317
+ "nuser1",["nuser2","nuser3"])
318
+ assert_equal(aug.get("/files/etc/group/new_group/user[1]"), "nuser1")
319
+ assert_equal(aug.get("/files/etc/group/new_group/user[2]"), "nuser2")
320
+ assert_equal(aug.get("/files/etc/group/new_group/user[3]"), "nuser3")
321
+
322
+ aug.rm("/files/etc/group/disk/user")
323
+ aug.set("/files/etc/group/disk/user[last()+1]", "testuser")
324
+ assert_equal(aug.get("/files/etc/group/disk/user"), "testuser")
325
+
326
+ aug.rm("/files/etc/group/disk/user")
327
+ aug.set("/files/etc/group/disk/user[last()+1]", nil)
328
+ assert_equal(aug.get("/files/etc/group/disk/user"), nil)
329
+ end
330
+
331
+ def test_setm_invalid_path
332
+ aug = aug_create
333
+ assert_raises (Augeas::InvalidPathError) { aug.setm("[]", "bar", "baz") }
334
+ end
335
+
336
+ def test_exists
337
+ aug = aug_create
338
+ assert_equal false, aug.exists("/foo")
339
+ aug.set("/foo", "bar")
340
+ assert aug.exists("/foo")
341
+ end
342
+
343
+ def test_exists_invalid_path_error
344
+ aug = aug_create
345
+ assert_raises(Augeas::InvalidPathError) {aug.exists("[]")}
346
+ end
347
+
348
+ def test_get_multiple_matches_error
349
+ aug = aug_create
350
+
351
+ # Cause an error
352
+ assert_raises (Augeas::MultipleMatchesError) {
353
+ aug.get("/files/etc/hosts/*") }
354
+
355
+ err = aug.error
356
+ assert_equal(Augeas::EMMATCH, err[:code])
357
+ assert err[:message]
358
+ assert err[:details]
359
+ assert err[:minor].nil?
360
+ end
361
+
362
+ def test_get_invalid_path
363
+ aug = aug_create
364
+ assert_raises (Augeas::InvalidPathError) { aug.get("//") }
365
+
366
+ err = aug.error
367
+ assert_equal(Augeas::EPATHX, err[:code])
368
+ assert err[:message]
369
+ assert err[:details]
370
+ end
371
+
372
+ def test_defvar_invalid_path
373
+ aug = aug_create
374
+ assert_raises(Augeas::InvalidPathError) { aug.defvar('var', 'F#@!$#@') }
375
+ end
376
+
377
+ def test_defnode
378
+ aug = aug_create
379
+ assert aug.defnode("x", "/files/etc/hosts/*[ipaddr = '127.0.0.1']", nil)
380
+ assert_equal(["/files/etc/hosts/1"], aug.match("$x"))
381
+ end
382
+
383
+ def test_defnode_invalid_path
384
+ aug = aug_create
385
+ assert_raises (Augeas::InvalidPathError) { aug.defnode('x', '//', nil)}
386
+ end
387
+
388
+ def test_span_no_span_info
389
+ aug = aug_create
390
+ # this error should be raised because we haven't enabled the span
391
+ assert_raises(Augeas::NoSpanInfoError) {
392
+ aug.span("/files/etc/ssh/sshd_config/Protocol") }
393
+ end
394
+
395
+ def test_span_no_matches
396
+ aug = aug_create
397
+ assert_raises(Augeas::NoMatchError) { aug.span("bogus") }
398
+ end
399
+
400
+ def test_flag_save_noop
401
+ aug = aug_create(:save_mode => :noop)
402
+ assert_equal("noop", aug.get("/augeas/save"))
403
+ end
404
+
405
+ def test_flag_no_load
406
+ aug = aug_create(:no_load => true)
407
+ assert_equal([], aug.match("/files/*"))
408
+ end
409
+
410
+ def test_flag_no_modl_autoload
411
+ aug = aug_create(:no_modl_autoload => true)
412
+ assert_equal([], aug.match("/files/*"))
413
+ end
414
+
415
+ def test_flag_enable_span
416
+ aug = aug_create(:enable_span => true)
417
+ assert_equal("enable", aug.get("/augeas/span"))
418
+ end
419
+
420
+ def test_setm
421
+ aug = aug_create
422
+
423
+ aug.setm("/files/etc/group/*[label() =~ regexp(\"rpc.*\")]","users", "testuser1")
424
+ assert_equal( aug.get("/files/etc/group/rpc/users"), "testuser1")
425
+ assert_equal( aug.get("/files/etc/group/rpcuser/users"), "testuser1")
426
+
427
+ aug.setm("/files/etc/group/*[label() =~ regexp(\"rpc.*\")]/users",nil, "testuser2")
428
+ assert_equal( aug.get("/files/etc/group/rpc/users"), "testuser2")
429
+ assert_equal( aug.get("/files/etc/group/rpcuser/users"), "testuser2")
430
+ end
431
+
432
+ def test_error
433
+ aug = aug_create
434
+
435
+ # Cause an error
436
+ aug.get("/files/etc/hosts/*") rescue nil
437
+ err = aug.error
438
+ assert_equal(Augeas::EMMATCH, err[:code])
439
+ assert err[:message]
440
+ assert err[:details]
441
+ assert err[:minor].nil?
442
+ end
443
+
444
+ def test_span
445
+ aug = aug_create
446
+
447
+ assert_raises(Augeas::NoSpanInfoError) { aug.span("/files/etc/ssh/sshd_config/Protocol") }
448
+
449
+ aug.set("/augeas/span", "enable")
450
+ aug.rm("/files/etc")
451
+ aug.load
452
+
453
+ span = aug.span("/files/etc/ssh/sshd_config/Protocol")
454
+ assert_not_nil(span[:filename])
455
+ assert_equal(29..37, span[:label])
456
+ assert_equal(38..39, span[:value])
457
+ assert_equal(29..40, span[:span])
458
+ end
459
+
460
+ def test_srun
461
+ aug = aug_create
462
+
463
+ path = "/files/etc/hosts/*[canonical='localhost.localdomain']/ipaddr"
464
+ r, out = aug.srun("get #{path}\n")
465
+ assert_equal(1, r)
466
+ assert_equal("#{path} = 127.0.0.1\n", out)
467
+
468
+ assert_equal(0, aug.srun(" ")[0])
469
+ assert_raises(Augeas::CommandExecutionError) { aug.srun("foo") }
470
+ assert_raises(Augeas::CommandExecutionError) { aug.srun("set") }
471
+ assert_equal(-2, aug.srun("quit")[0])
472
+ end
473
+
474
+ def test_label
475
+ Augeas::create(:root => "/dev/null") do |aug|
476
+ assert_equal 'augeas', aug.label('/augeas')
477
+ assert_equal 'files', aug.label('/files')
478
+ end
479
+ end
480
+
481
+ def test_rename
482
+ Augeas::create(:root => "/dev/null") do |aug|
483
+ assert_raises(Augeas::InvalidLabelError) { aug.rename('/files', 'invalid/label') }
484
+ assert_equal 0, aug.rename('/nonexistent', 'label')
485
+ assert_equal ['/files'], aug.match('/files')
486
+ assert_equal 1, aug.rename('/files', 'label')
487
+ end
488
+ end
489
+
490
+ def test_text_store_retrieve
491
+ Augeas::create(:root => "/dev/null") do |aug|
492
+ # text_store errors
493
+ assert_raises(Augeas::NoMatchError) { aug.text_store('Simplelines.lns', '/input', '/store') }
494
+
495
+ # text_store
496
+ aug.set('/input', "line1\nline2\n")
497
+ assert aug.text_store('Simplelines.lns', '/input', '/store')
498
+ assert_equal 'line2', aug.get('/store/2')
499
+
500
+ # text_retrieve errors
501
+ assert_raises(Augeas::NoMatchError) { aug.text_retrieve('Simplelines.lns', '/unknown', '/store', '/output') }
502
+
503
+ # text_retrieve
504
+ aug.set('/store/3', 'line3')
505
+ assert aug.text_retrieve('Simplelines.lns', '/input', '/store', '/output')
506
+ assert_equal "line1\nline2\nline3\n", aug.get('/output')
507
+ end
508
+ end
509
+
510
+ def test_context
511
+ Augeas::create(:root => "/dev/null") do |aug|
512
+ aug.context = '/augeas'
513
+ assert_equal '/augeas', aug.get('/augeas/context')
514
+ assert_equal '/augeas', aug.get('context')
515
+ assert_equal '/augeas', aug.context
516
+ end
517
+ end
518
+
519
+ def test_touch
520
+ Augeas::create(:root => "/dev/null") do |aug|
521
+ assert_equal [], aug.match('/foo')
522
+ aug.touch '/foo'
523
+ assert_equal ['/foo'], aug.match('/foo')
524
+
525
+ aug.set '/foo', 'bar'
526
+ aug.touch '/foo'
527
+ assert_equal 'bar', aug.get('/foo')
528
+ end
529
+ end
530
+
531
+ def test_clearm
532
+ Augeas::create(:root => "/dev/null") do |aug|
533
+ aug.set('/foo/a', '1')
534
+ aug.set('/foo/b', '2')
535
+ aug.clearm('/foo', '*')
536
+ assert_nil aug.get('/foo/a')
537
+ assert_nil aug.get('/foo/b')
538
+ end
539
+ end
540
+
541
+ private
542
+ def aug_create(flags={})
543
+ if File::directory?(TST_ROOT)
544
+ FileUtils::rm_rf(TST_ROOT)
545
+ end
546
+ FileUtils::mkdir_p(TST_ROOT)
547
+ FileUtils::cp_r(SRC_ROOT, TST_ROOT)
548
+
549
+ Augeas::create({:root => TST_ROOT, :loadpath => nil}.merge(flags))
550
+ end
551
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opennebula-augeas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.6.pre
5
+ platform: ruby
6
+ authors:
7
+ - Bryan Kearney
8
+ - David Lutterkort
9
+ - Dominic Cleal
10
+ - Raphaël Pinson
11
+ - Frederik Wagner
12
+ - Artem Sheremet
13
+ - Ben
14
+ - Ionuț Arțăriși Ionuț Arțăriși
15
+ - Jacob McCann
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+ date: 2024-05-24 00:00:00.000000000 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rake
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ type: :development
29
+ prerelease: false
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ - !ruby/object:Gem::Dependency
36
+ name: rdoc
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ description: A fork of ruby-augeas (bindings for augeas) with exceptions support.
50
+ email: info@opennebula.io
51
+ executables: []
52
+ extensions:
53
+ - ext/augeas/extconf.rb
54
+ extra_rdoc_files: []
55
+ files:
56
+ - COPYING
57
+ - NEWS
58
+ - README.rdoc
59
+ - Rakefile
60
+ - ext/augeas/_augeas.c
61
+ - ext/augeas/_augeas.h
62
+ - ext/augeas/extconf.rb
63
+ - lib/augeas.rb
64
+ - tests/root/etc/group
65
+ - tests/root/etc/hosts
66
+ - tests/root/etc/inittab
67
+ - tests/root/etc/ssh/sshd_config
68
+ - tests/tc_augeas.rb
69
+ homepage: http://opennebula.io/
70
+ licenses:
71
+ - LGPL-2.1+
72
+ metadata:
73
+ source_code_uri: https://github.com/OpenNebula/ruby-augeas
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.7
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">"
86
+ - !ruby/object:Gem::Version
87
+ version: 1.3.1
88
+ requirements: []
89
+ rubygems_version: 3.4.10
90
+ signing_key:
91
+ specification_version: 4
92
+ summary: Ruby bindings for augeas
93
+ test_files: []