Skip to content

Commit 91723d0

Browse files
authored
Merge pull request puppetlabs#61 from puppetlabs/MODULES-8391
(MODULES-8391) Enable implementations on the init task and hide others
2 parents b2b0edb + 7f086d7 commit 91723d0

11 files changed

+141
-63
lines changed

.fixtures.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
fixtures:
2+
symlinks:
3+
service: "#{source_dir}"

.sync.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,15 @@
55
- set: docker/ubuntu-14.04
66
docker_defaults:
77
bundler_args: ""
8+
script: bundle exec rake task_acceptance
89
secure: ""
910
branches:
1011
- release
12+
remove_includes:
13+
- env: PUPPET_GEM_VERSION="~> 5.0" CHECK=parallel_spec
14+
rvm: 2.4.4
15+
- env: PUPPET_GEM_VERSION="~> 4.0" CHECK=parallel_spec RUBYGEMS_VERSION=2.7.8
16+
rvm: 2.1.9
1117

1218
Gemfile:
1319
optional:
@@ -25,6 +31,8 @@ Gemfile:
2531
- mswin
2632
- mingw
2733
- x64_mingw
34+
- gem: 'bolt'
35+
version: '~> 1.4'
2836

2937
.gitlab-ci.yml:
3038
unmanaged: true

.travis.yml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,21 @@ matrix:
2727
dist: trusty
2828
env: PUPPET_INSTALL_TYPE=agent BEAKER_debug=true BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_set=docker/centos-7 BEAKER_TESTMODE=apply
2929
rvm: 2.5.1
30-
script: bundle exec rake beaker
30+
script: bundle exec rake task_acceptance
3131
services: docker
3232
sudo: required
3333
-
3434
bundler_args:
3535
dist: trusty
3636
env: PUPPET_INSTALL_TYPE=agent BEAKER_debug=true BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_set=docker/ubuntu-14.04 BEAKER_TESTMODE=apply
3737
rvm: 2.5.1
38-
script: bundle exec rake beaker
38+
script: bundle exec rake task_acceptance
3939
services: docker
4040
sudo: required
4141
-
4242
env: CHECK="syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop"
4343
-
4444
env: CHECK=parallel_spec
45-
-
46-
env: PUPPET_GEM_VERSION="~> 5.0" CHECK=parallel_spec
47-
rvm: 2.4.4
48-
-
49-
env: PUPPET_GEM_VERSION="~> 4.0" CHECK=parallel_spec RUBYGEMS_VERSION=2.7.8 BUNDLER_VERSION=1.17.3
50-
rvm: 2.1.9
5145
branches:
5246
only:
5347
- master

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ end
3131
group :system_tests do
3232
gem "puppet-module-posix-system-r#{minor_version}", require: false, platforms: [:ruby]
3333
gem "puppet-module-win-system-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
34+
gem "bolt", '~> 1.4', require: false
3435
end
3536

3637
puppet_version = ENV['PUPPET_GEM_VERSION']

Rakefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,6 @@ EOM
7474
end
7575
end
7676

77+
task :task_acceptance => [:spec_prep, :beaker] do
78+
# nothing to do
79+
end

spec/acceptance/init_spec.rb

Lines changed: 73 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,110 @@
11
# run a test task
22
require 'spec_helper_acceptance'
3-
# bolt regexes
4-
# expect_multiple_regexes(result: result, regexes: [%r{"status":"(stopped|in_sync)"}, %r{Ran on 1 node}])
5-
# expect_multiple_regexes(result: result, regexes: [%r{"status":"stopped"}, %r{"enabled":"false"}, %r{Ran on 1 node}])
6-
7-
def run_and_expect(params, regex_hash)
8-
expect_multiple_regexes(result: run_task(task_name: 'service', params: params), regexes: regex_hash)
9-
end
3+
require 'beaker-task_helper/inventory'
4+
require 'bolt_spec/run'
105

