beaker-vmware 0.3.0 → 2.0.0

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.
data/Rakefile CHANGED
@@ -1,46 +1,39 @@
1
1
  require 'rspec/core/rake_task'
2
2
 
3
3
  namespace :test do
4
-
5
4
  namespace :spec do
6
-
7
- desc "Run spec tests"
5
+ desc 'Run spec tests'
8
6
  RSpec::Core::RakeTask.new(:run) do |t|
9
7
  t.rspec_opts = ['--color']
10
8
  t.pattern = 'spec/'
11
9
  end
12
10
 
13
- desc "Run spec tests with coverage"
11
+ desc 'Run spec tests with coverage'
14
12
  RSpec::Core::RakeTask.new(:coverage) do |t|
15
13
  ENV['BEAKER_VMWARE_COVERAGE'] = 'y'
16
14
  t.rspec_opts = ['--color']
17
15
  t.pattern = 'spec/'
18
16
  end
19
-
20
17
  end
21
18
 
22
19
  namespace :acceptance do
23
-
24
- desc <<-EOS
25
- A quick acceptance test, named because it has no pre-suites to run
20
+ desc <<~EOS
21
+ A quick acceptance test, named because it has no pre-suites to run
26
22
  EOS
27
23
  task :quick do
28
-
29
24
  # setup & load_path of beaker's acceptance base and lib directory
30
25
  beaker_gem_spec = Gem::Specification.find_by_name('beaker')
31
26
  beaker_gem_dir = beaker_gem_spec.gem_dir
32
27
  beaker_test_base_dir = File.join(beaker_gem_dir, 'acceptance/tests/base')
33
28
  load_path_option = File.join(beaker_gem_dir, 'acceptance/lib')
34
29
 
35
- sh("beaker",
36
- "--hosts", "acceptance/config/nodes/test-nodes.yml",
37
- "--tests", beaker_test_base_dir,
38
- "--log-level", "debug",
39
- "--load-path", load_path_option)
30
+ sh('beaker',
31
+ '--hosts', 'acceptance/config/nodes/test-nodes.yml',
32
+ '--tests', beaker_test_base_dir,
33
+ '--log-level', 'debug',
34
+ '--load-path', load_path_option)
40
35
  end
41
-
42
36
  end
43
-
44
37
  end
45
38
 
46
39
  # namespace-named default tasks.
@@ -50,111 +43,33 @@ task 'test:spec' => 'test:spec:run'
50
43
  task 'test:acceptance' => 'test:acceptance:quick'
51
44
 
52
45
  # global defaults
