beaker-windows 0.6.2
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 +15 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +272 -0
- data/HISTORY.md +8 -0
- data/LICENSE.txt +15 -0
- data/README.md +221 -0
- data/Rakefile +13 -0
- data/lib/beaker-windows.rb +12 -0
- data/lib/beaker-windows/path.rb +111 -0
- data/lib/beaker-windows/powershell.rb +111 -0
- data/lib/beaker-windows/registry.rb +251 -0
- data/lib/beaker-windows/version.rb +5 -0
- data/lib/beaker-windows/windows_feature.rb +179 -0
- data/spec/spec_helper.rb +10 -0
- metadata +157 -0
@@ -0,0 +1,179 @@
|
|
1
|
+
module BeakerWindows
|
2
|
+
module WindowsFeature
|
3
|
+
|
4
|
+
# Retrieve a list of Windows roles and features from a host. The list can be filtered
|
5
|
+
# to available or installed.
|
6
|
+
#
|
7
|
+
# ==== Attributes
|
8
|
+
#
|
9
|
+
# * +host+ - A Windows Beaker host running PowerShell 3 or greater.
|
10
|
+
# * +opts:filter+ - Filter the list of Windows features.
|
11
|
+
# * +:all+ - Do not filter anything from the list. (Default)
|
12
|
+
# * +:available+ - Filter the list to only the available Windows features.
|
13
|
+
# * +:installed+ - Filter the list to only the installed Windows features.
|
14
|
+
#
|
15
|
+
# ==== Returns
|
16
|
+
#
|
17
|
+
# +Array+ - An array of strings representing Windows features.
|
18
|
+
#
|
19
|
+
# ==== Raises
|
20
|
+
#
|
21
|
+
# +ArgumentError+ - An invalid filter was specified.
|
22
|
+
# +RuntimeError+ - The host does not have PowerShell 3 or greater available.
|
23
|
+
#
|
24
|
+
# ==== Example
|
25
|
+
#
|
26
|
+
# get_windows_features_on(host)
|
27
|
+
# get_windows_features_on(host, :filter => :available)
|
28
|
+
# get_windows_features_on(host, :filter => :installed)
|
29
|
+
def get_windows_features_on(host, opts={})
|
30
|
+
# Init
|
31
|
+
opts[:filter] ||= :all
|
32
|
+
|
33
|
+
ps_cmd = 'Get-WindowsFeature'
|
34
|
+
|
35
|
+
# Filter features
|
36
|
+
case opts[:filter]
|
37
|
+
when :available
|
38
|
+
ps_cmd << ' | Where { \$_.Installed -Eq \$false }'
|
39
|
+
when :installed
|
40
|
+
ps_cmd << ' | Where { \$_.Installed -Eq \$true }'
|
41
|
+
else
|
42
|
+
error_message = 'Unknown filter! Specify :all, :available or :installed.'
|
43
|
+
raise(ArgumentError, error_message) unless opts[:filter] == :all
|
44
|
+
end
|
45
|
+
|
46
|
+
# Select only the feature name
|
47
|
+
ps_cmd << ' | Select -ExpandProperty Name'
|
48
|
+
|
49
|
+
# Parse output
|
50
|
+
result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
|
51
|
+
|
52
|
+
raise(RuntimeError, 'This method requires PowerShell 3 or greater!') if result.exit_code == 1
|
53
|
+
|
54
|
+
return result.stdout.rstrip.split("\n")
|
55
|
+
end
|
56
|
+
|
57
|
+
# Install a Windows role or feature on a host.
|
58
|
+
#
|
59
|
+
# ==== Attributes
|
60
|
+
#
|
61
|
+
# * +host+ - A Windows Beaker host running PowerShell 3 or greater.
|
62
|
+
# * +feature_name+ - The name of the Windows feature to install. (NOT THE DISPLAY NAME!)
|
63
|
+
# * +opts:suppress_fail+ - Suppress raising exception on feature installation failure.
|
64
|
+
# * +:true+ - Suppress the raising a RuntimeError exception.
|
65
|
+
# * +:false+ - Allow RuntimeError to be raised if feature fails to install. (Default)
|
66
|
+
#
|
67
|
+
# ==== Raises
|
68
|
+
#
|
69
|
+
# +RuntimeError+ - Failed to install the feature.
|
70
|
+
# +RuntimeError+ - Invalid feature name or incorrect PowerShell version!
|
71
|
+
#
|
72
|
+
# ==== Example
|
73
|
+
#
|
74
|
+
# install_windows_feature_on(host, 'Print-Server')
|
75
|
+
# install_windows_feature_on(host, 'Bad-Feature', :suppress_fail => true)
|
76
|
+
def install_windows_feature_on(host, feature_name, opts={})
|
77
|
+
# Init
|
78
|
+
opts[:suppress_fail] ||= false
|
79
|
+
|
80
|
+
ps_cmd = "(Install-WindowsFeature -Name '#{feature_name}' -ErrorAction 'Stop').Success"
|
81
|
+
|
82
|
+
# Parse output
|
83
|
+
result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
|
84
|
+
|
85
|
+
unless opts[:suppress_fail]
|
86
|
+
raise(RuntimeError, 'Invalid feature name or incorrect PowerShell version!') if result.exit_code == 1
|
87
|
+
raise(RuntimeError, 'Failed to install feature!') unless result.stdout =~ /True/
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Remove a Windows role or feature on a host.
|
92
|
+
#
|
93
|
+
# ==== Attributes
|
94
|
+
#
|
95
|
+
# * +host+ - A Windows Beaker host running PowerShell 3 or greater.
|
96
|
+
# * +feature_name+ - The name of the Windows feature to remove. (NOT THE DISPLAY NAME!)
|
97
|
+
# * +opts:suppress_fail+ - Suppress raising exception on feature installation failure.
|
98
|
+
# * +:true+ - Suppress the raising a RuntimeError exception.
|
99
|
+
# * +:false+ - Allow RuntimeError to be raised if feature fails to be removed. (Default)
|
100
|
+
#
|
101
|
+
# ==== Raises
|
102
|
+
#
|
103
|
+
# +RuntimeError+ - Failed to remove the feature.
|
104
|
+
# +RuntimeError+ - Invalid feature name or incorrect PowerShell version!
|
105
|
+
#
|
106
|
+
# ==== Example
|
107
|
+
#
|
108
|
+
# remove_windows_feature_on(host, 'Print-Server')
|
109
|
+
# remove_windows_feature_on(host, 'Bad-Feature', :suppress_fail => true)
|
110
|
+
def remove_windows_feature_on(host, feature_name, opts={})
|
111
|
+
# Init
|
112
|
+
opts[:suppress_fail] ||= false
|
113
|
+
|
114
|
+
ps_cmd = "(Remove-WindowsFeature -Name '#{feature_name}' -ErrorAction 'Stop').Success"
|
115
|
+
|
116
|
+
# Parse output
|
117
|
+
result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
|
118
|
+
|
119
|
+
unless opts[:suppress_fail]
|
120
|
+
raise(RuntimeError, 'Invalid feature name or incorrect PowerShell version!') if result.exit_code == 1
|
121
|
+
raise(RuntimeError, 'Failed to remove feature!') unless result.stdout =~ /True/
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
module Beaker
|
129
|
+
module DSL
|
130
|
+
module Assertions
|
131
|
+
|
132
|
+
# Assert that a Windows feature is installed or not on a host.
|
133
|
+
#
|
134
|
+
# ==== Attributes
|
135
|
+
#
|
136
|
+
# * +host+ - A Windows Beaker host running PowerShell 3 or greater.
|
137
|
+
# * +feature_name+ - The name of the Windows feature to verify if installed.
|
138
|
+
# (NOT THE DISPLAY NAME!)
|
139
|
+
# * +opts:state+ - Assert the state of the Windows feature.
|
140
|
+
# * +:installed+ - Feature is installed. (Default)
|
141
|
+
# * +:available+ - Feature is not installed.
|
142
|
+
#
|
143
|
+
# ==== Raises
|
144
|
+
#
|
145
|
+
# +ArgumentError+ - An invalid state was specified.
|
146
|
+
# +Minitest::Assertion+ - The feature is not in the desired state or does not exist.
|
147
|
+
#
|
148
|
+
# ==== Example
|
149
|
+
#
|
150
|
+
# assert_windows_feature_on(host, 'Print-Server')
|
151
|
+
# assert_windows_feature_on(host, 'WINS', :state => :available)
|
152
|
+
# assert_windows_feature_on(host, 'Powershell-V2', :state => :installed)
|
153
|
+
def assert_windows_feature_on(host, feature_name, opts={})
|
154
|
+
# Init
|
155
|
+
opts[:state] ||= :installed
|
156
|
+
|
157
|
+
ps_cmd = "(Get-WindowsFeature -Name '#{feature_name}').InstallState -Eq "
|
158
|
+
|
159
|
+
# Desired state
|
160
|
+
case opts[:state]
|
161
|
+
when :available
|
162
|
+
ps_cmd << "'Available'"
|
163
|
+
when :installed
|
164
|
+
ps_cmd << "'Installed'"
|
165
|
+
else
|
166
|
+
raise(ArgumentError, 'Unknown feature state! Specify either :available or :installed.')
|
167
|
+
end
|
168
|
+
|
169
|
+
# Parse output
|
170
|
+
result = on(host, exec_ps_cmd(ps_cmd), :accept_all_exit_codes => true)
|
171
|
+
|
172
|
+
raise(RuntimeError, 'This method requires PowerShell 3 or greater!') if result.exit_code == 1
|
173
|
+
|
174
|
+
assert_match(/True/, result.stdout, 'The feature is not in the desired state or does not exist!')
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: beaker-windows
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Puppet Labs
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.11'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.11'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: beaker
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.32'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.32'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: yard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: markdown
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: This Gem extends the Beaker DSL for the verify state on Windows nodes.
|
112
|
+
email:
|
113
|
+
- qa@puppetlabs.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- Gemfile
|
119
|
+
- Gemfile.lock
|
120
|
+
- HISTORY.md
|
121
|
+
- LICENSE.txt
|
122
|
+
- README.md
|
123
|
+
- Rakefile
|
124
|
+
- lib/beaker-windows.rb
|
125
|
+
- lib/beaker-windows/path.rb
|
126
|
+
- lib/beaker-windows/powershell.rb
|
127
|
+
- lib/beaker-windows/registry.rb
|
128
|
+
- lib/beaker-windows/version.rb
|
129
|
+
- lib/beaker-windows/windows_feature.rb
|
130
|
+
- spec/spec_helper.rb
|
131
|
+
homepage: https://github.com/puppetlabs/beaker-windows
|
132
|
+
licenses:
|
133
|
+
- Apache-2.0
|
134
|
+
metadata: {}
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 2.4.6
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: Puppet Labs testing library for testing on Windows.
|
155
|
+
test_files:
|
156
|
+
- spec/spec_helper.rb
|
157
|
+
has_rdoc:
|