vagrant-rsync 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,46 @@
1
+ require_relative '../errors'
2
+
3
+ module VagrantPlugins
4
+ module Rsync
5
+ module Cap
6
+ class EnsureRsync
7
+
8
+ def self.ensure_rsync(machine, env)
9
+ return unless machine.communicate.ready?
10
+
11
+ if rsync_installed?(machine)
12
+ env.ui.info I18n.t('vagrant_rsync.rsync_installed')
13
+ else
14
+ env.ui.info I18n.t('vagrant_rsync.installing_rsync')
15
+ install_rsync!(machine)
16
+ end
17
+ end
18
+
19
+ def self.rsync_installed?(machine)
20
+ machine.communicate.execute("rsync --version") rescue false
21
+ end
22
+
23
+ def self.install_rsync!(machine)
24
+ machine.communicate.tap do |comm|
25
+ case machine.guest.name
26
+ when :debian, :ubuntu
27
+ comm.sudo "apt-get update"
28
+ comm.sudo "apt-get install rsync"
29
+ when :fedora, :centos, :redhat
30
+ comm.sudo "yum install rsync"
31
+ when :suse
32
+ comm.sudo "yast2 -i rsync"
33
+ when :gentoo
34
+ comm.sudo "emerge rsync"
35
+ when :arch
36
+ comm.sudo "pacman -s rsync"
37
+ else
38
+ raise Errors::RsyncNotAvailableError, guest: machine.guest.name
39
+ end
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,43 @@
1
+ module VagrantPlugins
2
+ module Rsync
3
+ module Cap
4
+ class RsyncFolders
5
+ def self.rsync_folders(machine)
6
+ machine.config.vm.synced_folders.each do |id, data|
7
+ next if data[:nfs]
8
+
9
+ hostpath = File.expand_path(data[:hostpath], machine.env.root_path)
10
+ hostpath = "#{hostpath}/" if hostpath !~ /\/$/
11
+ guestpath = data[:guestpath]
12
+ ssh_info = machine.ssh_info
13
+
14
+ command = [
15
+ "rsync", "--verbose", "--delete", "--archive", "-z",
16
+ "--exclude", ".vagrant/",
17
+ "-e", "ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no -i '#{ssh_info[:private_key_path]}'",
18
+ hostpath,
19
+ "#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"
20
+ ]
21
+
22
+ options = {}
23
+ command << '-vvv' if options[:verbose]
24
+
25
+ if options[:verbose]
26
+ ## should the vagrant way of outputting text
27
+ #@env.ui.say(:info,command.join(" "))
28
+ end
29
+
30
+ r = Vagrant::Util::Subprocess.execute(*command)
31
+ #@env.ui.say(:info, "done") if options[:verbose]
32
+ if r.exit_code != 0
33
+ raise Errors::RsyncError,
34
+ :guestpath => guestpath,
35
+ :hostpath => hostpath,
36
+ :stderr => r.stderr
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,50 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module Rsync
5
+ class Command < Vagrant.plugin("2", :command)
6
+ def execute
7
+ options = {}
8
+ options[:install_rsync] = true
9
+ options[:verbose] = false
10
+
11
+ opts = OptionParser.new do |o|
12
+ o.banner = "Usage: vagrant rsync [vm-name]"
13
+
14
+ o.on("-n", "--no-install", "Do not attempt to install rysnc if not found") do |ni|
15
+ options[:install_rsync] = !ni
16
+ end
17
+
18
+ o.on('-v', '--verbose', "Run verbosely") do |v|
19
+ options[:verbose] = v
20
+ end
21
+
22
+ o.on( '-h', '--help', 'Display this screen' ) do
23
+ puts opts
24
+ exit
25
+ end
26
+ end
27
+
28
+ # Parse the options
29
+ argv = parse_options(opts)
30
+ return if !argv
31
+
32
+ with_target_vms(argv) do |vm|
33
+ raise Vagrant::Errors::VMNotCreatedError if vm.state.id == :not_created
34
+ raise Vagrant::Errors::VMInaccessible if vm.state.id == :inaccessible
35
+ end
36
+
37
+ with_target_vms(argv) do |machine|
38
+ if options[:install_rsync]
39
+ @env.ui.info I18n.t('vagrant_rsync.ensure_rsync')
40
+ machine.guest.capability(:ensure_rsync, @env)
41
+ end
42
+
43
+ @env.ui.info I18n.t('vagrant_rsync.rsync_folders')
44
+ machine.guest.capability(:rsync_folders)
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,10 @@
1
+ module VagrantPlugins
2
+ module Rsync
3
+ module Errors
4
+ class RsyncNotAvailableError < Vagrant::Errors::VagrantError
5
+ error_key(:rsync_not_available)
6
+ end
7
+ end
8
+ end
9
+ end
10
+
@@ -10,8 +10,11 @@ if Vagrant::VERSION < "1.1.0"
10
10
  raise "The Vagrant AWS plugin is only compatible with Vagrant 1.1+"