116
describe 'service task' do
7+
include Beaker::TaskHelper::Inventory
8+
include BoltSpec::Run
9+
10+
def module_path
11+
RSpec.configuration.module_path
12+
end
13+
14+
def config
15+
{ 'modulepath' => module_path }
16+
end
17+
18+
def inventory
19+
hosts_to_inventory.merge('features' => ['puppet-agent'])
20+
end
21+
22+
def run(params)
23+
run_task('service', 'default', params, config: config, inventory: inventory)
24+
end
25+
26+
osfamily_fact = fact('osfamily')
27+
1228
package_to_use = ''
1329
before(:all) do
14-
if fact_on(default, 'osfamily') != 'windows'
15-
if fact_on(default, 'osfamily') == 'RedHat' && fact_on(default, 'operatingsystemrelease') < '6'
16-
run_task(task_name: 'service', params: 'action=stop name=syslog')
30+
if osfamily_fact != 'windows'
31+
if osfamily_fact == 'RedHat' && fact('operatingsystemrelease') < '6'
32+
run('action' => 'stop', 'name' => 'syslog')
1733
end
1834
package_to_use = 'rsyslog'
19-
apply_manifest("package { \"#{package_to_use}\": ensure => present, }")
35+
apply_manifest_on(default, "package { \"#{package_to_use}\": ensure => present, }")
2036
else
2137
package_to_use = 'W32Time'
22-
run_and_expect("action=start name=#{package_to_use}", [%r{status.*(in_sync|started)}, %r{#{task_summary_line}}])
38+
run('action' => 'start', 'name' => package_to_use)
2339
end
2440
end
41+
2542
describe 'enable action' do
2643
it 'enable/status a service' do
27-
run_and_expect("action=enable name=#{package_to_use}",
28-
[%r{status.*(in_sync|enabled)}, %r{#{task_summary_line}}])
29-
run_and_expect("action=status name=#{package_to_use}",
30-
[%r{enabled.*true}, %r{#{task_summary_line}}])
44+
result = run('action' => 'enable', 'name' => package_to_use)
45+
expect(result[0]['status']).to eq('success')
46+
expect(result[0]['result']['status']).to match(%r{in_sync|enabled})
47+
48+
result = run('action' => 'status', 'name' => package_to_use)
49+
expect(result[0]['status']).to eq('success')
50+
expect(result[0]['result']['enabled']).to eq('true')
3151
end
3252
end
53+
3354
describe 'restart action' do
3455
it 'restart/status a service' do
35-
run_and_expect("action=restart name=#{package_to_use}",
36-
[%r{status.*restarted}, %r{#{task_summary_line}}])
37-
run_and_expect("action=status name=#{package_to_use}",
38-
[%r{status.*running}, %r{enabled.*true}, %r{#{task_summary_line}}])
56+
result = run('action' => 'restart', 'name' => package_to_use)
57+
expect(result[0]['status']).to eq('success')
58+
expect(result[0]['result']['status']).to eq('restarted')
59+
60+
result = run('action' => 'status', 'name' => package_to_use)
61+
expect(result[0]['status']).to eq('success')
62+
expect(result[0]['result']['status']).to eq('running')
63+
expect(result[0]['result']['enabled']).to eq('true')
3964
end
4065
end
66+
4167
describe 'stop action' do
4268
it 'stop/status a service' do
43-
run_and_expect("action=stop name=#{package_to_use}", [%r{status.*(in_sync|stopped)}, %r{#{task_summary_line}}])
69+
result = run('action' => 'stop', 'name' => package_to_use)
70+
expect(result[0]['status']).to eq('success')
71+
expect(result[0]['result']['status']).to match(%r{in_sync|stopped})
72+
4473
# Debian can give incorrect status
45-
if fact_on(default, 'osfamily') != 'Debian'
46-
run_and_expect("action=status name=#{package_to_use}", [%r{status.*stopped}, %r{enabled.*true}, %r{#{task_summary_line}}])
74+
if osfamily_fact != 'Debian'
75+
result = run('action' => 'status', 'name' => package_to_use)
76+
expect(result[0]['status']).to eq('success')
77+
expect(result[0]['result']['status']).to eq('stopped')
78+
expect(result[0]['result']['enabled']).to eq('true')
4779
end
4880
end
4981
end
82+
5083
describe 'start action' do
5184
it 'start/status a service' do
52-
run_and_expect("action=start name=#{package_to_use}", [%r{status.*(in_sync|started)}, %r{#{task_summary_line}}])
85+
result = run('action' => 'start', 'name' => package_to_use)
86+
expect(result[0]['status']).to eq('success')
87+
expect(result[0]['result']['status']).to match(%r{in_sync|started})
88+
5389
# Debian can give incorrect status
54-
if fact_on(default, 'osfamily') != 'Debian'
55-
run_and_expect("action=status name=#{package_to_use}", [%r{status.*running}, %r{enabled.*true}, %r{#{task_summary_line}}])
90+
if osfamily_fact != 'Debian'
91+
result = run('action' => 'status', 'name' => package_to_use)
92+
expect(result[0]['status']).to eq('success')
93+
expect(result[0]['result']['status']).to eq('running')
94+
expect(result[0]['result']['enabled']).to eq('true')
5695
end
5796
end
5897
end
98+
5999
describe 'disable action' do
60100
it 'disable/status a service' do
61-
run_and_expect("action=disable name=#{package_to_use}",
62-
[%r{status.*disabled}, %r{#{task_summary_line}}])
63-
run_and_expect("action=status name=#{package_to_use}",
64-
[%r{enabled.*false}, %r{#{task_summary_line}}])
101+
result = run('action' => 'disable', 'name' => package_to_use)
102+
expect(result[0]['status']).to eq('success')
103+
expect(result[0]['result']['status']).to eq('disabled')
104+
105+
result = run('action' => 'status', 'name' => package_to_use)
106+
expect(result[0]['status']).to eq('success')
107+
expect(result[0]['result']['enabled']).to eq('false')
65108
end
66109
end
67110
end

spec/acceptance/linux_spec.rb

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,57 @@
11
# run a test task
22
require 'spec_helper_acceptance'
3-
# bolt regexes
4-
# expect_multiple_regexes(result: result, regexes: [%r{"status":"(stopped|in_sync)"}, %r{Ran on 1 node}])
5-
# expect_multiple_regexes(result: result, regexes: [%r{"status":"stopped"}, %r{"enabled":"false"}, %r{Ran on 1 node}])
3+
require 'beaker-task_helper/inventory'
4+
require 'bolt_spec/run'
65

7-
describe 'linux service task', unless: fact_on(default, 'osfamily') == 'windows' do
8-
package_to_use = ''
6+
describe 'linux service task', unless: fact('osfamily') == 'windows' do
7+
include Beaker::TaskHelper::Inventory
8+
include BoltSpec::Run
9+
10+
def module_path
11+
RSpec.configuration.module_path
12+
end
13+
14+
def config
15+
{ 'modulepath' => module_path }
16+
end
17+
18+
def inventory
19+
hosts_to_inventory
20+
end
21+
22+
def run(params)
23+
run_task('service::linux', 'default', params, config: config, inventory: inventory)
24+
end
25+
26+
package_to_use = 'rsyslog'
927
before(:all) do
10-
if fact_on(default, 'osfamily') == 'RedHat' && fact_on(default, 'operatingsystemrelease') < '6'
11-
run_task(task_name: 'service::linux', params: 'action=stop name=syslog')
28+
if fact('osfamily') == 'RedHat' && fact('operatingsystemrelease') < '6'
29+
run('action' => 'stop', 'name' => 'syslog')
1230
end
13-
package_to_use = 'rsyslog'
14-
apply_manifest("package { \"#{package_to_use}\": ensure => present, }")
31+
apply_manifest_on(default, "package { \"#{package_to_use}\": ensure => present, }")
1532
end
33+
1634
describe 'stop action' do
1735
it "stop #{package_to_use}" do
18-
result = run_task(task_name: 'service::linux', params: "action=stop name=#{package_to_use}")
19-
expect_multiple_regexes(result: result, regexes: [%r{status.*(stop)}, %r{#{task_summary_line}}])
36+
result = run('action' => 'stop', 'name' => package_to_use)
37+
expect(result[0]['status']).to eq('success')
38+
expect(result[0]['result']['status']).to match(%r{stop})
2039
end
2140
end
41+
2242
describe 'start action' do
2343
it "start #{package_to_use}" do
24-
result = run_task(task_name: 'service::linux', params: "action=start name=#{package_to_use}")
25-
expect_multiple_regexes(result: result, regexes: [%r{status.*(start)}, %r{#{task_summary_line}}])
44+
result = run('action' => 'start', 'name' => package_to_use)
45+
expect(result[0]['status']).to eq('success')
46+
expect(result[0]['result']['status']).to match(%r{start})
2647
end
2748
end
49+
2850
describe 'restart action' do
2951
it "restart #{package_to_use}" do
30-
result = run_task(task_name: 'service::linux', params: "action=restart name=#{package_to_use}")
31-
expect_multiple_regexes(result: result, regexes: [%r{status.*(restart)}, %r{#{task_summary_line}}])
52+
result = run('action' => 'restart', 'name' => package_to_use)
53+
expect(result[0]['status']).to eq('success')
54+
expect(result[0]['result']['status']).to match(%r{restart})
3255
end
3356
end
3457
end

spec/spec_helper_acceptance.rb

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,17 @@
44
require 'beaker-rspec'
55
require 'beaker/puppet_install_helper'
66
require 'beaker/module_install_helper'
7-
require 'beaker-task_helper'
87

98
run_puppet_install_helper
109
configure_type_defaults_on(hosts)
11-
install_ca_certs unless pe_install?
12-
install_bolt_on(hosts) unless pe_install?
10+
install_ca_certs
1311
install_module_on(hosts)
1412
install_module_dependencies_on(hosts)
1513

1614
RSpec.configure do |c|
1715
# Readable test descriptions
1816
c.formatter = :documentation
1917

20-
# Configure all nodes in nodeset
21-
c.before :suite do
22-
run_puppet_access_login(user: 'admin') if pe_install?
23-
end
18+
c.add_setting :module_path
19+
c.module_path = File.join(File.dirname(File.expand_path(__FILE__)), 'fixtures', 'modules')
2420
end

tasks/init.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,21 @@
33
"input_method": "stdin",
44
"parameters": {
55
"action": {
6-
"description": "The operation (start, stop, restart, enable, disable, status) to perform on the service",
6+
"description": "The operation (start, stop, restart, enable, disable, status) to perform on the service.",
77
"type": "Enum[start, stop, restart, enable, disable, status]"
88
},
99
"name": {
1010
"description": "The name of the service to operate on.",
1111
"type": "String[1]"
1212
},
1313
"provider": {
14-
"description": "The provider to use to manage or inspect the service, defaults to the system service manager",
14+
"description": "The provider to use to manage or inspect the service, defaults to the system service manager. Only used when the 'puppet-agent' feature is available on the target so we can leverage Puppet.",
1515
"type": "Optional[String[1]]"
1616
}
17-
}
17+
},
18+
"implementations": [
19+
{"name": "init.rb", "requirements": ["puppet-agent"]},
20+
{"name": "windows.ps1", "requirements": ["powershell"], "input_method": "powershell"},
21+
{"name": "linux.sh", "requirements": ["shell"], "input_method": "environment"}
22+
]
1823
}

tasks/linux.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"description": "Manage the state of services (without a puppet agent)",
3+
"private": true,
34
"input_method": "environment",
45
"parameters": {
56
"action": {

tasks/windows.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"description": "Manage the state of Windows services (without a puppet agent)",
3+
"private": true,
34
"input_method": "powershell",
45
"parameters": {
56
"action": {

0 commit comments

Comments
 (0)