vmreverter 0.0.6 → 0.0.8

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
  SHA1:
3
- metadata.gz: 0a1ca2d821ebac6e2f1f46d1a843c59a444d7b6d
4
- data.tar.gz: 821ef2696d14f8a0b29dbaf37e9f2d7f846a1a1a
3
+ metadata.gz: 9c6d1d4079c2ffa8e7bdf72f3edb392078e0bba1
4
+ data.tar.gz: 682239301aea1a42fe8112525d807809eb0d9b4b
5
5
  SHA512:
6
- metadata.gz: 7c50e66164b080aaeb9d37a494c0c0d7e38e91141ed6d06f20c28f34b37ebd0250989863e8502817ae0f751e6a7784a7a7ec00a230a7fec1ce99708c6382ff72
7
- data.tar.gz: ff173f4bcb2f523bd02257d35adf3acd5b6571cca29b88c4fbff06483094b1752c778bfb215ed8e064816f8ed3afb47860f6278c7724358275a8686fec85ad17
6
+ metadata.gz: 20b1ca86303d2c9a46312b3ffbddff6f851e263492cafbf93092c84d3516b41ac23c82141d1f7dbd28aba2582d538d77bcbe695b95f54367feec9dda57cefcf0
7
+ data.tar.gz: 34f34b1d62929155823095f14a5ccdd108e5b9ea4de46096f9d4e4af7c7e1efc5445b1722442839c2cfbcfd6cc27c3b8804e8bd32e74032bdbfd8b83c28fee46
@@ -1,3 +1,4 @@
1
+ require 'pry'
1
2
  module Vmreverter
2
3
  class CLI
3
4
  def initialize
@@ -7,7 +8,9 @@ module Vmreverter
7
8
 
8
9
  if @options[:lockfile]
9
10
  if Pathname.new(@options[:lockfile]).exist?
10
- report_and_raise(@logger, ArgumentError.new("Specified lockfile path '#{@options[:lockfile].dirname}' is locked."), "Lockfile is locked")
11
+ report_and_raise(@logger, ArgumentError.new("Specified lockfile path '#{@options[:lockfile]}' is locked."), "Lockfile is locked")
12
+ else
13
+ FileUtils.touch(@options[:lockfile])
11
14
  end
12
15
  end
13
16
 
@@ -38,15 +41,19 @@ module Vmreverter
38
41
  begin
39
42
  trap(:INT) do
40
43
  @logger.warn "Interrupt received; exiting..."
44
+ FileUtils.rm @options[:lockfile], :force => true if @options[:lockfile]
41
45
  exit(1)
42
46
  end
43
47
 
44
48
  begin
45
- @vmmanager = Vmreverter::VMManager.new(@config, @options, @logger)
49
+ binding.pry
50
+ @vmmanager = Vmreverter::VMManager.new(@config, @options)
46
51
  @vmmanager.invoke
47
52
  @vmmanager.close_connection
48
53
  rescue => e
49
54
  raise e
55
+ ensure
56
+ FileUtils.rm @options[:lockfile], :force => true if @options[:lockfile]
50
57
  end
51
58
 
52
59
  end #trap
@@ -1,13 +1,13 @@
1
- module Vmreverter
2
- class AWS
1
+ module Vmreverter
2
+ class AWS
3
3
 
4
- #AWS support will dynamically create a Security Group for you if you specify ports in the Blimpfile, this means you can easily stand up a machine with specific ports open.
4
+ #AWS support will dynamically create a Security Group for you if you specify ports in the Blimpfile, this means you can easily stand up a machine with specific ports open.
5
5
  #Blimpy uses a unique hash of the ports to avoid re-creating the Security Groups unless necessary.
6
6
  #Blimpy will import your ~/.ssh/id_rsa.pub or ~/.ssh/id_dsa.pub into a Key Pair in every region that you use in your Blimpfiles.
7
- def initialize(blimpy_hosts, options, config)
8
- @options = options
7
+ def initialize(blimpy_hosts, config)
9
8
  @config = config
10
- @logger = options[:logger]
9
+ @options = config[:options]
10
+ @logger = config[:logger]
11
11
  @blimpy_hosts = blimpy_hosts