11
11
  end
12
12
 
13
+ # Add our custom translations to the load path
14
+ I18n.load_path << File.expand_path("../../../locales/en.yml", __FILE__)
15
+
13
16
  module VagrantPlugins
14
- module CommandRSYNC
17
+ module Rsync
15
18
  class Plugin < Vagrant.plugin("2")
16
19
  name "rsync command"
17
20
  description <<-DESC
@@ -19,9 +22,19 @@ module VagrantPlugins
19
22
  DESC
20
23
 
21
24
  command("rsync") do
22
- require File.expand_path("../command.rb", __FILE__)
25
+ require_relative 'command'
23
26
  Command
24
27
  end
28
+
29
+ guest_capability("linux", "ensure_rsync") do
30
+ require_relative "cap/ensure_rsync"
31
+ Cap::EnsureRsync
32
+ end
33
+
34
+ guest_capability("linux", "rsync_folders") do
35
+ require_relative "cap/rsync_folders"
36
+ Cap::RsyncFolders
37
+ end
25
38
  end
26
39
  end
27
40
  end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module Rsync
3
+ VERSION = "0.2.1"
4
+ end
5
+ end
data/lib/vagrant-rsync.rb CHANGED
@@ -1 +1,4 @@
1
- require 'plugin'
1
+ require 'vagrant'
2
+
3
+ require 'vagrant-rsync/version'
4
+ require 'vagrant-rsync/plugin'
data/locales/en.yml ADDED
@@ -0,0 +1,14 @@
1
+ en:
2
+ vagrant_rsync:
3
+ ensure_rsync: |-
4
+ Ensuring that rsync is installed on guest.
5
+ rsync_installed: |-
6
+ Rsync already installed.
7
+ installing_rsync: |-
8
+ Installing rsync...
9
+ rsync_folders: |-
10
+ Syncing shared folders to guest with rsync...
11
+ vagrant:
12
+ errors:
13
+ rsync_not_available: |-
14
+ Unable to install rsync on a machine of guest type '%{guest}'.
@@ -1,12 +1,12 @@
1
1
  $:.unshift File.expand_path("../lib", __FILE__)
2
- require "version"
2
+ require 'vagrant-rsync/version'
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "vagrant-rsync"
6
- s.version = VagrantPlugins::RSYNC::VERSION
6
+ s.version = VagrantPlugins::Rsync::VERSION
7
7
  s.platform = Gem::Platform::RUBY
8
- s.authors = "Bill Cromie"
9
- s.email = "bill@cromie.org"
8
+ s.authors = ["Bill Cromie", "Patrick Connolly"]
9
+ s.email = ["bill@cromie.org","patrick@myplanetdigital.com"]
10
10
  s.homepage = "https://github.com/cromulus/vagrant-rsync"
11
11
  s.summary = "Enables Vagrant to rsync shared folders on remote guests with grace and aplomb."
12
12
  s.description = "Enables Vagrant to rsync shared folders on remote guests with grace and aplomb."
metadata CHANGED
@@ -1,69 +1,93 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: vagrant-rsync
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.0
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 1
9
+ version: 0.2.1
5
10
  platform: ruby
6
- authors:
11
+ authors:
7
12
  - Bill Cromie
13
+ - Patrick Connolly
8
14
  autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
