puppetbox 0.3.1 → 0.4.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: 466cebb037b7d3d05647c4c6edb2276cdc27cf20
4
- data.tar.gz: d2b111a894e2acff93367e270e5b7291550d2c62
3
+ metadata.gz: 393f46fa2e8abcca2e2fd278c4c4732af09ba444
4
+ data.tar.gz: 7dc52e48c12005dff1122fa6f900064f86b8bf16
5
5
  SHA512:
6
- metadata.gz: be79a33ae71e23acb18c040028923f4057e30dadfba4aac33d64b9bc06a84e5cb29cd96efee3ebca5b3c75aa622ea980c1308cdd0a1892126994687f97086c21
7
- data.tar.gz: dc4054fe17680fd977ac4f872491a73773780c45177bd5133ca54878376b045ad62688cb0ff2477f5ddb46065a9af3bed4353eaeaa52667614bf4403df654424
6
+ metadata.gz: cb725f0228784ae8560c4f0de5a7bad886a1fa7a205c8c9185f9431240e8ffe3f98b5335d01c6bb3064b56d7200feddab0683bdfb7683ea673504a2a889e6938
7
+ data.tar.gz: 45bae316cd000af9dc4f5b4a7936bdd10c58d56037181b80305148e0afec2387aa8e53d262710a550d37ac7ce61ce0fc3eb4d3c717316207e2cf835446095ebd
@@ -6,8 +6,9 @@ require "puppetbox/logger"
6
6
  module PuppetBox
7
7
  module Driver
8
8
  class Vagrant
9
- WORKING_DIR_VAGRANT = "vagrant"
10
- PUPPET_CODE_MOUNT = "/etc/puppetlabs/code/environments/production"
9
+ WORKING_DIR_VAGRANT = "vagrant"
10
+ PUPPET_CODE_MOUNT = "/etc/puppetlabs/code/environments/production"
11
+ SPEC_ACCEPTANCE_MOUNT = "spec/acceptance:/acceptance"
11
12
 
12
13
  def node_name
13
14
  @name
@@ -26,33 +27,13 @@ module PuppetBox
26
27
  @vom = Vagrantomatic::Vagrantomatic.new(vagrant_vm_dir:@working_dir, logger:@logger)
27
28
  @logger.debug("creating instance metadata for #{@name}")
28
29
  @vm = @vom.instance(@name, config:@config)
30
+
31
+ # the code under test
29
32
  @vm.add_shared_folder("#{codedir}:#{PUPPET_CODE_MOUNT}")
30
33
 
34
+ # ./spec/acceptance directory
35
+ @vm.add_shared_folder(SPEC_ACCEPTANCE_MOUNT)
31
36
 
32
- # if ! @config.has_key?("box")
33
- # raise "Node #{node_name} must specify box"
34
- # end
35
-
36
- # Add the code dir to the config has so that it will automatically become
37
- # a shared folder when the VM boots
38
-
39
- # can't use dig() might not be ruby 2.3
40
- # if @config.has_key?("folders")
41
- # @config["folders"] = Array(@config["folders"])
42
- #
43
- # # all paths must be fully qualified. If we were asked to do a relative path, change
44
- # # it to the current directory since that's probably what the user wanted. Not right?
45
- # # user supply correct path!
46
- # @config["folders"] = @config["folders"].map { |folder|
47
- # if ! folder.start_with? '/'
48
- # folder = "#{Dir.pwd}/#{folder}"
49
- # end
50
- # folder
51
- # }
52
- # else
53
- # @config["folders"] = []
54
- # end
55
- # @config["folders"] << "#{codedir}:#{PUPPET_CODE_MOUNT}"
56
37
  @logger.debug "instance #{name} initialised"
57
38
  end
58
39
 
@@ -81,16 +62,6 @@ module PuppetBox
81
62
  def open()
82
63
  # make sure working dir exists...
83
64
  FileUtils.mkdir_p(@working_dir)
