serverspec_launcher 0.3.2 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|