12
12
  require 'rubygems' unless defined?(Gem)
13
13
  require 'yaml' unless defined?(YAML)
@@ -16,38 +16,38 @@ module Vmreverter
16
16
  rescue LoadError
17
17
  raise "Unable to load Blimpy, please ensure its installed"
18
18
  end
19
-
19
+
20
20
  @fleet = Blimpy.fleet do |fleet|
21
21
  @blimpy_hosts.each do |host|
22
- #use snapshot provided for this host - This is an AMI!
22
+ #use snapshot provided for this host - This is an AMI!
23
23
  # host
24
24
  # ami-size: m1.small
25
25
  # ami-region: 'us-west-2'
26
26
  # security-group: 'Clients'
27
-
27
+
28
28
  if not host['snapshot']
29
29
  raise "No snapshot/ami provided for AWS provisioning"
30
30
  end
31
-
31
+
32
32
  @logger.debug "Configuring hypervision AWS for host #{host.name}(#{host['snapshot']}:#{host['amisize']}) "
33
33
 
34
34
  fleet.add(:aws) do |ship|
35
35
  ship.name = host.name
36
36
  ship.group = host['security-group']
37
- ship.image_id = host['snapshot']
37
+ ship.image_id = host['snapshot']
38
38
  ship.flavor = host['amisize'] || 'm1.small'
39
39
  ship.region = host['ami-region'] || 'us-west-2'
40
- ship.tags = host['tags']
40
+ ship.tags = host['tags']
41
41
  ship.username = 'root'
42
42
  end #fleet
43
43
  @logger.debug "Configuration completed."
44
44
  end #blimpy_hosts
45
45
  end#fleet
46
46
 
47
- return self
47
+ return self
48
48
  end #init
49
49
 
50
- def invoke
50
+ def invoke
51
51
  if (@config['HOSTS'][name]['launch'] == :on)
52
52
  revert
53
53
  end
@@ -56,12 +56,12 @@ module Vmreverter
56
56
  def close_connection
57
57
  @fleet = nil
58
58
  end
59
-
59
+
60
60
  private
61
61
 
62
62
  def revert
63
63
  @logger.notify "Begin Launching AWS Hosts"
64
-
64
+
65
65
  # Attempt to start the fleet, we wrap it with some error handling that deals
66
66
  # with generic Fog errors and retrying in case these errors are transient.
67
67
  fleet_retries = 0
@@ -88,13 +88,18 @@ module Vmreverter
88
88
  end
89
89
 
90
90
  # https://github.com/rtyler/blimpy/blob/2d2c711bfcb129f5eb0346f08da62e0cfcde7917/lib/blimpy/fleet.rb#L135
91
- def power toggle=:on
91
+ def power(toggle=:on)
92
92
  @logger.notify "Power #{toggle} AWS boxes"
93
93
  if (toggle == :off)
94
94
  start = Time.now
95
95
  @fleet.stop
96
96
  @logger.notify "Spent %.2f seconds halting" % (Time.now - start)
97
- else (toggle == :on)
97
+ elsif (toggle == :on)
98
+ start = Time.now
99
+ @fleet.start
100
+ @logger.notify "Spent %.2f seconds booting" % (Time.now - start)
101
+ else
102
+ @logger.notify "assume power on from toggle #{toggle}"
98
103
  start = Time.now
99
104
  @fleet.start
100
105
  @logger.notify "Spent %.2f seconds booting" % (Time.now - start)
@@ -1,15 +1,15 @@
1
1
  # Apache Licensed - (github/puppetlabs) ripped from puppet_acceptance. ** See Legal notes
2
2
  # Changes include namespace swaps, method removal, method additions, and complete code refactoring
3
- module Vmreverter
3
+ module Vmreverter
4
4
  class Vsphere
5
5
 
6
- def initialize(vsphere_hosts, options, config)
7
- @options = options
6
+ def initialize(vsphere_hosts, config)
8
7
  @config = config
9
- @logger = options[:logger]
8
+ @options = config[:options]
9
+ @logger = config[:logger]
10
10
  @vsphere_hosts = vsphere_hosts
11
11
  require 'yaml' unless defined?(YAML)
