puppetbox 0.4.0 → 0.4.1
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 +4 -4
- data/lib/puppetbox/driver/vagrant.rb +30 -1
- data/lib/puppetbox/puppetbox.rb +56 -1
- data/lib/puppetbox/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e98bf1892a07fa686429fd852a495629ebfde34
|
4
|
+
data.tar.gz: 34175eff6de51aefee73c7e22af3168ba131311c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b556b35aecb7a91ef65c2a34b9ce4e3e10ee6ec5fdf4354ed9e0e09461af5f8970b91405fef116aac92b429238e9afed998b92d6f98fad3fac23cbe871b04fbc
|
7
|
+
data.tar.gz: ce27a46a8dc3629fc82b60db99627a94433f160b2427d096c82d94af3b4626d39b383ce967b676e0491ebf28242f7958bfd84f4884bbb9755afba05a22b7665d
|
@@ -8,7 +8,9 @@ module PuppetBox
|
|
8
8
|
class Vagrant
|
9
9
|
WORKING_DIR_VAGRANT = "vagrant"
|
10
10
|
PUPPET_CODE_MOUNT = "/etc/puppetlabs/code/environments/production"
|
11
|
-
|
11
|
+
|
12
|
+
# mount spec/accpetance into the same directory name inside the VM for simplicity
|
13
|
+
SPEC_ACCEPTANCE_MOUNT = "spec/acceptance:/spec/acceptance"
|
12
14
|
|
13
15
|
def node_name
|
14
16
|
@name
|
@@ -97,6 +99,33 @@ module PuppetBox
|
|
97
99
|
self_test
|
98
100
|
end
|
99
101
|
|
102
|
+
# Run a script on the VM by name. We pass in the script name and are able
|
103
|
+
# to run because the ./spec/acceptance directory is mounted inside the VM
|
104
|
+
#
|
105
|
+
# We can figure out windows/linux scripts based on the filename too
|
106
|
+
def run_setup_script(script_file)
|
107
|
+
|
108
|
+
if script_file =~ /.ps1$/
|
109
|
+
# powershell - not supported yet
|
110
|
+
raise("Windows not supported yet https://github.com/GeoffWilliams/puppetbox/issues/3")
|
111
|
+
else
|
112
|
+
# force absolute path
|
113
|
+
script_file = "/#{script_file}"
|
114
|
+
|
115
|
+
@logger.info("Running setup script #{script_file} on #{@name}")
|
116
|
+
status_code, messages = @vm.run("sudo -i #{script_file}")
|
117
|
+
status = (status_code == 0)
|
118
|
+
if status
|
119
|
+
@logger.info("setup script #{script_file} executed successfully")
|
120
|
+
else
|
121
|
+
# our tests are fubar if any setup script failed
|
122
|
+
message = messages.join("\n")
|
123
|
+
raise("setup script #{script_file} failed on #{node_name}: #{message}")
|
124
|
+
end
|
125
|
+
end
|
126
|
+
status
|
127
|
+
end
|
128
|
+
|
100
129
|
def run_puppet_x2(puppet_class)
|
101
130
|
# if you need to link a module into puppet's modulepath either do it
|
102
131
|
# before running puppet (yet to be supported) or use the @config hash
|
data/lib/puppetbox/puppetbox.rb
CHANGED
@@ -7,7 +7,10 @@ require "puppetbox/report"
|
|
7
7
|
module PuppetBox
|
8
8
|
class PuppetBox
|
9
9
|
|
10
|
-
WORKING_DIR
|
10
|
+
WORKING_DIR = File.join(Dir.home, '.puppetbox')
|
11
|
+
ACCEPTANCE_TEST_DIR = "spec/acceptance"
|
12
|
+
ACCEPTANCE_DEFAULT = "__ALL__"
|
13
|
+
SETUP_SCRIPT_GLOB = "setup.*"
|
11
14
|
|
12
15
|
def initialize(logger:nil, nodeset_file: nil, working_dir: nil)
|
13
16
|
# The results of all tests on all driver instances
|
@@ -101,6 +104,57 @@ module PuppetBox
|
|
101
104
|
@result_set.passed?
|
102
105
|
end
|
103
106
|
|
107
|
+
# Sometimes you need to run a script before running a class, or just on
|
108
|
+
# particular host(s). Check for the presence of a bash or powershell script
|
109
|
+
# and execute it on the system under test. If there is an error fail all
|
110
|
+
# tests immediately since it means our test setup is invalid.
|
111
|
+
#
|
112
|
+
# Naming convention/example:
|
113
|
+
# └── SLES-12.1-64
|
114
|
+
# ├── __ALL__
|
115
|
+
# │ └── setup.sh
|
116
|
+
# └── role__puppet__master
|
117
|
+
# └── setup.sh
|
118
|
+
#
|
119
|
+
def setup_test(driver_instance, puppet_class)
|
120
|
+
script_filename_base = File.join(ACCEPTANCE_TEST_DIR, driver_instance.node_name)
|
121
|
+
|
122
|
+
# 1st choice - exact match on classname (with :: converted to __)
|
123
|
+
script_filename_class = File.join(
|
124
|
+
script_filename_base,
|
125
|
+
puppet_class.gsub(/::/,'__'),
|
126
|
+
SETUP_SCRIPT_GLOB
|
127
|
+
)
|
128
|
+
found = Dir.glob(script_filename_class)
|
129
|
+
if found.any?
|
130
|
+
script_target = found[0]
|
131
|
+
else
|
132
|
+
# 2nd choice - the __ALL__ directory
|
133
|
+
script_filename_default = File.join(
|
134
|
+
script_filename_base,
|
135
|
+
ACCEPTANCE_DEFAULT,
|
136
|
+
SETUP_SCRIPT_GLOB
|
137
|
+
)
|
138
|
+
found = Dir.glob(script_filename_default)
|
139
|
+
if found.any?
|
140
|
+
@logger.info(
|
141
|
+
"Using setup script from #{script_filename_default} on "\
|
142
|
+
"#{driver_instance.node_name} for #{puppet_class}, create "\
|
143
|
+
"#{script_filename_class} to override")
|
144
|
+
script_target = found[0]
|
145
|
+
else
|
146
|
+
script_target = false
|
147
|
+
@logger.info(
|
148
|
+
"No setup scripts found for #{driver_instance.node_name} and "\
|
149
|
+
"#{puppet_class} create #{script_filename_default} or "\
|
150
|
+
"#{script_filename_class} if required")
|
151
|
+
end
|
152
|
+
end
|
153
|
+
if script_target
|
154
|
+
driver_instance.run_setup_script(script_target)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
104
158
|
# Run puppet using `driver_instance` to execute
|
105
159
|
def run_puppet(driver_instance, puppet_classes, logger:nil, reset_after_run:true)
|
106
160
|
# use supplied logger in preference to the default puppetbox logger instance
|
@@ -118,6 +172,7 @@ module PuppetBox
|
|
118
172
|
# per class on the self-test which we now know will succeed
|
119
173
|
driver_instance.reset
|
120
174
|
end
|
175
|
+
setup_test(driver_instance, puppet_class)
|
121
176
|
logger.info("running test #{driver_instance.node_name} - #{puppet_class}")
|
122
177
|
driver_instance.run_puppet_x2(puppet_class)
|
123
178
|
@result_set.save(driver_instance.node_name, puppet_class, driver_instance.result)
|
data/lib/puppetbox/version.rb
CHANGED