kitchen-verifier-serverspec 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c96f0cae0d95e4b483b51082bcb656cc817c4ff1
4
- data.tar.gz: 7de2f6876e0f16d5702d93ec82279e86fac96bdb
3
+ metadata.gz: 0a15d723ec9a15097cd9937d8903374c30408438
4
+ data.tar.gz: f2201b8fa6d7621adb32f48f472341ed009b71a9
5
5
  SHA512:
6
- metadata.gz: 88afd1c9537cfcb27938d4108c930fad7c23c09f9adb50c8325ca9d050ee1a95ac804881af8924468105a669605a2e5a7e952bec73b13ff849448fef9abecf4d
7
- data.tar.gz: b8b641a7db018965b7c91991140a57a4e744e93c77f1827975b98e170f8bb4b7a1e79c0f8fab1f769a38ca180c05344edd0c1c10aa0a51502095705c785b3656
6
+ metadata.gz: f48925f82a68c43bbf635c13e452433633a03fc4daca10e2ca662ea23e5c55b1c1bd7ea192b77980d6ad10d78417f05518979c88c08ce2e8664e0975088446df
7
+ data.tar.gz: a19a8ac674eba1cc0fd7e636c5d0ec018da585fce00e1fac76b4f138bf113c07f5cad6776463a17c5a9b9030bef1909ea888a144bb6c6c61602d9a07eaf5793e
data/README.md CHANGED
@@ -6,9 +6,8 @@
6
6
 
7
7
  A Test Kitchen Serverspec Verifer without having to transit the Busser layer.
8
8
 
9
- This is a first version. Currently it only supports running serverspec remotely on the server.
10
- It could be easily enhanced to run serverspec locally on your workstation. Also the installs
11
- don't cover all the possible options yet.
9
+ This supports running supports running serverspec but remotely on the server and locally on your workstation.
10
+ In the next version runners will be supported to provide logic to run serverspec initially supporting ansiblespec.
12
11
 
13
12
 
14
13
  ## Installation
@@ -25,7 +24,8 @@ Or install it yourself as:
25
24
 
26
25
  $ gem install kitchen-verifier-serverspec
27
26
 
28
- When it runs it install serverspec on the remote server. This can be configured by passing a Gemfile like this:
27
+ When it runs it install serverspec on the remote server or the workstation if remote_exec set to false.
28
+ This can be configured by passing a Gemfile like this:
29
29
 
30
30
  ```
31
31
  source 'https://rubygems.org'
@@ -34,7 +34,7 @@ gem 'net-ssh','~> 2.9'
34
34
  gem 'serverspec'
35
35
  ```
36
36
 
37
- this allows extra dependencies to be specified and the version of serverspec specified.
37
+ this allows extra dependencies to be specified and the version of serverspec specified.
38
38
 
39
39
  ## Usage
40
40
 
@@ -52,7 +52,7 @@ suites:
52
52
  - modules/mycompany_base/spec/acceptance/base_spec.rb
53
53
  ```
54
54
 
55
- See example [https://github.com/neillturner/puppet_beaker_repo](https://github.com/neillturner/puppet_beaker_repo)
55
+ See example [https://github.com/neillturner/puppet_repo](https://github.com/neillturner/puppet_repo)
56
56
 
57
57
  or with environment variables
58
58
 
@@ -73,12 +73,34 @@ suites:
73
73
  SSH_KEY: 'spec/tomcat_private_key.pem'
74
74
  ```
75
75
 
76
+ or run on your workstation
77
+
78
+ ```yaml
79
+ verifier:
80
+ name: serverspec
81
+ remote_exec: false
82
+
83
+ suites:
84
+ - name: base
85
+ provisioner:
86
+ custom_facts:
87
+ role_name1: base
88
+ verifier:
89
+ patterns:
90
+ - modules_mycompany/mycompany_base/spec/acceptance/base_local_spec.rb
91
+ env_vars:
92
+ TARGET_HOST: 127.0.0.1
93
+ TARGET_PORT: 2222
94
+ LOGIN_USER: vagrant
95
+ SSH_KEY: 'c:/repository/puppet_repo/private_key.pem'
96
+ ```
76
97
 
77
98
  # Serverspec Verifier Options
78
99
 
79
100
  key | default value | Notes
80
101
  ----|---------------|--------
81
102
  sleep | 0 |
103
+ remote_exec | true | specify false to run serverspec on workstation
82
104
  serverspec_command | nil | custom command to run serverspec
83
105
  format | 'documentation' | format of serverspec output
84
106
  color | true | enable color in the output
@@ -17,7 +17,6 @@ require 'kitchen/verifier/base'
17
17
  module Kitchen
18
18
  module Verifier
19
19
  # Serverspec verifier for Kitchen.
20
- #
21
20
  class Serverspec < Kitchen::Verifier::Base
