beaker-puppet 1.1.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0c098df759909b2d7139e23776333e7f7da342c
4
- data.tar.gz: ba69889bd92bbe1d47b7a5e0fe16b844aa7ad7b1
3
+ metadata.gz: 400c5005acf587cae1d5e1fe8afbcc14d9d88d8f
4
+ data.tar.gz: 9392fc5d8c862d5c83bdebdd46504102dbfb2ef4
5
5
  SHA512:
6
- metadata.gz: 49299bd7b7715c3e50d0aaf79397c5add2a29dca58b76284266e5f2b8d4447532784abe943ca4013b77bd5533316385ee323ec3680fa2e0c1f257209986bd49e
7
- data.tar.gz: 50e8a96e4e5ebf3951aaf823436999374e18229b6359900a000c7fd1b4881234a1e3a4c9af8c8d1abbbc9bb2968e59d637597aacf050afea8f87d4b1f1c140f2
6
+ metadata.gz: 8e8db28e64c428caf4b4a253e70ad0ce9dfb9c3dcda51622d32cd9f1b5768ac1023d10797f6e4366bf88aeebc0057f7a94983cdc2c96f8ad2c9b7d30e745f45c
7
+ data.tar.gz: 41d0fd41083c3a4e8ea4e57f9d25524c5a3ab94bb578d2336187078314fdf43f783878ac9b520f77c4805989a5f0a6d000a87b994696f1cca023ab4eab521f68
@@ -13,7 +13,7 @@ end
13
13
  [ 'windows', 'foss', 'puppet', 'ezbake', 'module' ].each do |lib|
14
14
  require "beaker-puppet/install_utils/#{lib}_utils"
15
15
  end
16
- [ 'tk', 'facter', 'puppet' ].each do |lib|
16
+ [ 'tk', 'facter', 'puppet', 'host' ].each do |lib|
17
17
  require "beaker-puppet/helpers/#{lib}_helpers"
18
18
  end
19
19
 
@@ -35,6 +35,7 @@ module BeakerPuppet
35
35
  include Beaker::DSL::Helpers::TKHelpers
36
36
  include Beaker::DSL::Helpers::FacterHelpers
37
37
  include Beaker::DSL::Helpers::PuppetHelpers
38
+ include Beaker::DSL::Helpers::HostHelpers
38
39
 
39
40
  include Beaker::DSL::Wrappers
40
41
  end
@@ -37,11 +37,17 @@ module Beaker
37
37
  # @return String The value of the fact 'name' on the provided host
38
38
  # @raise [FailTest] Raises an exception if call to facter fails
39
39
  def fact_on(host, name, opts = {})
40
+ if opts.kind_of?(Hash)
41
+ opts.merge!({json: nil})
42
+ else
43
+ opts << ' --json'
44
+ end
45
+
40
46
  result = on host, facter(name, opts)
41
47
  if result.kind_of?(Array)
42
- result.map { |res| res.stdout.chomp }
48
+ result.map { |res| JSON.parse(res.stdout)[name] }
43
49
  else
44
- result.stdout.chomp
50
+ JSON.parse(result.stdout)[name]
45
51
  end
46
52
  end
47
53
 
