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 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