Sha256: 8ca3e192d740ffb8a3260a67150eb4ebedd52260c743d0d545a78887d5d86b43

Contents?: true

Size: 1.85 KB

Versions: 3

Compression:

Stored size: 1.85 KB

Contents

require 'rubber/cloud/generic'

module Rubber
  module Cloud
    class Vagrant < Generic

      def active_state
        'running'
      end

      def stopped_state
        'saved'
      end

      def before_create_instance(instance)
        unless ENV.has_key?('RUN_FROM_VAGRANT')
          capistrano.fatal "Since you are using the 'vagrant' provider, you must create instances by running `vagrant up #{instance.instance_alias}`."
        end
      end

      def describe_instances(instance_id=nil)
        output = `vagrant status #{instance_id}`

        output =~ /#{instance_id}\s+(\w+)/m
        state = $1

        if Generic.instances
          Generic.instances.each do |instance|
            if instance[:id] == instance_id
              instance[:state] = state
              instance[:provider] = 'vagrant'
            end
          end

          Generic.instances
        else
          instance = {}
          instance[:id] = instance_id
          instance[:state] = state
          instance[:external_ip] = capistrano.rubber.get_env('EXTERNAL_IP', "External IP address for host '#{instance_id}'", true)
          instance[:internal_ip] = capistrano.rubber.get_env('INTERNAL_IP', "Internal IP address for host '#{instance_id}'", true, instance[:external_ip])
          instance[:provider] = 'vagrant'

          [instance]
        end
      end

      def destroy_instance(instance_id)
        # If it's being run from vagrant, then 'vagrant destroy' must have been called already, so no need for us to do it.
        unless ENV.has_key?('RUN_FROM_VAGRANT')
          system("vagrant destroy #{instance_id} --force")
        end
      end

      def stop_instance(instance, force=false)
        system("vagrant suspend #{instance.instance_id}")
      end

      def start_instance(instance)
        system("vagrant resume #{instance.instance_id}")
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rubber-3.2.2 lib/rubber/cloud/vagrant.rb
rubber-3.2.1 lib/rubber/cloud/vagrant.rb
rubber-3.2.0 lib/rubber/cloud/vagrant.rb