84
-
85
- # vom = Vagrantomatic::Vagrantomatic.new(vagrant_vm_dir:@working_dir, logger:@logger)
86
-
87
- # @logger.debug("creating instance metadata for #{@name}")
88
- # @vm = vom.instance(@name, config:@config)
89
-
90
- # obtain 'fixed' metadata from instance
91
- # @config = @vm.config
92
- # add in our mandatory shared folder
93
- # @vm.add_shared_folder("#{codedir}:#{PUPPET_CODE_MOUNT}")
94
65
  @vm.save
95
66
 
96
67
  @logger.debug("Instance saved and ready for starting")
@@ -101,7 +72,7 @@ module PuppetBox
101
72
  # anything on SSH...)
102
73
  def close()
103
74
  if ! @keep_vm
104
- @logger.info("Closing #{@node_name}")
75
+ @logger.info("Closing #{@name}")
105
76
  @vm.purge
106
77
  end
107
78
  end
@@ -1,20 +1,6 @@
1
1
  module PuppetBox
2
- # New drivers must implement the methods in this class (via ductyping)
3
2
  class Driver
4
- # def initialize(name, keep_vm=true)
5
- # end
6
- #
7
- # def self.open()
8
- # end
9
- #
10
- # def self.close()
11
- # end
12
- #
13
- # def self.selftest()
14
- # end
15
- #
16
- # def self.puppet_apply_x2(puppet_class)
17
- # end
3
+
18
4
  end
19
5
 
20
6
  end
@@ -55,27 +55,5 @@ module PuppetBox
55
55
  end
56
56
  end
57
57
 
58
- #
59
- #
60
- # if nodeset["hosts"][node.name].has_key?('config') and nodeset_yaml["HOSTS"][node.name].has_key?('driver')
61
- # test.classes.each { |puppet_class|
62
- # logger.info "Acceptance testing #{node.name} #{puppet_class.name}"
63
- # summary[node.name][puppet_class.name] = pb.provision_and_test(
64
- # nodeset_yaml["HOSTS"][node.name]["driver"],
65
- # node.name,
66
- # puppet_class.name,
67
- # nodeset_yaml["HOSTS"][node.name]['config'],
68
- # @repo,
69
- # )
70
- #
71
- # overall &= ! summary[node.name][puppet_class.name]
72
- # }
73
- # else
74
- # message = "onceover-nodes.yaml missing `config` or `driver` element for #{node.name} (tests skipped)"
75
- # summary[node.name] = message
76
- # overall = false
77
- # end
78
- # end
79
-
80
58
  end
81
59
  end
@@ -32,11 +32,7 @@ module PuppetBox
32
32
  def enqueue_test(node_name, run_from, puppet_class)
33
33
  instantiate_driver(node_name, run_from)
34
34
  @testsuite[node_name]["classes"] << puppet_class
35
- # get_driver_instance(driver_name, host)
36
- # node_name
37
- # puppet_class.name,
38
- # nodeset_yaml["HOSTS"][node.name]['config'],
39
- # @repo,
35
+
40
36
  end
41
37
 
42
38
  def run_testsuite
@@ -89,47 +85,10 @@ module PuppetBox
89
85
  "classes" => [],
90
86
  }
91
87
  end
92
-
93
- # di
94
- # result = ::PuppetBox.run_puppet(di, puppet_class)
95
-
96
- # indent = " "
97
- # if result.passed
98
- # logger.info("#{indent}#{host}:#{puppet_class} --> PASSED")
99
- # else
100
- # logger.error("#{indent}#{host}:#{puppet_class} --> FAILED")
101
- # # since we stop running on failure, the error messages will be in the
102
- # # last element of the result.messages array (tada!)
103
- # messages = result.messages
104
- # messages[-1].each { |line|
105
- # # puts "XXXXXXX #{line}"
106
- # logger.error "#{indent}#{host} - #{line}"
107
- # }
108
- # # puts "size of result messages #{result.messages.size}"
109
- # # puts "size of result messages #{result.messages[0].size}"
110
- # # run.each { |message_arr|
111
- # # puts message_arr
112
- # # #message_arr.each { |line|
113
- # # # puts line
114
- # # # }
115
- # # # require 'pry'
116
- # # # binding.pry
117
- # # #puts "messages size"
118
- # # #puts messages.size
119
- # # # messages.each { |message|
120
- # # # messages from the puppet run are avaiable in a nested array of run
121
- # # # and then lines so lets print each one out indended from the host so
122
- # # # we can see what's what
123
- # # # logger.error("#{host} #{message}")
124
- # # # }
125
- # # }
126
- # # }
127
- # end
128
- # result.passed
129
88
  end