22
21
  require 'mixlib/shellout'
23
22
 
@@ -54,7 +53,9 @@ module Kitchen
54
53
  conn.execute(serverspec_commands)
55
54
  end
56
55
  else
57
- shellout
56
+ config[:default_path] = Dir.pwd if config[:default_path] == '/tmp/kitchen'
57
+ install_command
58
+ serverspec_commands
58
59
  end
59
60
  debug("[#{name}] Verify completed.")
60
61
  end
@@ -62,86 +63,124 @@ module Kitchen
62
63
  ## for legacy drivers.
63
64
  def run_command
64
65
  sleep_if_set
65
- if config[:remote_exec]
66
- serverspec_commands
67
- else
68
- shellout
69
- init
70
- end
66
+ serverspec_commands
71
67
  end
72
68
 
73
69
  def setup_cmd
74
70
  sleep_if_set
75
- if config[:remote_exec]
76
- install_command
77
- else
78
- shellout
79
- init
80
- end
71
+ install_command
81
72
  end
82
73
 
83
74
  private
84
75
 
85
76
  def serverspec_commands
86
- if config[:serverspec_command]
87
- <<-INSTALL
88
- #{config[:serverspec_command]}
89
- INSTALL
90
- else
91
- <<-INSTALL
92
- if [ -d #{config[:default_path]} ]; then
93
- cd #{config[:default_path]}
94
- #{rspec_commands}
95
- #{remove_default_path}
77
+ if config[:remote_exec]
78
+ if config[:serverspec_command]
79
+ <<-INSTALL
80
+ #{config[:serverspec_command]}
81
+ INSTALL
96
82
  else
97
- echo "ERROR: Default path '#{config[:default_path]}' does not exist"
98
- exit 1
99
- fi
100
- INSTALL
83
+ <<-INSTALL
84
+ if [ -d #{config[:default_path]} ]; then
85
+ cd #{config[:default_path]}
86
+ #{rspec_commands}
87
+ #{remove_default_path}
88
+ else
89
+ echo "ERROR: Default path '#{config[:default_path]}' does not exist"
90
+ exit 1
91
+ fi
92
+ INSTALL
93
+ end
94
+ elsif config[:serverspec_command]
95
+ info("Running command: #{config[:serverspec_command]}")
96
+ system config[:serverspec_command]
97
+ else
98
+ c = rspec_commands
99
+ info("Running command: #{c}")
100
+ system c
101
101
  end
102
102
  end
103
103
 
104
104
  def install_command
105
- info('Installing ruby, bundler and serverspec')
106
- <<-INSTALL
107
- if [ ! $(which ruby) ]; then
108
- echo '-----> Installing ruby, will try to determine platform os'
109
- if [ -f /etc/centos-release ] || [ -f /etc/redhat-release ] || [ -f /etc/oracle-release ]; then
110
- #{sudo_env('yum')} -y install ruby
111
- else
112
- if [ -f /etc/system-release ] || [ grep -q 'Amazon Linux' /etc/system-release ]; then
105
+ if config[:remote_exec]
106
+ info('Installing ruby, bundler and serverspec')
107
+ <<-INSTALL
108
+ if [ ! $(which ruby) ]; then
109
+ echo '-----> Installing ruby, will try to determine platform os'
110
+ if [ -f /etc/centos-release ] || [ -f /etc/redhat-release ] || [ -f /etc/oracle-release ]; then
113
111
  #{sudo_env('yum')} -y install ruby
114
112
  else
115
- #{sudo_env('apt-get')} -y install ruby
113
+ if [ -f /etc/system-release ] || [ grep -q 'Amazon Linux' /etc/system-release ]; then
114
+ #{sudo_env('yum')} -y install ruby
115
+ else
116
+ #{sudo_env('apt-get')} -y install ruby
117
+ fi
116
118
  fi
117
119
  fi
118
- fi
119
- #{install_bundler}
120
- if [ -d #{config[:default_path]} ]; then
121
- #{install_serverspec}
122
- else
123
- echo "ERROR: Default path '#{config[:default_path]}' does not exist"
124
- exit 1
125
- fi
126
- INSTALL
120
+ #{install_bundler}
121
+ if [ -d #{config[:default_path]} ]; then
122
+ #{install_serverspec}
123
+ else
124
+ echo "ERROR: Default path '#{config[:default_path]}' does not exist"
125
+ exit 1
126
+ fi
127
+ INSTALL
128
+ else
129
+ info('Installing bundler and serverspec')
130
+ install_bundler
131
+ install_serverspec
132
+ end
127
133
  end
128
134
 
129
135
  def install_bundler
130
- <<-INSTALL
131
- if [ $(#{sudo('gem')} list bundler -i) == 'false' ]; then
132
- #{sudo_env('gem')} install #{gem_proxy_parm} --no-ri --no-rdoc bundler
133
- fi
134
- INSTALL
136
+ if config[:remote_exec]
137
+ <<-INSTALL
138
+ if [ $(#{sudo('gem')} list bundler -i) == 'false' ]; then
139
+ #{sudo_env('gem')} install #{gem_proxy_parm} --no-ri --no-rdoc bundler
140
+ fi
141
+ INSTALL
142
+ else
143
+ begin
144
+ require 'bundler'
145
+ rescue LoadError
146
+ system `gem install --no-ri --no-rdoc bundler`
147
+ end
148
+ end
135
149
  end
136
150
 
151
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
137
152
  def install_serverspec
138
- bundler_cmd = "#{bundler_path}bundler"
139
- <<-INSTALL
140
- #{test_serverspec_installed}
141
- #{install_gemfile}
142
- #{sudo_env(bundler_cmd)} install --gemfile=#{config[:default_path]}/Gemfile
143
- #{fi_test_serverspec_installed}
144
- INSTALL
153
+ if config[:remote_exec]
154
+ bundler_cmd = "#{bundler_path}bundler"
155
+ <<-INSTALL
156
+ #{test_serverspec_installed}
157
+ #{install_gemfile}
158
+ #{sudo_env(bundler_cmd)} install --gemfile=#{config[:default_path]}/Gemfile
159
+ #{fi_test_serverspec_installed}
160
+ INSTALL
161
+ else
162
+ if config[:test_serverspec_installed]
163
+ begin
164
+ require 'serverspec'
165
+ return
166
+ rescue LoadError
167
+ info('serverspec not installed installing ...')
168
+ end
169
+ end
170
+ unless config[:gemfile]
171
+ gemfile = "#{config[:default_path]}/Gemfile"
172
+ File.open(gemfile, 'w') do |f|
173
+ f.write("source 'https://rubygems.org'\ngem 'net-ssh','~> 2.9.4'\ngem 'serverspec'")
174
+ end
175
+ end
176
+ gemfile = config[:gemfile] if config[:gemfile]
177
+ begin
178
+ system "bundler install --gemfile=#{gemfile}"
179
+ rescue
180
+ raise ActionFailed, 'Serverspec install failed'
181
+ end
182
+ nil
183
+ end
145
184
  end
146
185
 
147
186
  def install_gemfile
@@ -190,15 +229,28 @@ module Kitchen
190
229
 
191
230
  def env_vars
192
231
  return nil if config[:env_vars].none?
193
- bash_vars = config[:env_vars].map { |k, v| "#{k}=#{v}" }.join(' ')
194
- debug(bash_vars)
195
- bash_vars
232
+ cmd = nil
233
+ if !config[:remote_exec]
234
+ config[:env_vars].map do |k, v|
235
+ info("Environment variable #{k} value #{v}")
236
+ ENV[k.to_s] = v.to_s
237
+ end
238
+ else
239
+ cmd = config[:env_vars].map { |k, v| "#{k}=#{v}" }.join(' ')
240
+ debug(cmd)
241
+ end
242
+ cmd
196
243
  end
197
244
 
198
245
  def sudo_env(pm)
199
- s = https_proxy ? "https_proxy=#{https_proxy}" : nil
200
- p = http_proxy ? "http_proxy=#{http_proxy}" : nil
201
- p || s ? "#{sudo('env')} #{p} #{s} #{pm}" : sudo(pm).to_s
246
+ if config[:remote_exec]
247
+ s = https_proxy ? "https_proxy=#{https_proxy}" : nil
248
+ p = http_proxy ? "http_proxy=#{http_proxy}" : nil
249
+ p || s ? "#{sudo('env')} #{p} #{s} #{pm}" : sudo(pm).to_s
250
+ else
251
+ # TODO: handle proxies
252
+ pm
253
+ end
202
254
  end
203
255
 
204
256
  def bundler_path
@@ -233,11 +285,11 @@ module Kitchen
233
285
  print '.'
234
286
  sleep 1
235
287
  end
236
- puts
237
288
  end
238
289
 
239
- def shellout
240
- cmd = Mixlib::ShellOut.new(config[:command], config[:shellout_opts])
290
+ def shellout(command)
291
+ info("Running command: #{command}")
292
+ cmd = Mixlib::ShellOut.new(command, config[:shellout_opts])
241
293
  cmd.live_stream = config[:live_stream]
242
294
  cmd.run_command
243
295
  begin
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Kitchen
4
4
  module Verifier
5
- SERVERSPEC_VERSION = '0.1.1'.freeze
5
+ SERVERSPEC_VERSION = '0.2.0'.freeze
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-verifier-serverspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neill Turner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-16 00:00:00.000000000 Z
11
+ date: 2016-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen