serverspec_launcher 0.3.2 → 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/README.md +1 -1
- data/Rakefile +5 -1
- data/lib/serverspec_launcher/generators/gemspec_generator.rb +25 -0
- data/lib/serverspec_launcher/generators/properties_generator.rb +6 -0
- data/lib/serverspec_launcher/generators/rakefile_generator.rb +7 -3
- data/lib/serverspec_launcher/generators/role_spec_generator.rb +3 -2
- data/lib/serverspec_launcher/generators/spec_helper_generator.rb +7 -3
- data/lib/serverspec_launcher/helpers/properties_loader.rb +30 -0
- data/lib/serverspec_launcher/rake_tasks.rb +6 -2
- data/lib/serverspec_launcher/spec_helper.rb +13 -7
- data/lib/serverspec_launcher/version.rb +1 -1
- data/lib/serverspec_launcher.rb +50 -2
- data/properties.yml +31 -0
- data/templates/Rakefile.erb +1 -1
- data/templates/gemspec.rb.erb +29 -0
- data/templates/properties-light.yaml.erb +12 -0
- data/templates/properties.yaml.erb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ea13b6e9ca452bd873f940b0d7907d1af810a12bf2e75b1aff3225047120e2d
|
4
|
+
data.tar.gz: 36c35423fb86605144ca0db45f561e13ff9d6a2618a27cd898236ea1b8a48632
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d2c5785bf2b400912f54e71e34a5a9a3e853f518e4b4eed9e987dd81b5a6c68a65a4af9bec5c382bd1e9f81c4f43d28145ff52aa7850bd65f497d87d08f7781
|
7
|
+
data.tar.gz: 94f1b1023c0c7ae012b5456f269e8f7d2e804d89faa72c8d81bebfe074f9be400d606d2558704c3539b125f9cdf073321433232cd6fb6a8f17dacc2a11e5a183
|
data/README.md
CHANGED
@@ -238,7 +238,7 @@ options:
|
|
238
238
|
# Stop the test on the first failure (default: true)
|
239
239
|
fail_on_err: true
|
240
240
|
# Specify output format defaults is docs_screen multiple formatters can be specified
|
241
|
-
|
241
|
+
formatters:
|
242
242
|
# RSpec Documentation Formatter writing to file reports/<target>.docs
|
243
243
|
- docs
|
244
244
|
# RSpec Documentation Formatter writing to screen
|
data/Rakefile
CHANGED
@@ -4,7 +4,11 @@ require 'rspec/core/rake_task'
|
|
4
4
|
require 'conventional_changelog'
|
5
5
|
require 'docker-api'
|
6
6
|
|
7
|
-
|
7
|
+
require 'serverspec_launcher/rake_tasks'
|
8
|
+
|
9
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
10
|
+
t.exclude_pattern = 'spec/integration/**/*_spec.rb'
|
11
|
+
end
|
8
12
|
|
9
13
|
task default: :spec
|
10
14
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
require 'erb'
|
3
|
+
require 'serverspec_launcher/version'
|
4
|
+
# Generates the rakefile that will bring in the serverspec tasks
|
5
|
+
class GemspecGenerator
|
6
|
+
|
7
|
+
def initialize(root_path = nil)
|
8
|
+
path = root_path ? "#{root_path}/" : ''
|
9
|
+
@template_path = File.expand_path('../../../../templates', __FILE__)
|
10
|
+
@project_name = Dir.pwd.split('/')[-1]
|
11
|
+
@gemspec_file = "#{path}#{@project_name}.gemspec"
|
12
|
+
@name = '<Your Name>'
|
13
|
+
@email = '<Your email>'
|
14
|
+
end
|
15
|
+
|
16
|
+
def gemspec_template
|
17
|
+
File.read "#{@template_path}/gemspec.rb.erb"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def generate
|
22
|
+
renderer = ERB.new gemspec_template
|
23
|
+
File.open(@gemspec_file, 'w') { |file| file.write renderer.result(binding) } if Dir['*.gemspec'].empty?
|
24
|
+
end
|
25
|
+
end
|
@@ -7,14 +7,20 @@ class PropertiesGenerator
|
|
7
7
|
path = root_path ? "#{root_path}/" : ''
|
8
8
|
@template_path = File.expand_path('../../../../templates', __FILE__)
|
9
9
|
@properties_file = "#{path}properties.yml"
|
10
|
+
@full_properties_file = "#{path}properties.full.example.yml"
|
10
11
|
end
|
11
12
|
|
12
13
|
def properties_template
|
14
|
+
File.read "#{@template_path}/properties-light.yaml.erb"
|
15
|
+
end
|
16
|
+
|
17
|
+
def full_properties_template
|
13
18
|
File.read "#{@template_path}/properties.yaml.erb"
|
14
19
|
end
|
15
20
|
|
16
21
|
def generate
|
17
22
|
renderer = ERB.new properties_template
|
18
23
|
File.open(@properties_file, 'w') { |file| file.write renderer.result } unless File.exists? @properties_file
|
24
|
+
File.open(@full_properties_file, 'w') { |file| file.write renderer.result } unless File.exists? @full_properties_file
|
19
25
|
end
|
20
26
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: false
|
2
2
|
require 'erb'
|
3
3
|
|
4
4
|
# Generates the rakefile that will bring in the serverspec tasks
|
@@ -16,8 +16,12 @@ class RakefileGenerator
|
|
16
16
|
def generate
|
17
17
|
if File.exist? @rakefile
|
18
18
|
str = File.read(@rakefile)
|
19
|
-
str.
|
20
|
-
|
19
|
+
new_str = if str.include? "require 'serverspec_launcher/rake_tasks'"
|
20
|
+
str
|
21
|
+
else
|
22
|
+
str.sub(/((require .*\n)+)/, "\\1require 'serverspec_launcher/rake_tasks'\n")
|
23
|
+
end
|
24
|
+
File.open(@rakefile, 'w') { |file| file.write new_str }
|
21
25
|
else
|
22
26
|
renderer = ERB.new rakefile_template
|
23
27
|
File.open(@rakefile, 'w') { |file| file.write renderer.result }
|
@@ -4,9 +4,9 @@ require 'erb'
|
|
4
4
|
# Generates the propetires.yml to be used in tests
|
5
5
|
class RoleSpecGenerator
|
6
6
|
def initialize(root_path = nil)
|
7
|
-
path = root_path ? "#{root_path}/" : ''
|
7
|
+
@path = root_path ? "#{root_path}/" : ''
|
8
8
|
@template_path = File.expand_path('../../../../templates', __FILE__)
|
9
|
-
@spec_file = "#{path}spec/role_spec.rb"
|
9
|
+
@spec_file = "#{@path}spec/role_spec.rb"
|
10
10
|
end
|
11
11
|
|
12
12
|
def template
|
@@ -15,6 +15,7 @@ class RoleSpecGenerator
|
|
15
15
|
|
16
16
|
def generate
|
17
17
|
renderer = ERB.new template
|
18
|
+
Dir.mkdir "#{@path}spec" unless Dir.exists? "#{@path}spec"
|
18
19
|
File.open(@spec_file, 'w') { |file| file.write renderer.result } unless File.exists? @spec_file
|
19
20
|
end
|
20
21
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: false
|
2
2
|
require 'erb'
|
3
3
|
|
4
4
|
# Generate the spec_helpr.rb file
|
@@ -20,8 +20,12 @@ class SpecHelperGenerator
|
|
20
20
|
def generate
|
21
21
|
if File.exist?(@spec_helper)
|
22
22
|
str = File.read(@spec_helper)
|
23
|
-
str.
|
24
|
-
|
23
|
+
new_str = if str.include? "require 'serverspec_launcher/spec_helper'"
|
24
|
+
str
|
25
|
+
else
|
26
|
+
str.sub(/((require .*\n)+)/, "\\1require 'serverspec_launcher/spec_helper'\n")
|
27
|
+
end
|
28
|
+
File.open(@spec_helper, 'w') { |file| file.write new_str }
|
25
29
|
else
|
26
30
|
create_spec_dir
|
27
31
|
renderer = ERB.new rakefile_template
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
require 'serverspec_launcher/helpers/symbolize_helper'
|
3
|
+
require 'yaml'
|
4
|
+
class PropertiesLoader
|
5
|
+
using SymbolizeHelper
|
6
|
+
def initialize(properties = nil)
|
7
|
+
load properties
|
8
|
+
end
|
9
|
+
|
10
|
+
def load(properties)
|
11
|
+
@raw_properties = if properties.is_a? Hash
|
12
|
+
properties.deep_symbolize_keys
|
13
|
+
elsif properties.is_a? String
|
14
|
+
YAML.safe_load expand_env_vars(properties), symbolize_names: true
|
15
|
+
else
|
16
|
+
str = File.read('properties.yml')
|
17
|
+
YAML.safe_load expand_env_vars(str), symbolize_names: true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def expand_env_vars(text)
|
22
|
+
text.gsub /\${([^}]+)}/ do
|
23
|
+
ENV[$1]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def properties
|
28
|
+
@properties ||= @raw_properties
|
29
|
+
end
|
30
|
+
end
|
@@ -10,6 +10,7 @@ require 'etc'
|
|
10
10
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
11
11
|
require 'serverspec_launcher/helpers/example_helper'
|
12
12
|
require 'serverspec_launcher/helpers/symbolize_helper'
|
13
|
+
require 'serverspec_launcher/helpers/properties_loader'
|
13
14
|
|
14
15
|
# loads up the rake tasks
|
15
16
|
class ServerspecLauncherRakeTasks
|
@@ -18,7 +19,7 @@ class ServerspecLauncherRakeTasks
|
|
18
19
|
using SymbolizeHelper
|
19
20
|
|
20
21
|
def initialize(properties = nil)
|
21
|
-
@properties = properties
|
22
|
+
@properties = properties
|
22
23
|
options = @properties[:options] || {}
|
23
24
|
@fail_on_err = options[:fail_on_err]
|
24
25
|
@formatters = options[:formatters] || ['tick']
|
@@ -30,6 +31,7 @@ class ServerspecLauncherRakeTasks
|
|
30
31
|
|
31
32
|
namespace :serverspec do
|
32
33
|
targets = @properties[:targets] || {}
|
34
|
+
desc 'Run all targets and environments'
|
33
35
|
task all: targets.keys.map { |key| 'serverspec:' + key.to_s.split('.')[0] }
|
34
36
|
targets.keys.each do |key|
|
35
37
|
target = targets[key]
|
@@ -38,6 +40,7 @@ class ServerspecLauncherRakeTasks
|
|
38
40
|
|
39
41
|
environments = @properties[:environments] || {}
|
40
42
|
environments.keys.each do |key|
|
43
|
+
desc "Run all tasks in environment #{key}"
|
41
44
|
task key.to_sym => "serverspec:#{key}:all"
|
42
45
|
namespace key.to_sym do
|
43
46
|
environment = environments[key]
|
@@ -139,7 +142,8 @@ class ServerspecLauncherRakeTasks
|
|
139
142
|
end
|
140
143
|
|
141
144
|
def self.load(properties = nil)
|
142
|
-
|
145
|
+
props = PropertiesLoader.new properties
|
146
|
+
tasks = ServerspecLauncherRakeTasks.new props.properties
|
143
147
|
tasks.load_tasks
|
144
148
|
end
|
145
149
|
|
@@ -13,6 +13,7 @@ require 'bundler'
|
|
13
13
|
require 'specinfra'
|
14
14
|
|
15
15
|
require 'serverspec_launcher/helpers/example_helper'
|
16
|
+
require 'serverspec_launcher/helpers/properties_loader'
|
16
17
|
require 'serverspec_launcher/helpers/symbolize_helper'
|
17
18
|
|
18
19
|
# Does all the setup fo r the serverspec tests
|
@@ -26,16 +27,20 @@ class SpecHelper
|
|
26
27
|
@host = host
|
27
28
|
@target = target
|
28
29
|
@source = task_source
|
29
|
-
@environment =
|
30
|
+
@environment = environment
|
30
31
|
load_properties properties
|
31
32
|
end
|
32
33
|
|
33
34
|
def load_properties(properties = nil)
|
34
|
-
@properties =
|
35
|
-
|
36
|
-
|
35
|
+
@properties = if properties
|
36
|
+
properties.deep_symbolize_keys
|
37
|
+
else
|
38
|
+
YAML.load_file('properties.yml').deep_symbolize_keys
|
39
|
+
end
|
40
|
+
@target_properties = if @source == 'environment'
|
41
|
+
@properties[:environments][@environment.to_sym][:targets][@target.to_sym]
|
37
42
|
else
|
38
|
-
@
|
43
|
+
@properties[:targets][@target.to_sym]
|
39
44
|
end
|
40
45
|
if @source == 'environment'
|
41
46
|
vars = @properties[:environments][@environment.to_sym][:variables] ? @properties[:environments][@environment.to_sym][:variables] : {}
|
@@ -152,8 +157,9 @@ class SpecHelper
|
|
152
157
|
end
|
153
158
|
end
|
154
159
|
|
155
|
-
def self.load(host = ENV['TARGET_HOST'], target = ENV['TARGET'], properties = nil, task_source = ENV['TASK_SOURCE'], environment = '')
|
156
|
-
|
160
|
+
def self.load(host = ENV['TARGET_HOST'], target = ENV['TARGET'], properties = nil, task_source = ENV['TASK_SOURCE'], environment = ENV['TASK_ENV'])
|
161
|
+
props = PropertiesLoader.new properties
|
162
|
+
helper = SpecHelper.new host, target, props.properties, task_source, environment
|
157
163
|
props = helper.properties[:shared_example_gems] || []
|
158
164
|
helper.load_shared_examples props
|
159
165
|
helper.setup_backend
|
data/lib/serverspec_launcher.rb
CHANGED
@@ -4,6 +4,7 @@ require 'serverspec_launcher/generators/properties_generator'
|
|
4
4
|
require 'serverspec_launcher/generators/rakefile_generator'
|
5
5
|
require 'serverspec_launcher/generators/spec_helper_generator'
|
6
6
|
require 'serverspec_launcher/generators/role_spec_generator'
|
7
|
+
require 'serverspec_launcher/generators/gemspec_generator'
|
7
8
|
|
8
9
|
# Main Class
|
9
10
|
module ServerspecLauncher
|
@@ -17,6 +18,38 @@ module ServerspecLauncher
|
|
17
18
|
properties.generate
|
18
19
|
end
|
19
20
|
|
21
|
+
def self.generate_spec_helper
|
22
|
+
properties = SpecHelperGenerator.new
|
23
|
+
properties.generate
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.generate_rakefile
|
27
|
+
properties = RakefileGenerator.new
|
28
|
+
properties.generate
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.generate_gemspec
|
32
|
+
gemspec = GemspecGenerator.new
|
33
|
+
gemspec.generate
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def self.which(cmd)
|
38
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
39
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
40
|
+
exts.each { |ext|
|
41
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
42
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
43
|
+
}
|
44
|
+
end
|
45
|
+
return nil
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.create_repo
|
49
|
+
if which 'git'
|
50
|
+
system('git init .') unless Dir.exists? '.git'
|
51
|
+
end
|
52
|
+
end
|
20
53
|
|
21
54
|
def self.check_args(args)
|
22
55
|
if args.length.zero?
|
@@ -24,13 +57,28 @@ module ServerspecLauncher
|
|
24
57
|
exit 1
|
25
58
|
end
|
26
59
|
end
|
60
|
+
|
61
|
+
def self.init
|
62
|
+
generate_properties
|
63
|
+
generate_rolespec
|
64
|
+
generate_spec_helper
|
65
|
+
generate_rakefile
|
66
|
+
generate_rolespec
|
67
|
+
generate_gemspec
|
68
|
+
create_repo
|
69
|
+
end
|
27
70
|
|
28
71
|
def self.process_command(args)
|
29
72
|
check_args args
|
30
73
|
command = args.shift
|
31
74
|
parameters = args
|
32
75
|
|
33
|
-
|
34
|
-
|
76
|
+
case command
|
77
|
+
when 'init'
|
78
|
+
init
|
79
|
+
when 'version'
|
80
|
+
puts "Serverspec Launcher version #{ServerspecLauncher::VERSION}"
|
81
|
+
end
|
82
|
+
|
35
83
|
end
|
36
84
|
end
|
data/properties.yml
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
---
|
2
|
+
options:
|
3
|
+
fail_on_err: true
|
4
|
+
formatters:
|
5
|
+
- tick
|
6
|
+
color: false
|
7
|
+
|
8
|
+
targets:
|
9
|
+
targ:
|
10
|
+
backend: ssh
|
11
|
+
hosts:
|
12
|
+
- testenv01
|
13
|
+
- testenv02
|
14
|
+
spec_type: integration/example
|
15
|
+
|
16
|
+
|
17
|
+
environments:
|
18
|
+
env:
|
19
|
+
targets:
|
20
|
+
env_target:
|
21
|
+
backend: ssh
|
22
|
+
hosts:
|
23
|
+
- testenv01
|
24
|
+
- testenv02
|
25
|
+
spec_type: integration/example
|
26
|
+
|
27
|
+
env_target2:
|
28
|
+
backend: ssh
|
29
|
+
hosts: testenv01
|
30
|
+
spec_type: integration/example
|
31
|
+
|
data/templates/Rakefile.erb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = '<%= @project_name %>'
|
9
|
+
spec.version = '0.1.0'
|
10
|
+
spec.authors = [<%= @name %>]
|
11
|
+
spec.email = [<%= @email %>>]
|
12
|
+
|
13
|
+
spec.summary = "TODO: "
|
14
|
+
spec.description = "TODO: "
|
15
|
+
spec.homepage = "TODO: Put your gem's website or public repo URL here."
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
f.match(%r{^(test|spec|features)/})
|
20
|
+
end
|
21
|
+
spec.bindir = 'exe'
|
22
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ['lib']
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
26
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
|
+
spec.add_development_dependency 'serverspec_launcher', '~> <%= ServerspecLauncher::VERSION %>'
|
29
|
+
end
|
@@ -3,7 +3,7 @@ options:
|
|
3
3
|
# Stop the test on the first failure (default: true)
|
4
4
|
fail_on_err: true
|
5
5
|
# Specify output format defaults is docs_screen multiple formatters can be specified
|
6
|
-
|
6
|
+
formatters:
|
7
7
|
# RSpec Documentation Formatter writing to file reports/<target>.docs
|
8
8
|
- docs
|
9
9
|
# RSpec Documentation Formatter writing to screen
|
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
|
+
version: 0.4.1
|
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-
|
11
|
+
date: 2019-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -214,17 +214,22 @@ files:
|
|
214
214
|
- exe/serverspec_launcher
|
215
215
|
- lib/launcher_json_formatter.rb
|
216
216
|
- lib/serverspec_launcher.rb
|
217
|
+
- lib/serverspec_launcher/generators/gemspec_generator.rb
|
217
218
|
- lib/serverspec_launcher/generators/properties_generator.rb
|
218
219
|
- lib/serverspec_launcher/generators/rakefile_generator.rb
|
219
220
|
- lib/serverspec_launcher/generators/role_spec_generator.rb
|
220
221
|
- lib/serverspec_launcher/generators/spec_helper_generator.rb
|
221
222
|
- lib/serverspec_launcher/helpers/example_helper.rb
|
223
|
+
- lib/serverspec_launcher/helpers/properties_loader.rb
|
222
224
|
- lib/serverspec_launcher/helpers/symbolize_helper.rb
|
223
225
|
- lib/serverspec_launcher/rake_tasks.rb
|
224
226
|
- lib/serverspec_launcher/spec_helper.rb
|
225
227
|
- lib/serverspec_launcher/version.rb
|
228
|
+
- properties.yml
|
226
229
|
- serverspec_launcher.gemspec
|
227
230
|
- templates/Rakefile.erb
|
231
|
+
- templates/gemspec.rb.erb
|
232
|
+
- templates/properties-light.yaml.erb
|
228
233
|
- templates/properties.yaml.erb
|
229
234
|
- templates/role_spec.rb.erb
|
230
235
|
- templates/spec_helper.rb.erb
|