130
89
 
131
-
132
- # Print all results to STDOUT
90
+ # Print a summary of *all* results to STDOUT. Does not include the error(s)
91
+ # if any - these would have been printed after each individual test ran
133
92
  def print_results
134
93
  Report::print(@result_set)
135
94
  end
@@ -153,14 +112,22 @@ module PuppetBox
153
112
  logger.debug("#{driver_instance.node_name} started")
154
113
  if driver_instance.self_test
155
114
  logger.debug("#{driver_instance.node_name} self_test OK, running puppet")
156
- puppet_classes.each{ |puppet_class|
115
+ puppet_classes.each { |puppet_class|
157
116
  if @result_set.class_size(driver_instance.node_name) > 0 and reset_after_run
158
117
  # purge and reboot the vm - this will save approximately 1 second
159
118
  # per class on the self-test which we now know will succeed
160
119
  driver_instance.reset
161
120
  end
121
+ logger.info("running test #{driver_instance.node_name} - #{puppet_class}")
162
122
  driver_instance.run_puppet_x2(puppet_class)
163
123
  @result_set.save(driver_instance.node_name, puppet_class, driver_instance.result)
124
+
125
+ Report::log_test_result_or_errors(
126
+ @logger,
127
+ driver_instance.node_name,
128
+ puppet_class,
129
+ driver_instance.result,
130
+ )
164
131
  }
165
132
  logger.debug("#{driver_instance.node_name} test completed, closing instance")
166
133
  else
@@ -23,5 +23,25 @@ module PuppetBox
23
23
  stream.puts "\n\nOVERALL STATUS: #{pretty_status(result_set.passed?)}"
24
24
  end
25
25
 
26
+
27
+ # Print an individual test's result or if it failed, it's errors.
28
+ def self.log_test_result_or_errors(logger, node_name, puppet_class, result)
29
+ indent = " "
30
+ tag = "#{indent}#{node_name} - #{puppet_class}"
31
+ logger.info("#{tag}: #{pretty_status(result.passed?)}")
32
+ if ! result.passed?
33
+ # since we stop running on failure, the error messages will be in the
34
+ # last element of the result.messages array (tada!)
35
+ messages = result.messages
36
+ if messages.empty?
37
+ logger.error "#{tag} - no output available"
38
+ else
39
+ messages[-1].each { |line|
40
+ logger.error "#{tag} - #{line}"
41
+ }
42
+ end
43
+ end
44
+ end
45
+
26
46
  end
27
47
  end
@@ -18,12 +18,18 @@ module PuppetBox
18
18
  @report = []
19
19
  end
20
20
 
21
+ # Puppet exit codes:
21
22
  # 0: The run succeeded with no changes or failures; the system was already in the desired state.
22
23
  # 1: The run failed, or wasn't attempted due to another run already in progress.
23
24
  # 2: The run succeeded, and some resources were changed.
24
25
  # 4: The run succeeded, and some resources failed.
25
26
  # 6: The run succeeded, and included both changes and failures.
26
27
  def save(status_code, messages)
28
+
29
+ # messages will usually be an array of output - one per line, but it might
30
+ # not be and everthing expects to be so just turn it into one if it isn't
31
+ # already...
32
+ messages = Array(messages)
27
33
  status = PS_ERROR
28
34
  if @report.empty?
29
35
  # first run
@@ -1,3 +1,3 @@
1
1
  module PuppetBox
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/puppetbox.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  require "puppetbox/version"
2
-
3
2
  module PuppetBox
4
3
 
5
-
6
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppetbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoff Williams