- date: 2013-06-08 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - ! '>='
17
- - !ruby/object:Gem::Version
18
- version: '0'
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ! '>='
22
- - !ruby/object:Gem::Version
23
- version: '0'
17
+
18
+ date: 2013-09-05 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
24
22
  type: :development
25
- prerelease: false
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
26
30
  name: rake
27
- description: Enables Vagrant to rsync shared folders on remote guests with grace and
28
- aplomb.
29
- email: bill@cromie.org
31
+ requirement: *id001
32
+ prerelease: false
33
+ description: Enables Vagrant to rsync shared folders on remote guests with grace and aplomb.
34
+ email:
35
+ - bill@cromie.org
36
+ - patrick@myplanetdigital.com
30
37
  executables: []
38
+
31
39
  extensions: []
40
+
32
41
  extra_rdoc_files: []
33
- files:
42
+
43
+ files:
34
44
  - Gemfile
35
45
  - Guardfile
36
- - lib/command.rb
37
- - lib/plugin.rb
46
+ - lib/vagrant-rsync/cap/ensure_rsync.rb
47
+ - lib/vagrant-rsync/cap/rsync_folders.rb
48
+ - lib/vagrant-rsync/command.rb
49
+ - lib/vagrant-rsync/errors.rb
50
+ - lib/vagrant-rsync/plugin.rb
51
+ - lib/vagrant-rsync/version.rb
38
52
  - lib/vagrant-rsync.rb
39
- - lib/version.rb
40
53
  - License
54
+ - locales/en.yml
41
55
  - RakeFile
42
56
  - README.md
43
57
  - vagrant-rsync.gemspec
44
58
  - Vagrantfile.testing
45
59
  - .gitignore
60
+ has_rdoc: true
46
61
  homepage: https://github.com/cromulus/vagrant-rsync
47
62
  licenses: []
48
- metadata: {}
63
+
49
64
  post_install_message:
50
65
  rdoc_options: []
51
- require_paths:
66
+
67
+ require_paths:
52
68
  - lib
53
- required_ruby_version: !ruby/object:Gem::Requirement
54
- requirements:
55
- - - ! '>='
56
- - !ruby/object:Gem::Version
57
- version: '0'
58
- required_rubygems_version: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ segments:
81
+ - 1
82
+ - 3
83
+ - 6
62
84
  version: 1.3.6
63
85
  requirements: []
86
+
64
87
  rubyforge_project: vagrant-rsync
65
- rubygems_version: 2.0.3
88
+ rubygems_version: 1.3.6
66
89
  signing_key:
67
- specification_version: 4
90
+ specification_version: 3
68
91
  summary: Enables Vagrant to rsync shared folders on remote guests with grace and aplomb.
69
92
  test_files: []
