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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 72d747bafea2a25edb9e1c389f2937012185c11ced3b1cfb88a4ddc02043b399
4
- data.tar.gz: 0d5b881ac15c71e0d97a8fdb63d8533d2ca46d24cf859e2f4d06fad5988ab1fb
3
+ metadata.gz: 5ea13b6e9ca452bd873f940b0d7907d1af810a12bf2e75b1aff3225047120e2d
4
+ data.tar.gz: 36c35423fb86605144ca0db45f561e13ff9d6a2618a27cd898236ea1b8a48632
5
5
  SHA512:
6
- metadata.gz: bd246a8001512e21d2bfc65f2266778fbbb0701a7c674de9ab5a991b3a41064a52c6090cd9cc37e10e97f4f19dc9915c4754b910011f5c8e873818739b90626b
7
- data.tar.gz: e2cde13693883258a5cd1a71ad625c15d6ab021334c7d6077ee435dfe8e1fc41f19d6c8d67b607fe775a7dcb4e26b1504b253d5db5c805eaae0d1dfdef00afca
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
- formaters:
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
- RSpec::Core::RakeTask.new(:spec)
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: true
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.sub!(/((require .*\n)+)/, "\\1require 'serverspec_launcher/rake_tasks'\n")
20
- File.open(@rakefile, 'w') { |file| file.write str }
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: true
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.sub!(/((require .*\n)+)/, "\\1require 'serverspec_launcher/spec_helper'\n")
24
- File.open(@spec_helper, 'w') { |file| file.write str }
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 ? properties.deep_symbolize_keys : YAML.load_file('properties.yml').deep_symbolize_keys
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
- tasks = ServerspecLauncherRakeTasks.new properties
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 = ENV['TASK_ENV']
30
+ @environment = environment
30
31
  load_properties properties
31
32
  end
32
33
 
33
34
  def load_properties(properties = nil)
34
- @properties = properties ? properties.deep_symbolize_keys : YAML.load_file('properties.yml').deep_symbolize_keys
35
- if @source == 'environment'
36
- @target_properties = @properties[:environments][@environment.to_sym][:targets][@target.to_sym]
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
- @target_properties = @properties[:targets][@target.to_sym]
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
- helper = SpecHelper.new host, target, properties, task_source, environment
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
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ServerspecLauncher
3
- VERSION = '0.3.2'
3
+ VERSION = '0.4.1'
4
4
  end
@@ -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
- generate_properties if command == 'init'
34
- generate_rolespec if command == 'init'
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
+
@@ -1,4 +1,4 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake'
3
3
  require 'rspec/core/rake_task'
4
- require 'serverspec_launcher/rake_tasks'
4
+ require 'serverspec_launcher/rake_tasks'
@@ -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
@@ -0,0 +1,12 @@
1
+ ---
2
+ options:
3
+ fail_on_err: true
4
+ formatters:
5
+ - tick
6
+ color: false
7
+
8
+ targets:
9
+ example:
10
+ backend: exec
11
+ spec_type: pi
12
+
@@ -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
- formaters:
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.3.2
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-06 00:00:00.000000000 Z
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