Sha256: 29f8ad63b91fe1cd16d641e4eda419b6331f2640ead511603e530c1eb729cc2a

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

# -*- encoding: utf-8 -*-

require 'mixlib/shellout'

require 'jamie'

module Jamie

  module Driver

    # Vagrant driver for Jamie. It communicates to Vagrant via the CLI.
    class Vagrant < Jamie::Driver::SSHBase

      default_config 'memory', '256'

      def perform_create(instance, state)
        state['name'] = instance.name
        run "vagrant up #{state['name']} --no-provision"
      end

      def perform_converge(instance, state)
        run "vagrant provision #{state['name']}"
      end

      def perform_destroy(instance, state)
        run "vagrant destroy #{state['name']} -f"
        state.delete('name')
      end

      protected

      def generate_ssh_args(state)
        Array(state['name'])
      end

      def ssh(ssh_args, cmd)
        run %{vagrant ssh #{ssh_args.first} --command '#{cmd}'}
      end

      def run(cmd)
        puts "       [vagrant command] '#{display_cmd(cmd)}'"
        sh = Mixlib::ShellOut.new(cmd, :live_stream => STDOUT,
          :timeout => 60000)
        sh.run_command
        puts "       [vagrant command] ran in #{sh.execution_time} seconds."
        sh.error!
      rescue Mixlib::ShellOut::ShellCommandFailed => ex
        raise ActionFailed, ex.message
      end

      def display_cmd(cmd)
        parts = cmd.partition("\n")
        parts[1] == "\n" ? "#{parts[0]}..." : cmd
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jamie-0.1.0.alpha12 lib/jamie/driver/vagrant.rb
jamie-0.1.0.alpha11 lib/jamie/driver/vagrant.rb
jamie-0.1.0.alpha10 lib/jamie/driver/vagrant.rb
jamie-0.1.0.alpha9 lib/jamie/driver/vagrant.rb