53
- task :test => 'test:spec'
54
- task :default => :test
55
-
56
- ###########################################################
57
- #
58
- # Documentation Tasks
59
- #
60
- ###########################################################
61
- DOCS_DAEMON = "yard server --reload --daemon --server thin"
62
- FOREGROUND_SERVER = 'bundle exec yard server --reload --verbose --server thin lib/beaker'
63
-
64
- def running?( cmdline )
65
- ps = `ps -ef`
66
- found = ps.lines.grep( /#{Regexp.quote( cmdline )}/ )
67
- if found.length > 1
68
- raise StandardError, "Found multiple YARD Servers. Don't know what to do."
46
+ task test: 'test:spec'
47
+ task default: :test
48
+
49
+ begin
50
+ require 'rubygems'
51
+ require 'github_changelog_generator/task'
52
+ rescue LoadError
53
+ # github_changelog_generator is an optional group
54
+ else
55
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
56
+ config.exclude_labels = %w[duplicate question invalid wontfix wont-fix skip-changelog]
57
+ config.user = 'voxpupuli'
58
+ config.project = 'beaker-vmware'
59
+ gem_version = Gem::Specification.load("#{config.project}.gemspec").version
60
+ config.future_release = gem_version
69
61
  end
70
-
71
- yes = found.empty? ? false : true
72
- return yes, found.first
73
- end
74
-
75
- def pid_from( output )
76
- output.squeeze(' ').strip.split(' ')[1]
77
- end
78
-
79
- desc 'Start the documentation server in the foreground'
80
- task :docs => 'docs:clear' do
81
- original_dir = Dir.pwd
82
- Dir.chdir( File.expand_path(File.dirname(__FILE__)) )
83
- sh FOREGROUND_SERVER
84
- Dir.chdir( original_dir )
85
62
  end
86
63
 
87
- namespace :docs do
88
-
89
- desc 'Clear the generated documentation cache'
90
- task :clear do
91
- original_dir = Dir.pwd
92
- Dir.chdir( File.expand_path(File.dirname(__FILE__)) )
93
- sh 'rm -rf docs'
94
- Dir.chdir( original_dir )
95
- end
96
-
97
- desc 'Generate static documentation'
98
- task :gen => 'docs:clear' do
99
- original_dir = Dir.pwd
100
- Dir.chdir( File.expand_path(File.dirname(__FILE__)) )
101
- output = `bundle exec yard doc`
102
- puts output
103
- if output =~ /\[warn\]|\[error\]/
104
- fail "Errors/Warnings during yard documentation generation"
105
- end
106
- Dir.chdir( original_dir )
107
- end
108
-
109
- desc 'Run the documentation server in the background, alias `bg`'
110
- task :background => 'docs:clear' do
111
- yes, output = running?( DOCS_DAEMON )
112
- if yes
113
- puts "Not starting a new YARD Server..."
114
- puts "Found one running with pid #{pid_from( output )}."
115
- else
116
- original_dir = Dir.pwd
117
- Dir.chdir( File.expand_path(File.dirname(__FILE__)) )
118
- sh "bundle exec #{DOCS_DAEMON}"
119
- Dir.chdir( original_dir )
120
- end
121
- end
122
-
123
- task(:bg) { Rake::Task['docs:background'].invoke }
124
-
125
- desc 'Check the status of the documentation server'
126
- task :status do
127
- yes, output = running?( DOCS_DAEMON )
128
- if yes
129
- pid = pid_from( output )
130
- puts "Found a YARD Server running with pid #{pid}"
131
- else
132
- puts "Could not find a running YARD Server."
133
- end
134
- end
135
-
136
- desc "Stop a running YARD Server"
137
- task :stop do
138
- yes, output = running?( DOCS_DAEMON )
139
- if yes
140
- pid = pid_from( output )
141
- puts "Found a YARD Server running with pid #{pid}"
142
- `kill #{pid}`
143
- puts "Stopping..."
144
- yes, output = running?( DOCS_DAEMON )
145
- if yes
146
- `kill -9 #{pid}`
147
- yes, output = running?( DOCS_DAEMON )
148
- if yes
149
- puts "Could not Stop Server!"
150
- else
151
- puts "Server stopped."
152
- end
153
- else
154
- puts "Server stopped."
155
- end
156
- else
157
- puts "Could not find a running YARD Server"
158
- end
64
+ begin
65
+ require 'rubocop/rake_task'
66
+ rescue LoadError
67
+ # RuboCop is an optional group
68
+ else
69
+ RuboCop::RakeTask.new(:rubocop) do |task|
70
+ # These make the rubocop experience maybe slightly less terrible
71
+ task.options = ['--display-cop-names', '--display-style-guide', '--extra-details']
72
+ # Use Rubocop's Github Actions formatter if possible
73
+ task.formatters << 'github' if ENV['GITHUB_ACTIONS'] == 'true'
159
74
  end
160
75
  end
@@ -1,44 +1,34 @@
1
- # -*- encoding: utf-8 -*-
2
- $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
1
+ $LOAD_PATH.unshift File.expand_path('lib', __dir__)
3
2
  require 'beaker-vmware/version'
4
3
 
5
4
  Gem::Specification.new do |s|
6
- s.name = "beaker-vmware"
5
+ s.name = 'beaker-vmware'
7
6
  s.version = BeakerVmware::VERSION
8
- s.authors = ["Rishi Javia, Kevin Imber, Tony Vu"]
9
- s.email = ["rishi.javia@puppet.com, kevin.imber@puppet.com, tony.vu@puppet.com"]
10
- s.homepage = "https://github.com/puppetlabs/beaker-vmware"
11
- s.summary = %q{Beaker DSL Extension Helpers!}
12
- s.description = %q{For use for the Beaker acceptance testing tool}
7
+ s.authors = ['Vox Pupuli']
8
+ s.email = ['voxpupuli@groups.io']
9
+ s.homepage = 'https://github.com/voxpupuli/beaker-vmware'
10
+ s.summary = 'Beaker DSL Extension Helpers!'
11
+ s.description = 'For use for the Beaker acceptance testing tool'
13
12
  s.license = 'Apache2'
14
13
 
15
14
  s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
- s.require_paths = ["lib"]
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
16
+ s.require_paths = ['lib']
17
+
18
+ s.required_ruby_version = Gem::Requirement.new('>= 2.7')
19
19
 
20
20
  # Testing dependencies
21
+ s.add_development_dependency 'fakefs', '~> 2.4'
22
+ s.add_development_dependency 'rake'
21
23
  s.add_development_dependency 'rspec', '~> 3.0'
22
24
  s.add_development_dependency 'rspec-its'
23
- if RUBY_VERSION < "2.3"
24
- s.add_development_dependency 'fakefs', '~> 0.6', '< 0.14'
25
- else
26
- s.add_development_dependency 'fakefs', '~> 0.6'
27
- end
28
- s.add_development_dependency 'rake', '~> 10.1'
29
- s.add_development_dependency 'simplecov'
30
- s.add_development_dependency 'pry', '~> 0.10'
31
- s.add_development_dependency 'beaker', '~> 3.0'
32
-
33
- # Documentation dependencies
34
- s.add_development_dependency 'yard'
35
- s.add_development_dependency 'markdown'
36
- s.add_development_dependency 'thin'
37
-
25
+ s.add_development_dependency 'rubocop', '~> 1.48.1'
26
+ s.add_development_dependency 'rubocop-performance', '~> 1.10'
27
+ s.add_development_dependency 'rubocop-rake', '~> 0.2'
28
+ s.add_development_dependency 'rubocop-rspec', '>= 1.44'
38
29
  # Run time dependencies
39
- s.add_runtime_dependency 'stringify-hash', '~> 0.0.0'
30
+ s.add_runtime_dependency 'beaker', '>= 4', '< 6'
40
31
  s.add_runtime_dependency 'fission', '~> 0.4'
41
- s.add_runtime_dependency 'rbvmomi', '~> 1.9'
42
-
32
+ s.add_runtime_dependency 'rbvmomi', '>= 1.9', '< 4.0'
33
+ s.add_runtime_dependency 'stringify-hash', '~> 0.0.0'
43
34
  end
44
-
data/bin/beaker-vmware CHANGED
@@ -4,7 +4,7 @@ require 'rubygems' unless defined?(Gem)
4
4
  require 'beaker-vmware'
5
5
 
6
6
  VERSION_STRING =
7
- "
7
+ "
8
8
  _ .--.
9
9
  ( ` )
10
10
  beaker-vmware .-' `--,
@@ -25,8 +25,6 @@ VERSION_STRING =
25
25
  '=='
26
26
  "
27
27
 
28
-
29
-
30
28
  puts BeakerVmware::VERSION
31
29
 
32
30
  exit 0
@@ -1,29 +1,30 @@
1
1
  module Beaker
2
2
  class Fusion < Beaker::Hypervisor
3
-
4
3
  def initialize(fusion_hosts, options)
5
4
  require 'rubygems' unless defined?(Gem)
6
5
  begin
7
6
  require 'fission'
8
7
  rescue LoadError
9
- raise "Unable to load fission, please ensure it is installed!"
8
+ raise 'Unable to load fission, please ensure it is installed!'
10
9
  end
11
10
  @logger = options[:logger]
12
11
  @options = options
13
12
  @hosts = fusion_hosts
14
- #check preconditions for fusion
13
+ # check preconditions for fusion
15
14
  @hosts.each do |host|
16
- raise "You must specify a snapshot for Fusion instances, no snapshot defined for #{host.name}!" unless host["snapshot"]
15
+ unless host['snapshot']
16
+ raise "You must specify a snapshot for Fusion instances, no snapshot defined for #{host.name}!"
17
+ end
17
18
  end
18
19
  @fission = Fission::VM
19
20
  end
20
21
 
21
22
  def provision
22
- available = @fission.all.data.collect{|vm| vm.name}.sort.join(", ")
23
+ available = @fission.all.data.collect { |vm| vm.name }.sort.join(', ')
23
24
  @logger.notify "Available VM names: #{available}"
24
25
 
25
26
  @hosts.each do |host|
26
- vm_name = host["vmname"] || host.name
27
+ vm_name = host['vmname'] || host.name
27
28
  vm = @fission.new vm_name
28
29
  raise "Could not find VM '#{vm_name}' for #{host.name}!" unless vm.exists?
29
30
 
@@ -32,34 +33,31 @@ module Beaker
32
33
  raise "No snapshots available for VM #{host.name} (vmname: '#{vm_name}')"
33
34
  end
34
35
 
35
- available_snapshots = vm_snapshots.sort.join(", ")
36
+ available_snapshots = vm_snapshots.sort.join(', ')
36
37
  @logger.notify "Available snapshots for #{host.name}: #{available_snapshots}"
37
- snap_name = host["snapshot"]
38
- raise "Could not find snapshot '#{snap_name}' for host #{host.name}!" unless vm.snapshots.data.include? snap_name
38
+ snap_name = host['snapshot']
39
+ unless vm.snapshots.data.include? snap_name
40
+ raise "Could not find snapshot '#{snap_name}' for host #{host.name}!"
41
+ end
39
42
 
40
43
  @logger.notify "Reverting #{host.name} to snapshot '#{snap_name}'"
41
44
  start = Time.now
42
45
  vm.revert_to_snapshot snap_name
43
- while vm.running?.data
44
- sleep 1
45
- end
46
+ sleep 1 while vm.running?.data
46
47
  time = Time.now - start
47
- @logger.notify "Spent %.2f seconds reverting" % time
48
+ @logger.notify 'Spent %.2f seconds reverting' % time
48
49
 
49
50
  @logger.notify "Resuming #{host.name}"
50
51
  start = Time.now
51
- vm.start :headless => true
52
- until vm.running?.data
53
- sleep 1
54
- end
52
+ vm.start headless: true
53
+ sleep 1 until vm.running?.data
55
54
  time = Time.now - start
56
- @logger.notify "Spent %.2f seconds resuming VM" % time
57
- end
58
- end #revert_fusion
59
-
60
- def cleanup
61
- @logger.notify "No cleanup for fusion boxes"
55
+ @logger.notify 'Spent %.2f seconds resuming VM' % time
62
56
  end
57
+ end # revert_fusion
63
58
 
59
+ def cleanup
60
+ @logger.notify 'No cleanup for fusion boxes'
61
+ end
64
62
  end
65
63
  end
@@ -3,7 +3,6 @@ require 'beaker/hypervisor/vsphere_helper'
3
3
 
4
4
  module Beaker
5
5
  class Vsphere < Beaker::Hypervisor
6
-
7
6
  def initialize(vsphere_hosts, options)
8
7
  @options = options
9
8
  @logger = options[:logger]
@@ -14,14 +13,14 @@ module Beaker
14
13
  vsphere_credentials = VsphereHelper.load_config(@options[:dot_fog])
15
14
 
16
15
  @logger.notify "Connecting to vSphere at #{vsphere_credentials[:server]}" +
17
- " with credentials for #{vsphere_credentials[:user]}"
16
+ " with credentials for #{vsphere_credentials[:user]}"
18
17
 
19
- vsphere_helper = VsphereHelper.new( vsphere_credentials )
18
+ vsphere_helper = VsphereHelper.new(vsphere_credentials)
20
19
 
21
20
  vsphere_vms = {}
22
21
  @hosts.each do |h|
23
- name = h["vmname"] || h.name
24
- vsphere_vms[name] = h["snapshot"]
22
+ name = h['vmname'] || h.name
23
+ vsphere_vms[name] = h['snapshot']
25
24
  end
26
25
  vms = vsphere_helper.find_vms(vsphere_vms.keys)
27
26
  vsphere_vms.each_pair do |name, snap|
@@ -40,47 +39,47 @@ module Beaker
40
39
  snapshot.RevertToSnapshot_Task.wait_for_completion
41
40
 
42
41
  time = Time.now - start
43
- @logger.notify "Spent %.2f seconds reverting" % time
42
+ @logger.notify 'Spent %.2f seconds reverting' % time
44
43
  end
45
44
 
46
- unless vm.runtime.powerState == "poweredOn"
47
- @logger.notify "Booting #{vm.name}"
48
- start = Time.now
49
- vm.PowerOnVM_Task.wait_for_completion
50
- @logger.notify "Spent %.2f seconds booting #{vm.name}" % (Time.now - start)
51
- end
45
+ next if vm.runtime.powerState == 'poweredOn'
46
+
47
+ @logger.notify "Booting #{vm.name}"
48
+ start = Time.now
49
+ vm.PowerOnVM_Task.wait_for_completion
50
+ @logger.notify format("Spent %.2f seconds booting #{vm.name}", (Time.now - start))
52
51
  end
53
52
 
54
53
  vsphere_helper.close
55
54
  end
56
55
 
57
56
  def cleanup
58
- @logger.notify "Destroying vsphere boxes"
57
+ @logger.notify 'Destroying vsphere boxes'
59
58
  vsphere_credentials = VsphereHelper.load_config(@options[:dot_fog])
60
59
 
61
60
  @logger.notify "Connecting to vSphere at #{vsphere_credentials[:server]}" +
62
- " with credentials for #{vsphere_credentials[:user]}"
61
+ " with credentials for #{vsphere_credentials[:user]}"
63
62
 
64
- vsphere_helper = VsphereHelper.new( vsphere_credentials )
63
+ vsphere_helper = VsphereHelper.new(vsphere_credentials)
65
64
 
66
- vm_names = @hosts.map {|h| h['vmname'] || h.name }
65
+ vm_names = @hosts.map { |h| h['vmname'] || h.name }
67
66
  vms = vsphere_helper.find_vms vm_names
68
67
  vm_names.each do |name|
69
68
  unless vm = vms[name]
70
69
  raise "Couldn't find VM #{name} in vSphere!"
71
70
  end
72
71
 
73
- if vm.runtime.powerState == "poweredOn"
74
- @logger.notify "Shutting down #{vm.name}"
75
- start = Time.now
76
- vm.PowerOffVM_Task.wait_for_completion
77
- @logger.notify(
78
- "Spent %.2f seconds halting #{vm.name}" % (Time.now - start) )
79
- end
72
+ next unless vm.runtime.powerState == 'poweredOn'
73
+
74
+ @logger.notify "Shutting down #{vm.name}"
75
+ start = Time.now
76
+ vm.PowerOffVM_Task.wait_for_completion
77
+ @logger.notify(
78
+ format("Spent %.2f seconds halting #{vm.name}", (Time.now - start)),
79
+ )
80
80
  end
81
81
 
82
82
  vsphere_helper.close
83
83
  end
84
-
85
84
  end
86
85
  end