12
- vsphere_credentials = VsphereHelper.load_config options[:auth]
12
+ vsphere_credentials = VsphereHelper.load_config @options[:auth]
13
13
 
14
14
  @logger.notify "Connecting to vSphere at #{vsphere_credentials[:server]}" + " with credentials for #{vsphere_credentials[:user]}"
15
15
 
@@ -23,19 +23,19 @@ module Vmreverter
23
23
 
24
24
  #Index Hosts Available via rbvmomi
25
25
  vms = @vsphere_helper.find_vms(@vsphere_vms.keys)
26
-
26
+
27
27
  # Test if host exists and host's snapshot requested exists
28
28
  @vsphere_vms.each_pair do |name, snap|
29
29
  #Find Host in Index
30
30
  report_and_raise(@logger, RuntimeError.new("Couldn't find VM #{name} in vSphere!"), "VSphere::initialize") unless vm = vms[name]
31
31
  #snap ~> config['HOSTS'][vm]['snapshot']
32
- report_and_raise(@logger, RuntimeError.new("Could not find snapshot '#{snap}' for VM #{vm.name}!"), "VSphere::initialize") unless @vsphere_helper.find_snapshot(vm, snap)
32
+ report_and_raise(@logger, RuntimeError.new("Could not find snapshot '#{snap}' for VM #{vm.name}!"), "VSphere::initialize") unless @vsphere_helper.find_snapshot(vm, snap)
33
33
  end
34
34
 
35
- return self
35
+ return self
36
36
  end
37
37
 
38
- def invoke
38
+ def invoke
39
39
  revert
40
40
  end
41
41
 
@@ -43,16 +43,16 @@ module Vmreverter
43
43
  @vsphere_helper.close_connection
44
44
  end
45
45
 
46
- private
47
-
46
+ private
47
+
48
48
  def revert
49
49
  @logger.notify "Begin Reverting"
50
- @vsphere_vms.each_pair do |name, snap|
50
+ @vsphere_vms.each_pair do |name, snap|
51
51
 
52
52
  vm = @vsphere_helper.find_vms(@vsphere_vms.keys)[name]
53
53
  @logger.notify "Reverting #{vm.name} to snapshot '#{snap}'"
54
54
  start = Time.now
55
-
55
+
56
56
  # This will block for each snapshot...
57
57
  # The code to issue them all and then wait until they are all done sucks
58
58
  snapshot = @vsphere_helper.find_snapshot(vm, snap)
@@ -60,7 +60,7 @@ module Vmreverter
60
60
 
61
61
  time = Time.now - start
62
62
  @logger.notify "Spent %.2f seconds reverting" % time
63
-
63
+
64
64
  if (@config['HOSTS'][name]['power'] == 'up')
65
65
  host_power_on(vm)
66
66
  elsif (@config['HOSTS'][name]['power'] == 'down')
@@ -90,7 +90,7 @@ module Vmreverter
90
90
  end
91
91
  end
92
92
 
93
-
93
+
94
94
 
95
95
  end
96
96
  end
@@ -10,17 +10,17 @@ module Vmreverter
10
10
  @logger.debug "No post-provisioning configuration necessary for #{self.class.name} boxes"
11
11
  end
12
12
 
13
- def self.register type, hosts_to_provision, options, config
14
- @logger = options[:logger]
15
- @logger.notify("Hypervisor found some #{type} boxes to hook")
13
+ def self.register(type, hosts_to_provision, config)
14
+ @logger = config[:logger]
15
+ @logger.notify("Hypervisor found some #{type} boxes to hook")
16
16
  case type.downcase
17
17
  when /vsphere/
18
- return Vmreverter::Vsphere.new hosts_to_provision, options, config
18
+ return Vmreverter::Vsphere.new(hosts_to_provision, config)
19
19
  when /aws/
20
- return Vmreverter::AWS.new hosts_to_provision, options, config
20
+ return Vmreverter::AWS.new(hosts_to_provision, config)
21
21
  else
22
22
  report_and_raise(@logger, RuntimeError.new("Missing Class for hypervisor invocation: (#{type})"), "Hypervisor::register")
23
- end
23
+ end
24
24
  end
