serverspec_launcher 0.4.2 → 0.4.5

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
  SHA256:
3
- metadata.gz: f9c1afe040d8228a04805687615aa41ff1b14bb30bad7fe0a7542d1d23ef9f1e
4
- data.tar.gz: 2ff2e59ee8b060157648635d0c397441f41bc9108b302e0eed83bd7962c5ec24
3
+ metadata.gz: d6a8011a886a38e0290fcbe0e8abb9de940d1e86a3485fb74c3d2febfca0bde0
4
+ data.tar.gz: 86f96b435403dfc3e423f043ff7bb5301a08d4d1b92995e21006c13586151632
5
5
  SHA512:
6
- metadata.gz: 14e5a182ad429e5910315d8220cb2cdf3b277a3dc34afaef953ec833fcbb546c198a93019f3344f65dcd7d73e029963c44ba2478e676831736257fd696bcf21f
7
- data.tar.gz: e4c7781fdfbfcb12975449842c8f5233ab89494713ced8d16f707d25e0fe535a8f7577b2b618c0719e55d4e9a131e1cb9d165592b3c5391ec5af93e49526e86b
6
+ metadata.gz: 74ddda61add4e88370222706ce5d772ee1d035fb8470851d7ea3e85c1959c7bd50a7ec8b2bff77b326fcce4a5409b3df1c71726ffefcc0a3a102416ad831b392
7
+ data.tar.gz: 1985d69f979d083e99561b11348ad8c504a5cb42ac3264aa9c268b9a0a2180499d45264ec67d36dd1e6a44b9f2b6f79210c75bbe35d103b7bcbec9d22f78c765
data/.gitignore CHANGED
@@ -8,4 +8,5 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
 
11
- .idea/
11
+ .idea/
12
+ reports/
data/Rakefile CHANGED
@@ -1,11 +1,17 @@
1
1
  # frozen_string_literal: true
2
+
3
+
4
+
2
5
  require 'bundler/gem_tasks'
3
6
  require 'rspec/core/rake_task'
4
7
  require 'conventional_changelog'
5
8
  require 'docker-api'
9
+ require_relative 'spec/helpers/container_helper'
6
10
 
7
11
  require 'serverspec_launcher/rake_tasks'
8
12
 
13
+ include ContainerHelper
14
+
9
15
  RSpec::Core::RakeTask.new(:spec) do |t|
10
16
  t.exclude_pattern = 'spec/integration/**/*_spec.rb'
11
17
  end
@@ -18,7 +24,19 @@ task :changelog do
18
24
  end
19
25
 
20
26
 
21
- task :docker do
27
+ task :stop_ssh_container do
28
+ stop_ssh_container
29
+ end
30
+
31
+ task :start_ssh_container do
32
+ ENV['TARGET_HOST'] = '172.18.0.22'
33
+ start_ssh_container
34
+ end
35
+
36
+ task :post_task_cleanup do
37
+ at_exit { stop_ssh_container }
38
+ end
22
39
 
23
40
 
24
- end
41
+ Rake::Task['serverspec:inspec-agent-example:all'].enhance ['post_task_cleanup', 'start_ssh_container']
42
+ Rake::Task['serverspec:inspec-password-example:all'].enhance ['post_task_cleanup', 'start_ssh_container']
@@ -18,6 +18,12 @@ module ServerspecLauncher
18
18
  properties.generate
19
19
  end
20
20
 
21
+
22
+ def self.generate_examplespec
23
+ properties = ExampleSpecGenerator.new
24
+ properties.generate
25
+ end
26
+
21
27
  def self.generate_spec_helper
22
28
  properties = SpecHelperGenerator.new
23
29
  properties.generate
@@ -69,12 +75,11 @@ module ServerspecLauncher
69
75
  def self.init
70
76
  generate_properties
71
77
  generate_rolespec
72
- generate_spec_helper
78
+ generate_examplespec
79
+ generate_spec_helper
73
80
  generate_rakefile
74
81
  generate_rolespec
75
82
  generate_gemspec create_repo
76
-
77
-
78
83
  end
79
84
 
