Sha256: a8ee35c0d6088dc6813d9f91f8c61fdae84f40b1ecdc7685ed16de39e4108de2

Contents?: true

Size: 1.96 KB

Versions: 11

Compression:

Stored size: 1.96 KB

Contents

require "log4r"

require "vagrant/util/subprocess"

module VagrantPlugins
  module OpenStack
    module Action
      # This middleware uses `rsync` to sync the folders over to the
      # remote instance.
      class SyncFolders
        def initialize(app, env)
          @app    = app
          @logger = Log4r::Logger.new("vagrant_openstack::action::sync_folders")
        end

        def call(env)
          @app.call(env)

          ssh_info = env[:machine].ssh_info

          env[:machine].config.vm.synced_folders.each do |id, data|
            hostpath  = File.expand_path(data[:hostpath], env[:root_path])
            guestpath = data[:guestpath]
            next if data[:disabled]

            # Make sure there is a trailing slash on the host path to
            # avoid creating an additional directory with rsync
            hostpath = "#{hostpath}/" if hostpath !~ /\/$/

            env[:ui].info(I18n.t("vagrant_openstack.rsync_folder",
                                :hostpath => hostpath,
                                :guestpath => guestpath))

            # Create the guest path
            env[:machine].communicate.sudo("mkdir -p '#{guestpath}'")
            env[:machine].communicate.sudo(
              "chown #{ssh_info[:username]} '#{guestpath}'")

            # Rsync over to the guest path using the SSH info
            command = [
              "rsync", "--verbose", "--archive", "--compress", "--delete",
              "-e", "ssh -p #{ssh_info[:port]} -i '#{ssh_info[:private_key_path][0]}' -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null",
              hostpath,
              "#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"]

            r = Vagrant::Util::Subprocess.execute(*command)
            if r.exit_code != 0
              raise Errors::RsyncError,
                :guestpath => guestpath,
                :hostpath => hostpath,
                :stderr => r.stderr
            end
          end
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
vagrant-openstack-cloud-provider-1.1.13 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.12 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.11 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.10 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.9 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.8 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.6 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.5 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
vagrant-openstack-cloud-provider-1.1.4 lib/vagrant-openstack-cloud-provider/action/sync_folders.rb
openstack-vagrant-1.1.3 lib/vagrant-openstack/action/sync_folders.rb
openstack-vagrant-1.1.2 lib/vagrant-openstack/action/sync_folders.rb