93
+
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjRjMzc4ODNmMmQ4ZDRiNTk0YWNiNTE3YmYyMjhjYTE1YzVlZGE0OQ==
5
- data.tar.gz: !binary |-
6
- NGU5MGE1NjE5NmZlOWViMDI5NzRhZGQxYWEwMjQxMThmZmQ5OTVlZg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MzJmNDNmZWRkYjBmMjU5ZDM2ZjJhODM4NmNlYTI1YThhYWQ1Yjk4NzA4NmNl
10
- MWExNTg5NmVlY2I4MTkzYzkyYzMyMmU3NGM0YWE1OWM5YWYyNTNlMWZmYTlj
11
- MGQ0MmMyNDNkNzlmOGViN2Y3YjNhM2M1MjU3ZDQ5ZWI5YTU0ZTg=
12
- data.tar.gz: !binary |-
13
- YjliZmQwOGU2M2Y1YWRiYzE0Y2Q2N2U5MWExZWFjZTE2OTZjNGUxNDBlM2Vl
14
- NmZmNzcxNWVjZjY5OTdiNDY4YTE0NGEwYWVmMTJhYTI5ZGVmMDAxZWYxNzRk
15
- N2NhOTA5YjJmNjUzOGJkNDcyMzBiYTU1NGY0ZjI0M2FjOTc0ZmU=
data/lib/command.rb DELETED
@@ -1,111 +0,0 @@
1
- require 'optparse'
2
- require 'pp'
3
- module VagrantPlugins
4
- module CommandRSYNC
5
- class Command < Vagrant.plugin("2", :command)
6
-
7
- class RsyncNotAvailableError < Vagrant::Errors::VagrantError
8
- error_namespace("vagrant.plugin.vagrant-rsync")
9
- end
10
-
11
- def verify_rsync(vm)
12
- begin
13
- vm.communicate.execute("rsync --version")
14
- rescue Exception => e
15
- @env.ui.say(:info, "rsync not found, installing rsync now. disable this with --no-install")
16
- # should notify people we are installing rsync here.
17
- case vm.guest.name
18
- when :debian, :ubuntu
19
- vm.communicate.sudo("apt-get update")
20
- vm.communicate.sudo("apt-get install rsync")
21
- when :fedora, :centos, :redhat
22
- vm.communicate.sudo("yum install rsync")
23
- when :suse
24
- vm.communicate.sudo("yast2 -i rsync")
25
- when :gentoo
26
- vm.communicate.sudo("emerge rsync")
27
- when :arch
28
- vm.communicate.sudo("pacman -s rsync")
29
- # when :solaris
30
- # vm.communicate.sudo("pkg install rsync")
31
- # when :freebsd
32
- # vm.communicate.sudo("pkg_add -r rsync")
33
- else
34
- raise RsyncNotAvailableError
35
- end
36
- end
37
- end
38
-
39
- def execute
40
- options = { :install_rsync => true,
41
- :verbose => false}
42
-
43
- opts = OptionParser.new do |opt|
44
- opt.banner = "Usage: vagrant rsync [vm-name]"
45
- opt.on("-n","--no-install", "do not attempt to install rysnc if not found") do |v|
46
- options[:install_rsync] = false
47
- end
48
- opt.on('-v','--verbose',"Run verbosely") do |v|
49
- options[:verbose] = true
50
- end
51
- opts.on( '-h', '--help', 'Display this screen' ) do
52
- puts opts
53
- exit
54
- end
55
- end
56
-
57
- argv = parse_options(opts)
58
- unless argv
59
- argv=["default"]
60
- end
61
-
62
- with_target_vms(argv) do |vm|
63
- raise Vagrant::Errors::VMNotCreatedError if vm.state.id == :not_created
64
- raise Vagrant::Errors::VMInaccessible if vm.state.id == :inaccessible
65
- end
66
-
67
- with_target_vms(argv) do |vm|
68
-
69
- if options[:install_rsync]
70
- @env.ui.say(:info,"checking if rsync exists on host")
71
- verify_rsync(vm)
72
- end
73
-
74
- vm.config.vm.synced_folders.each do |id, data|
75
- next if data[:nfs]
76
- hostpath = File.expand_path(data[:hostpath], vm.env.root_path)
77
- hostpath = "#{hostpath}/" if hostpath !~ /\/$/
78
- guestpath = data[:guestpath]
79
- ssh_info = vm.ssh_info
80
-
81
- rsync_options = "-aze --exclude #{vm.env.root_path}/.vagrant/ "
82
- rsync_options << '-vvv' if options[:verbose]
83
-
84
- command = [
85
- "rsync", "--verbose", "--delete", "--archive", "-z",
86
- "--exclude", ".vagrant/",
87
- "-e", "ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no -i '#{ssh_info[:private_key_path]}'",
88
- hostpath,
89
- "#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"]
90
-
91
-
92
- if options[:verbose]
93
- ## should the vagrant way of outputting text
94
- @env.ui.say(:info,command.join(" "))
95
- end
96
-
97
- r = Vagrant::Util::Subprocess.execute(*command)
98
- @env.ui.say(:info, "done") if options[:verbose]
99
- pp r.inspect
100
- if r.exit_code != 0
101
- raise Errors::RsyncError,
102
- :guestpath => guestpath,
103
- :hostpath => hostpath,
104
- :stderr => r.stderr
105
- end
106
- end
107
- end
108
- end
109
- end
110
- end
111
- end
data/lib/version.rb DELETED
@@ -1,5 +0,0 @@
1
- module VagrantPlugins
2
- module RSYNC
3
- VERSION = "0.2.0"
4
- end
5
- end