25
25
  end
26
26
  end
@@ -1,3 +1,3 @@
1
1
  module Vmreverter
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.8'
3
3
  end
@@ -7,51 +7,51 @@
7
7
  end
8
8
 
9
9
  module Vmreverter
10
-
10
+
11
11
  HYPERVISOR_TYPES = ['vsphere', 'aws']
12
-
12
+
13
13
  #Collection using Proxy Pattern - Proxy normalized access to specific Hypervisors such as VSphere through creation by the Hypervisor Factory
14
14
  class VMManager
15
15
 
16
16
  attr_accessor :hypervisor_collection
17
17
 
18
- def initialize(config, options, logger)
19
- @logger = logger
20
- @options = options
18
+ def initialize(config)
19
+ @logger = config[:logger]
20
+ @options = config[:options]
21
21
  @hosts = []
22
22
  @config = config
23
23
  @hypervisor_collection = {}
24
24
  @virtual_machines = {}
25
25
 
26
26
  @config['HOSTS'].each_key do |name|
27
- hypervisor = @config['HOSTS'][name]['hypervisor']
27
+ hypervisor = @config['HOSTS'][name]['hypervisor']
28
28
  @logger.debug "Hypervisor for #{name} is #{hypervisor}"
29
29
  @virtual_machines[hypervisor] = [] unless @virtual_machines[hypervisor]
30
30
  @virtual_machines[hypervisor] << name
31
31
  end
32
32
 
33
- ## Data Model Looks like
33
+ ## Data Model Looks like
34
34
  # @virtual_machines.inspect
35
35
  # {"vsphere" => ["test_server01","test_server02"], "blimpy" => ["aws_test_server01","aws_test_server01"]}
36
36
 
37
37
  @virtual_machines.each do |type, names|
38
- @hypervisor_collection[type] = Vmreverter::Hypervisor.register(type, names, @options, @config)
38
+ @hypervisor_collection[type] = Vmreverter::Hypervisor.register(type, names, @config)
39
39
  end
40
40
 
41
41
  #return instance created
42
42
  return self
43
43
  end
44
44
 
45
- def invoke
45
+ def invoke
46
46
  @hypervisor_collection.each do |hypervisor_type, hypervisor_instance|
47
- @logger.notify("Invoking #{hypervisor_type} hosts")
47
+ @logger.notify("Invoking #{hypervisor_type} hosts")
48
48
  hypervisor_instance.invoke
49
49
  end
50
50
  end
51
51
 
52
52
  def close_connection
53
53
  @hypervisor_collection.each do |hypervisor_type, hypervisor_instance|
54
- @logger.notify("Disconnecting from #{hypervisor_type}")
54
+ @logger.notify("Disconnecting from #{hypervisor_type}")
55
55
  hypervisor_instance.close_connection
56
56
  end
57
57
  end
data/lib/vmreverter.rb CHANGED
@@ -2,6 +2,7 @@ require 'optparse'
2
2
  require 'open-uri'
3
3
  require 'yaml'
4
4
  require 'pathname'
5
+ require 'fileutils'
5
6
 
6
7
  require 'rubygems' unless defined?(Gem)
7
8
 
data/vmreverter.gemspec CHANGED
@@ -2,9 +2,6 @@
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
  require File.expand_path('../lib/vmreverter/version', __FILE__)
4
4
 
5
- require 'rbconfig'
6
- ruby_conf = defined?(RbConfig) ? RbConfig::CONFIG : Config::CONFIG
7
-
8
5
  Gem::Specification.new do |s|
9
6
  s.name = "vmreverter"
10
7
  s.authors = ["shadowbq"]
@@ -19,6 +16,7 @@ Gem::Specification.new do |s|
19
16
  s.require_paths = ["lib"]
20
17
  s.version = Vmreverter::VERSION
21
18
  s.licenses = ["BSD3", "APACHE2"]
19
+ s.required_ruby_version = '>= 2.2.7'
22
20
 
23
21
  s.add_development_dependency 'bundler', '~> 1.0'
24
22
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmreverter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - shadowbq
@@ -164,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: '0'
167
+ version: 2.2.7
168
168
  required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - ">="