Sha256: 627d3acbaacd63c0d3dbcdd213c8a6ae208c0b0d9607187d3ca8dd9b217d988a

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

require 'log4r'

require 'vagrant/action/builder'

require 'vagrant-openstack-provider/action/abstract_action'
require 'vagrant-openstack-provider/action/read_ssh_info'

module VagrantPlugins
  module Openstack
    module Action
      include Vagrant::Action::Builtin

      class ProvisionWrapper < AbstractAction
        def initialize(app, env)
          @app    = app
          @env    = env
          @logger = Log4r::Logger.new('vagrant_openstack::action::provision_wrapper')
        end

        def execute(env)
          @logger.info 'Run provisioning'
          InternalProvisionWrapper.new(@app, @env).call(@env)
          @app.call(env)
        end
      end

      class InternalProvisionWrapper < Vagrant::Action::Builtin::Provision
        def initialize(app, env)
          @logger = Log4r::Logger.new('vagrant_openstack::action::internal_provision_wrapper')
          super app, env
        end

        def run_provisioner(env)
          if env[:provisioner].class == VagrantPlugins::Shell::Provisioner
            handle_shell_meta_args(env)
          end
          env[:provisioner].provision
        end

        private

        def handle_shell_meta_args(env)
          config = env[:provisioner].config
          args = config.args.nil? ? [] : [config.args].flatten
          config.args = []
          @logger.info "Shell provisioner args: #{args}"
          args.each do |arg|
            if '@@ssh_ip@@'.eql? arg
              ssh_info = VagrantPlugins::Openstack::Action.get_ssh_info(env)
              @logger.info "Replace meta-arg #{arg} by value #{ssh_info[:host]}"
              config.args << ssh_info[:host]
            else
              config.args << arg
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vagrant-openstack-provider-0.7.0 lib/vagrant-openstack-provider/action/provision.rb