@@ -0,0 +1,36 @@
1
+ module Beaker
2
+ module DSL
3
+ module Helpers
4
+ # Methods that help you interact with your facter installation, facter must be installed
5
+ # for these methods to execute correctly
6
+ #
7
+ module HostHelpers
8
+
9
+ def ruby_command(host)
10
+ "env PATH=\"#{host['privatebindir']}:${PATH}\" ruby"
11
+ end
12
+
13
+ # Returns an array containing the owner, group and mode of
14
+ # the file specified by path. The returned mode is an integer
15
+ # value containing only the file mode, excluding the type, e.g
16
+ # S_IFDIR 0040000
17
+ def stat(host, path)
18
+ ruby = ruby_command(host)
19
+ owner = on(host, "#{ruby} -e 'require \"etc\"; puts (Etc.getpwuid(File.stat(\"#{path}\").uid).name)'").stdout.chomp
20
+ group = on(host, "#{ruby} -e 'require \"etc\"; puts (Etc.getgrgid(File.stat(\"#{path}\").gid).name)'").stdout.chomp
21
+ mode = on(host, "#{ruby} -e 'puts (File.stat(\"#{path}\").mode & 0777).to_s(8)'").stdout.chomp.to_i
22
+
23
+ [owner, group, mode]
24
+ end
25
+
26
+ def assert_ownership_permissions(host, location, expected_user, expected_group, expected_permissions)
27
+ permissions = stat(host, location)
28
+ assert_equal(expected_user, permissions[0], "Owner #{permissions[0]} does not match expected #{expected_user}")
29
+ assert_equal(expected_group, permissions[1], "Group #{permissions[1]} does not match expected #{expected_group}")
30
+ assert_equal(expected_permissions, permissions[2], "Permissions #{permissions[2]} does not match expected #{expected_permissions}")
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
@@ -15,22 +15,28 @@ module Beaker
15
15
  'distmoduledir' => '/etc/puppetlabs/code/modules',
16
16
  'sitemoduledir' => '/opt/puppetlabs/puppet/modules',
17
17
  },