80
85
  def self.process_command(args)
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ require 'erb'
3
+
4
+ # Generates the propetires.yml to be used in tests
5
+ class ExampleSpecGenerator
6
+ def initialize(root_path = nil)
7
+ @path = root_path ? "#{root_path}/" : ''
8
+ @template_path = File.expand_path('../../../../templates', __FILE__)
9
+ @spec_file = "#{@path}spec/example_spec.rb"
10
+ end
11
+
12
+ def template
13
+ File.read "#{@template_path}/example_spec.rb.erb"
14
+ end
15
+
16
+ def generate
17
+ renderer = ERB.new template
18
+ Dir.mkdir "#{@path}spec" unless Dir.exists? "#{@path}spec"
19
+ File.open(@spec_file, 'w') { |file| file.write renderer.result } unless File.exists? @spec_file
20
+ end
21
+ end
@@ -235,6 +235,11 @@ class ServerspecLauncherRakeTasks
235
235
  )
236
236
  begin
237
237
  puts "inspec #{command.join(' ')}"
238
+ networks = target[:attach_to] || []
239
+ networks.each do |nw|
240
+ network = Docker::Network.get(nw)
241
+ network.connect(container.id)
242
+ end
238
243
  container.start
239
244
  container.wait
240
245
  rescue Docker::Error::TimeoutError => ex
@@ -304,6 +309,8 @@ class ServerspecLauncherRakeTasks
304
309
  command << keyfile
305
310
  end
306
311
  command << "--user=#{target_info[:user]}" if target_info[:user]
312
+ command << "--port=#{target_info[:ssh_port]}" if target_info[:ssh_port]
313
+ command << "--password=#{target_info[:password]}" if target_info[:password]
307
314
  command << "--bastion-host=#{target_info[:bastion_host]}" if target_info[:bastion_host]
308
315
  command << "--bastion-port=#{target_info[:bastion_port]}" if target_info[:bastion_port]
309
316
  command << "--bastion-user=#{target_info[:bastion_user]}" if target_info[:bastion_user]
@@ -313,7 +320,7 @@ class ServerspecLauncherRakeTasks
313
320
 
314
321
  def set_inspec_reporters(key, host, options)
315
322
  reporters = []
316
- report_path = options[:environment] ? "/share/reports/#{options[:environment]}/#{key}" : "/share/#{report_path}"
323
+ report_path = options[:environment] ? "/share/reports/#{options[:environment]}/#{key}" : "/share/reports/#{key}"
317
324
  reporters << "junit:#{report_path}.xml" if options[:formatters].include?('junit') || options[:formatters].include?('xml')
318
325
  reporters << "documentation:#{report_path}.docs" if options[:formatters].include?('docs') || options[:formatters].include?('documentation') || options[:formatters].include?('docs_file')
319
326
  reporters << 'documentation' if options[:formatters].include?('docs_screen')
@@ -74,6 +74,8 @@ class SpecHelper
74
74
 
75
75
  sudo_checks
76
76
 
77
+
78
+
77
79
  ssh_user = @target_properties[:user] || Etc.getlogin
78
80
 
79
81
  options = if @backend == 'vagrant'
@@ -81,13 +83,17 @@ class SpecHelper
81
83
  else
82
84
  Net::SSH::Config.for(@host)
83
85
  end
84
-
86
+ password_checks(options)
85
87
  options[:user] ||= ssh_user
86
88
  options[:keys] = [@target_properties[:identity_file]] if @target_properties[:identity_file]
89
+ options[:port] = @target_properties[:ssh_port] if @target_properties[:ssh_port]
90
+ host_key_checking(options)
91
+
87
92
 
88
93
  set :host, options[:host_name] || @host
89
94
  set :ssh_options, options
90
95
 
96
+
91
97
  # Disable sudo
92
98
  # set :disable_sudo, true
93
99
 
@@ -114,6 +120,19 @@ class SpecHelper
114
120
  end
115
121
  end
116
122
 
123
+ def password_checks(options)
124
+ if ENV['ASK_LOGIN_PASSWORD']
125
+ begin
126
+ require 'highline/import'
127
+ rescue LoadError
128
+ raise 'highline is not available. Try installing it.'
129
+ end
130
+ options[:password] = ask('Enter login password: ') { |q| q.echo = false }
131
+ else
132
+ options[:password] = ENV['LOGIN_PASSWORD']
133
+ end
134
+ end
135
+
117
136
  def vagrant_backend
118
137
  @host = @target_properties[:vagrant_host] || 'default'
119
138
  vagrant_dir = @target_properties[:vagrant_dir]
@@ -165,6 +184,12 @@ class SpecHelper
165
184
  helper.setup_backend
166
185
  helper
167
186
  end
187
+
188
+ private
189
+
190
+ def host_key_checking(options)
191
+ options[:verify_host_key] = @target_properties[:verify_host_key].to_sym if @target_properties[:verify_host_key]
192
+ end
168
193
  end
