Sha256: c5bf24bf660be8a9dd4696c4e13fc946cd3abc36cfbecb6b5e55af8cf9a4c84d

Contents?: true

Size: 1.79 KB

Versions: 15

Compression:

Stored size: 1.79 KB

Contents

module Beaker 
  class Fusion < Beaker::Hypervisor

    def initialize(fusion_hosts, options)
      require 'rubygems' unless defined?(Gem)
      begin
        require 'fission'
      rescue LoadError
        raise "Unable to load fission, please ensure it is installed!"
      end
      @logger = options[:logger]
      @options = options
      @fusion_hosts = fusion_hosts
      @fission = Fission::VM
    end

    def provision
      available = @fission.all.data.collect{|vm| vm.name}.sort.join(", ")
      @logger.notify "Available VM names: #{available}"

      @fusion_hosts.each do |host|
        vm_name = host["vmname"] || host.name
        vm = @fission.new vm_name
        raise "Could not find VM '#{vm_name}' for #{host.name}!" unless vm.exists?

        available_snapshots = vm.snapshots.data.sort.join(", ")
        @logger.notify "Available snapshots for #{host.name}: #{available_snapshots}"
        snap_name = host["snapshot"] 
        raise "No snapshot specified for #{host.name}" unless snap_name
        raise "Could not find snapshot '#{snap_name}' for host #{host.name}!" unless vm.snapshots.data.include? snap_name

        @logger.notify "Reverting #{host.name} to snapshot '#{snap_name}'"
        start = Time.now
        vm.revert_to_snapshot snap_name
        while vm.running?.data
          sleep 1
        end
        time = Time.now - start
        @logger.notify "Spent %.2f seconds reverting" % time

        @logger.notify "Resuming #{host.name}"
        start = Time.now
        vm.start :headless => true
        until vm.running?.data
          sleep 1
        end
        time = Time.now - start
        @logger.notify "Spent %.2f seconds resuming VM" % time
      end
      end #revert_fusion

      def cleanup
        @logger.notify "No cleanup for fusion boxes"
      end

  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
beaker-1.7.0 lib/beaker/hypervisor/fusion.rb
beaker-1.6.2 lib/beaker/hypervisor/fusion.rb
beaker-1.6.1 lib/beaker/hypervisor/fusion.rb
beaker-1.6.0 lib/beaker/hypervisor/fusion.rb
beaker-1.5.0 lib/beaker/hypervisor/fusion.rb
beaker-1.4.1 lib/beaker/hypervisor/fusion.rb
beaker-1.4.0 lib/beaker/hypervisor/fusion.rb
beaker-1.3.2 lib/beaker/hypervisor/fusion.rb
beaker-1.3.1 lib/beaker/hypervisor/fusion.rb
beaker-1.3.0 lib/beaker/hypervisor/fusion.rb
beaker-1.2.0 lib/beaker/hypervisor/fusion.rb
beaker-1.1.0 lib/beaker/hypervisor/fusion.rb
beaker-1.0.1 lib/beaker/hypervisor/fusion.rb
beaker-1.0.1.pre lib/beaker/hypervisor/fusion.rb
beaker-1.0.0 lib/beaker/hypervisor/fusion.rb