18
- 'windows' => { #windows
18
+ # sitemoduledir not included on Windows (check PUP-4049 for more info).
19
+ #
20
+ # Paths to the puppet's vendored ruby installation on Windows were
21
+ # updated in Puppet 6 to more closely match those of *nix agents.
22
+ # These path values include both the older (puppet <= 5) paths (which
23
+ # include sys/ruby) and the newer versions, which have no custom ruby
24
+ # directory
25
+ 'windows' => { # windows with cygwin
19
26
  'puppetbindir' => '/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/bin:/cygdrive/c/Program Files/Puppet Labs/Puppet/bin',
20
- 'privatebindir' => '/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/sys/ruby/bin:/cygdrive/c/Program Files/Puppet Labs/Puppet/sys/ruby/bin',
27
+ 'privatebindir' => '/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/puppet/bin:/cygdrive/c/Program Files/Puppet Labs/Puppet/puppet/bin:/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/sys/ruby/bin:/cygdrive/c/Program Files/Puppet Labs/Puppet/sys/ruby/bin',
21
28
  'distmoduledir' => '`cygpath -smF 35`/PuppetLabs/code/modules',
22
- # sitemoduledir not included (check PUP-4049 for more info)
23
29
  },
24
- 'pwindows' => { #pure windows
30
+ 'pswindows' => { # pure windows
25
31
  'puppetbindir' => '"C:\\Program Files (x86)\\Puppet Labs\\Puppet\\bin";"C:\\Program Files\\Puppet Labs\\Puppet\\bin"',
26
- 'privatebindir' => '"C:\\Program Files (x86)\\Puppet Labs\\Puppet\\sys\\ruby\\bin";"C:\\Program Files\\Puppet Labs\\Puppet\\sys\\ruby\\bin"',
32
+ 'privatebindir' => '"C:\\Program Files (x86)\\Puppet Labs\\Puppet\\puppet\\bin";"C:\\Program Files\\Puppet Labs\\Puppet\\puppet\\bin";"C:\\Program Files (x86)\\Puppet Labs\\Puppet\\sys\\ruby\\bin";"C:\\Program Files\\Puppet Labs\\Puppet\\sys\\ruby\\bin"',
27
33
  'distmoduledir' => 'C:\\ProgramData\\PuppetLabs\\code\\modules',
28
34
  }
29
35
  }
30
36
 
31
37
  # Add the appropriate aio defaults to the host object so that they can be accessed using host[option], set host[:type] = aio
32
38
  # @param [Host] host A single host to act upon
33
- # @param [String] platform The platform type of this host, one of windows or unix
39
+ # @param [String] platform The platform type of this host, one of 'windows', 'pswindows', or 'unix'
34
40
  def add_platform_aio_defaults(host, platform)
35
41
  AIO_DEFAULTS[platform].each_pair do |key, val|
36
42
  host[key] = val
@@ -49,7 +55,7 @@ module Beaker
49
55
  def add_aio_defaults_on(hosts)
50
56
  block_on hosts do | host |
51
57
  if host.is_powershell?
52
- platform = 'pwindows'
58
+ platform = 'pswindows'
53
59
  elsif host['platform'] =~ /windows/
54
60
  platform = 'windows'
55
61
  else
@@ -1,3 +1,3 @@
1
1
  module BeakerPuppet
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
@@ -33,22 +33,39 @@ describe ClassMixedWithDSLHelpers do
33
33
 
34
34
  describe '#fact_on' do
35
35
  it 'retrieves a fact on a single host' do
36
- result.stdout = "family\n"
37
- expect( subject ).to receive(:facter).with('osfamily',{}).once
36
+ result.stdout = "{\"osfamily\": \"family\"}\n"
37
+ expect( subject ).to receive(:facter).with('osfamily',{json: nil}).once
38
38
  expect( subject ).to receive(:on).and_return(result)
39
39
 
40
- expect( subject.fact_on('host','osfamily') ).to be === result.stdout.chomp
40
+ expect( subject.fact_on('host','osfamily') ).to be === JSON.parse(result.stdout)['osfamily']
41
41
  end
42
42
 
43
- it 'chomps correctly when it receives an array of results from #on' do
44
- result.stdout = "family\n"
43
+ it 'converts each element to a structured fact when it receives an array of results from #on' do
44
+ result.stdout = "{\"os\": {\"name\":\"name\", \"family\": \"family\"}}\n"
45
45
  times = hosts.length
46
46
  results_array = [result] * times
47
- chomped_array = [result.stdout.chomp] * times
47
+ parsed_array = [JSON.parse(result.stdout)['os']] * times
48
48
  allow( subject ).to receive( :on ).and_return( results_array )
49
49
 
50
- expect( subject.fact_on(hosts,'osfamily') ).to be === chomped_array
50
+ expect( subject.fact_on(hosts,'os') ).to be === parsed_array
51
+ end
52
+
53
+ it 'returns a single result for single host' do
54
+ result.stdout = "{\"osfamily\": \"family\"}\n"
55
+ parsed_result = JSON.parse(result.stdout)['osfamily']
56
+ allow( subject ).to receive( :on ).and_return( result )
57
+
58
+ expect( subject.fact_on('host','osfamily') ).to be === parsed_result
59
+ end
60
+
61
+ it 'preserves data types' do
62
+ result.stdout = "{\"identity\": { \"uid\": 0, \"user\": \"root\", \"privileged\": true }}"
63
+ allow( subject ).to receive( :on ).and_return( result )
64
+ structured_fact = subject.fact_on('host','identity')
51
65
 
66
+ expect(structured_fact['uid'].class).to be Fixnum
67
+ expect(structured_fact['user'].class).to be String
68
+ expect(structured_fact['privileged'].class).to be (TrueClass or FalseClass)
52
69
  end
53
70
  end
54
71
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker-puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-13 00:00:00.000000000 Z
11
+ date: 2018-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -233,6 +233,7 @@ files:
233
233
  - bin/beaker-puppet
234
234
  - lib/beaker-puppet.rb
235
235
  - lib/beaker-puppet/helpers/facter_helpers.rb
236
+ - lib/beaker-puppet/helpers/host_helpers.rb
236
237
  - lib/beaker-puppet/helpers/puppet_helpers.rb
237
238
  - lib/beaker-puppet/helpers/rake_helpers.rb
238
239
  - lib/beaker-puppet/helpers/tk_helpers.rb