169
194
 
170
195
  SpecHelper.load unless $dont_load_spec_helper
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ServerspecLauncher
3
- VERSION = '0.4.2'
3
+ VERSION = '0.4.5'
4
4
  end
data/properties.yml CHANGED
@@ -3,15 +3,51 @@ options:
3
3
  fail_on_err: true
4
4
  formatters:
5
5
  - tick
6
- color: false
6
+ color: true
7
7
 
8
8
  targets:
9
- targ:
9
+ exec-example:
10
+ backend: exec
11
+ spec_type: integration/example
12
+
13
+ docker-example:
14
+ backend: docker
15
+ docker_image: alpine:latest
16
+ spec_type: integration/docker
17
+
18
+ ssh-example:
10
19
  backend: ssh
11
20
  hosts:
12
- - testenv01
13
- - testenv02
14
- spec_type: integration/example
21
+ - 172.18.0.22
22
+ - 172.18.0.23
23
+ user: root
24
+ spec_type: integration/ssh
25
+ identity_file: spec/resources/ssh.rsa
26
+ verify_host_key: never
27
+
28
+ inspec-agent-example:
29
+ backend: inspec
30
+ control: spec/integration/inspec_spec.rb
31
+ ssh_port: 22
32
+ user: root
33
+ hosts:
34
+ - 172.18.0.22
35
+ auth_method: agent
36
+ attach_to:
37
+ - test_network
38
+
39
+ inspec-password-example:
40
+ backend: inspec
41
+ control: spec/integration/inspec_spec.rb
42
+ user: root
43
+ password: root
44
+ hosts:
45
+ - 172.18.0.22
46
+ auth_method: password
47
+ attach_to:
48
+ - test_network
49
+ formatters:
50
+ - json
15
51
 
16
52
 
17
53
  environments:
@@ -36,4 +36,5 @@ Gem::Specification.new do |spec|
36
36
  spec.add_runtime_dependency 'rspec-tick-formatter', '0.1.3'
37
37
  spec.add_runtime_dependency 'rspec_html_reporter', '~> 1.0.0'
38
38
  spec.add_runtime_dependency 'docker-api'
39
+ spec.add_runtime_dependency 'docker-swarm-sdk'
39
40
  end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ context ENV['TARGET_HOST'] do
4
+ describe package('httpd'), :if => os[:family] == 'redhat' do
5
+ it { should be_installed }
6
+ end
7
+
8
+ describe package('apache2'), :if => os[:family] == 'ubuntu' do
9
+ it { should be_installed }
10
+ end
11
+
12
+ describe service('httpd'), :if => os[:family] == 'redhat' do
13
+ it { should be_enabled }
14
+ it { should be_running }
15
+ end
16
+
17
+ describe service('apache2'), :if => os[:family] == 'ubuntu' do
18
+ it { should be_enabled }
19
+ it { should be_running }
20
+ end
21
+
22
+ describe service('org.apache.httpd'), :if => os[:family] == 'darwin' do
23
+ it { should be_enabled }
24
+ it { should be_running }
25
+ end
26
+
27
+ describe port(80) do
28
+ it { should be_listening }
29
+ end
30
+ end
@@ -8,5 +8,5 @@ options:
8
8
  targets:
9
9
  example:
10
10
  backend: exec
11
- spec_type: pi
11
+ spec_type: example
12
12
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverspec_launcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Wardrobe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-24 00:00:00.000000000 Z
11
+ date: 2019-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -192,6 +192,20 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: docker-swarm-sdk
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
195
209
  description: A utility to manage serverspec scripts
196
210
  email:
197
211
  - andrew.g.wardrobe@googlemail.com
@@ -214,6 +228,7 @@ files:
214
228
  - exe/serverspec_launcher
215
229
  - lib/launcher_json_formatter.rb
216
230
  - lib/serverspec_launcher.rb
231
+ - lib/serverspec_launcher/generators/example_spec_generator.rb
217
232
  - lib/serverspec_launcher/generators/gemspec_generator.rb
218
233
  - lib/serverspec_launcher/generators/properties_generator.rb
219
234
  - lib/serverspec_launcher/generators/rakefile_generator.rb
@@ -228,6 +243,7 @@ files:
228
243
  - properties.yml
229
244
  - serverspec_launcher.gemspec
230
245
  - templates/Rakefile.erb
246
+ - templates/example_spec.rb.erb
231
247
  - templates/gemspec.rb.erb
232
248
  - templates/properties-light.yaml.erb
233
249
  - templates/properties.yaml.erb