vagrant-cloner 0.9.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/README.md +5 -5
- data/gem-public_cert.pem +20 -0
- data/lib/vagrant-cloner.rb +1 -7
- data/lib/vagrant-cloner/base_cloner.rb +71 -0
- data/lib/vagrant-cloner/cloner_container.rb +31 -0
- data/lib/vagrant-cloner/cloners/mysql.rb +14 -9
- data/lib/vagrant-cloner/cloners/mysql_cleaner.rb +8 -5
- data/lib/vagrant-cloner/cloners/testcloner.rb +8 -5
- data/lib/vagrant-cloner/config.rb +12 -63
- data/lib/vagrant-cloner/plugin.rb +22 -0
- data/lib/vagrant-cloner/provisioner.rb +9 -15
- data/vagrant-cloner.gemspec +1 -1
- metadata +6 -3
- metadata.gz.sig +0 -0
- data/lib/vagrant-cloner/cloner.rb +0 -72
data.tar.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ Vagrant::Config.run do |config|
|
|
26
26
|
end
|
27
27
|
|
28
28
|
config.vm.provision :cloner do |cfg|
|
29
|
-
cfg.
|
29
|
+
cfg.cloner.mysql.tap do |c|
|
30
30
|
# Set options here.
|
31
31
|
c.enabled = true
|
32
32
|
c.run_order = 10
|
@@ -38,7 +38,7 @@ end
|
|
38
38
|
|
39
39
|
The following keys are valid:
|
40
40
|
|
41
|
-
- **
|
41
|
+
- **cloner**
|
42
42
|
- **(all cloners)**
|
43
43
|
- **enabled** - Required: Boolean whether to use this cloner or not. Defaults to false.
|
44
44
|
- **run_order** - Suggested: Integer value that dictates which order cloners run in. Lower orders run first. Defaults to 1000.
|
@@ -93,16 +93,16 @@ If you make an error in your script, you may have a hard time uninstalling it wi
|
|
93
93
|
To operate as a cloner, a class must inherit from `Vagrant::Cloners::Cloner`, and implement at a bare minimum these methods:
|
94
94
|
|
95
95
|
- `name` - Returns a string representation of the cloner's name; used for namespacing config.
|
96
|
-
- `validate
|
96
|
+
- `validate(machine, errors)` - Can be used to call `errors.add` if there are validations that need to be performed on configuration values.
|
97
97
|
- `call` - Executes the cloner's routine.
|
98
98
|
|
99
99
|
A cloner must also be registered in the config to be run. This is best done after the class has been closed, at the bottom of the file:
|
100
100
|
|
101
|
-
`Vagrant::
|
101
|
+
`Vagrant::ClonerContainer.instance.send("#{<Class>.instance.name}=".to_sym, <Class>.instance)`
|
102
102
|
|
103
103
|
So for the MySQL cloner (which is `Vagrant::Cloners::MysqlCloner`), the line would read
|
104
104
|
|
105
|
-
`Vagrant::
|
105
|
+
`Vagrant::ClonerContainer.instance.send("#{Vagrant::Cloners::MysqlCloner.instance.name}=".to_sym, Vagrant::Cloners::MysqlCloner.instance)`
|
106
106
|
|
107
107
|
A very minimal example [can be found in the cloners directory](lib/vagrant-cloner/cloners/testcloner.rb). For more detailed examples, look at the other cloners there!
|
108
108
|
|
data/gem-public_cert.pem
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDWDCCAkCgAwIBAgIBADANBgkqhkiG9w0BAQUFADBSMQ8wDQYDVQQDDAZnaXRo
|
3
|
+
dWIxFjAUBgoJkiaJk/IsZAEZFgZyb2JlcnQxEzARBgoJkiaJk/IsZAEZFgNuZXQx
|
4
|
+
EjAQBgoJkiaJk/IsZAEZFgJuejAeFw0xMzAyMDQwMzAxMTdaFw0xNDAyMDQwMzAx
|
5
|
+
MTdaMFIxDzANBgNVBAMMBmdpdGh1YjEWMBQGCgmSJomT8ixkARkWBnJvYmVydDET
|
6
|
+
MBEGCgmSJomT8ixkARkWA25ldDESMBAGCgmSJomT8ixkARkWAm56MIIBIjANBgkq
|
7
|
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5iRa6UYCDf6iH+wOnuQtItD+cc6zk9n
|
8
|
+
zNROTcz34f9Kc60EBvBQdr1K3dxd3Cg/8KZ8ScldFbDQ5pOQTn83Vp57KW+vXq3W
|
9
|
+
Cs5kfYmfPrX+h77NhsyvlPDxXEUfEHYQNXok9GsUmwOMKt4/QmhnPyk0sQ00UFCx
|
10
|
+
LIUv23tqTwbkR9cKLGyQL3Wqu35yodLqFA7J3HAV+FLwfaUDbyYwUIOIijtjzzya
|
11
|
+
7qsYn6JyFaHULRNVugP8HI5btXbCmOmP87hwXTkRE5PV9QlKsN9gw7RyYJvIAHZm
|
12
|
+
Kob9X1khIoqcoEhwU41R55oxIsF6X99oK7Logjh/KQ1ad2U8taidkQIDAQABozkw
|
13
|
+
NzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQm8KrxyAkNbIEOkjt3Q0IqHayIcTALBgNV
|
14
|
+
HQ8EBAMCBLAwDQYJKoZIhvcNAQEFBQADggEBAJRN7tzK177JE1Qrc/42+Rv0nGMa
|
15
|
+
AGDw9Vq5dg0ZOeeDc/R7KwauQm55c9xgiaiZDVPuTcQMrlhVnF7V19upgaSozpOJ
|
16
|
+
G3ds/5Dz8YW7417ygOvqU3EJgyk6mRBsuZnqEdZaIqm4W4iTmawBwizNqPucK7tv
|
17
|
+
+Y2/hwxUAPN018IUJtqyeDktIaEvel5Zxz8otmtoRC++8qZRMN3+AaVNSGRRIgBT
|
18
|
+
T9H/4+4jHUDAyjhtWSvSUvcpxODHn5pnz6EdzwDPxHcsGAYKT15qWh1Q30OW9sfO
|
19
|
+
1n1MjdAhfkkUVxrbjfGOEjpTeeQ3rAcHkUNAWNLeIeH+2z8ska6zAHl41aU=
|
20
|
+
-----END CERTIFICATE-----
|
data/lib/vagrant-cloner.rb
CHANGED
@@ -1,8 +1,2 @@
|
|
1
1
|
require 'vagrant'
|
2
|
-
require 'vagrant-cloner/
|
3
|
-
require 'vagrant-cloner/config'
|
4
|
-
require 'vagrant-cloner/cloner'
|
5
|
-
|
6
|
-
Dir[File.join(File.dirname(__FILE__), 'vagrant-cloner', 'cloners', '*.rb')].each {|f| require f }
|
7
|
-
|
8
|
-
Vagrant.provisioners.register(:cloner, Vagrant::Provisioners::Cloner)
|
2
|
+
require 'vagrant-cloner/plugin'
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'net/ssh'
|
2
|
+
require 'net/scp'
|
3
|
+
require 'date'
|
4
|
+
require 'singleton'
|
5
|
+
|
6
|
+
module VagrantCloner
|
7
|
+
# Cloner defines the base API that a cloner has to modify a VM or remote systems.
|
8
|
+
# TODO: Create a method that downloads to local and then uploads to VM?
|
9
|
+
|
10
|
+
class BaseCloner
|
11
|
+
include Singleton
|
12
|
+
|
13
|
+
attr_accessor :enabled, :machine, :options, :run_order
|
14
|
+
attr_reader :env
|
15
|
+
|
16
|
+
def name
|
17
|
+
raise "Cloner must define #name and return a string."
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate(machine, errors)
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def enabled?
|
25
|
+
@enabled.nil? ? false : @enabled
|
26
|
+
end
|
27
|
+
|
28
|
+
def run_order
|
29
|
+
@run_order ||= 1000
|
30
|
+
end
|
31
|
+
|
32
|
+
# Shorthand for addressing the SSH communicator to the VM. View available methods
|
33
|
+
# here:
|
34
|
+
# https://github.com/mitchellh/vagrant/blob/master/plugins/communicators/ssh/communicator.rb
|
35
|
+
def vm
|
36
|
+
@machine.communicate
|
37
|
+
end
|
38
|
+
|
39
|
+
# Opens an SSH connection to an arbitrary server and passes it to a supplied block.
|
40
|
+
#
|
41
|
+
# See netssh documentation for further method options.
|
42
|
+
# http://net-ssh.github.com/net-ssh/
|
43
|
+
def ssh(*args, &block)
|
44
|
+
Net::SSH.start(*args, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Opens an SCP connection to an arbitrary server, downloading or uploading to the
|
48
|
+
# machine currently in scope (whether the host machine or the VM).
|
49
|
+
# Recommended params:
|
50
|
+
# remote_host, remote_user, {:password => remote_password}
|
51
|
+
#
|
52
|
+
# See netscp documentation for further method options.
|
53
|
+
# https://github.com/net-ssh/net-scp
|
54
|
+
def scp(*args, &block)
|
55
|
+
Net::SCP.start(*args, &block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def datestring
|
59
|
+
Date.today.to_s
|
60
|
+
end
|
61
|
+
protected :datestring
|
62
|
+
|
63
|
+
# Wrap debugging options.
|
64
|
+
%w(info warn error success).each do |meth|
|
65
|
+
define_method(meth) do |message|
|
66
|
+
@machine.env.ui.send(meth.to_sym, message)
|
67
|
+
end
|
68
|
+
protected meth.to_sym
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'singleton'
|
3
|
+
|
4
|
+
module VagrantCloner
|
5
|
+
class ClonerContainer < OpenStruct
|
6
|
+
include Singleton
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
def members
|
10
|
+
methods(false).grep(/=/).map {|m| m[0...-1] }
|
11
|
+
end
|
12
|
+
|
13
|
+
def each
|
14
|
+
members.each {|m| yield send(m) }
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def each_pair
|
19
|
+
members.each {|m| yield m, send(m)}
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def enabled_by_order
|
24
|
+
members.collect {|m| send(m)} # Get all plugin instances
|
25
|
+
.select {|m| m.enabled? } # Only enabled
|
26
|
+
.sort_by(&:run_order) # Sort by run order
|
27
|
+
.each {|m| yield m} # Yield up
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module
|
1
|
+
module VagrantCloner
|
2
2
|
module Cloners
|
3
|
-
class MysqlCloner <
|
3
|
+
class MysqlCloner < ::VagrantCloner::BaseCloner
|
4
4
|
|
5
5
|
attr_accessor :remote_host, :remote_user, :remote_password,
|
6
6
|
:remote_db_user, :remote_db_password,
|
@@ -13,13 +13,16 @@ module Vagrant
|
|
13
13
|
"mysql"
|
14
14
|
end
|
15
15
|
|
16
|
-
def validate
|
17
|
-
|
18
|
-
|
16
|
+
def validate(machine, errors)
|
17
|
+
failures = []
|
18
|
+
failures.push "Must specify a remote user and host." unless remote_user && remote_host
|
19
|
+
failures.push "Must specify a remote database user and password." unless remote_db_user && remote_db_password
|
19
20
|
unless warned_about_password or remote_password
|
20
|
-
env.ui.warn "You haven't specified a remote password. Pulling down MySQL databases may fail unless you have proper publickey authentication enabled."
|
21
|
+
machine.env.ui.warn "You haven't specified a remote password. Pulling down MySQL databases may fail unless you have proper publickey authentication enabled."
|
21
22
|
@warned_about_password = true
|
22
23
|
end
|
24
|
+
|
25
|
+
errors.merge(name.to_sym => failures) if failures.any?
|
23
26
|
end
|
24
27
|
|
25
28
|
def remote_credentials
|
@@ -105,8 +108,10 @@ module Vagrant
|
|
105
108
|
end
|
106
109
|
|
107
110
|
def import_database
|
108
|
-
vm.
|
109
|
-
|
111
|
+
vm.tap do |host|
|
112
|
+
host.upload @local_backup_location, @vm_backup_location
|
113
|
+
host.execute "mysql -u#{@vm_db_user} -p#{@vm_db_password} < #{@vm_backup_location}"
|
114
|
+
end
|
110
115
|
info "Done loading database."
|
111
116
|
end
|
112
117
|
|
@@ -122,4 +127,4 @@ module Vagrant
|
|
122
127
|
end
|
123
128
|
end
|
124
129
|
|
125
|
-
|
130
|
+
VagrantCloner::ClonerContainer.instance.send("#{VagrantCloner::Cloners::MysqlCloner.instance.name}=".to_sym, VagrantCloner::Cloners::MysqlCloner.instance)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Etailer
|
2
|
-
class MysqlCleanerCloner < ::
|
2
|
+
class MysqlCleanerCloner < ::VagrantCloner::BaseCloner
|
3
3
|
attr_accessor :vm_db_user, :vm_db_password
|
4
4
|
|
5
5
|
def name
|
@@ -14,9 +14,12 @@ module Etailer
|
|
14
14
|
@scripts = Array(scripts).flatten
|
15
15
|
end
|
16
16
|
|
17
|
-
def validate
|
18
|
-
|
19
|
-
|
17
|
+
def validate(machine, errors)
|
18
|
+
failures = []
|
19
|
+
failures.push "You have to specify at least one script to run!" if scripts.nil? || scripts.empty?
|
20
|
+
failures.push "You must specify a VM database user and password!" unless vm_db_user && vm_db_password
|
21
|
+
|
22
|
+
errors.merge(name.to_sym => failures) if failures.any?
|
20
23
|
end
|
21
24
|
|
22
25
|
def mysql_connection_string
|
@@ -34,4 +37,4 @@ module Etailer
|
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
|
-
|
40
|
+
VagrantCloner::ClonerContainer.instance.send("#{Etailer::MysqlCleanerCloner.instance.name}=".to_sym, Etailer::MysqlCleanerCloner.instance)
|
@@ -1,14 +1,17 @@
|
|
1
|
-
module
|
1
|
+
module VagrantCloner
|
2
2
|
module Cloners
|
3
|
-
class TestCloner <
|
3
|
+
class TestCloner < ::VagrantCloner::BaseCloner
|
4
4
|
attr_accessor :foo
|
5
5
|
|
6
6
|
def name
|
7
7
|
"testcloner"
|
8
8
|
end
|
9
9
|
|
10
|
-
def validate
|
11
|
-
|
10
|
+
def validate(machine, errors)
|
11
|
+
failures = []
|
12
|
+
failures.push "Must specify a foo" unless foo
|
13
|
+
|
14
|
+
failures.merge(name.to_sym => failures) if failures.any?
|
12
15
|
end
|
13
16
|
|
14
17
|
def call
|
@@ -18,7 +21,7 @@ module Vagrant
|
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
21
|
-
|
24
|
+
VagrantCloner::ClonerContainer.instance.send("#{VagrantCloner::Cloners::TestCloner.instance.name}=".to_sym, VagrantCloner::Cloners::TestCloner.instance)
|
22
25
|
|
23
26
|
# Inside your vagrant file, make sure you add the section for this cloner!
|
24
27
|
# # ...
|
@@ -1,70 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# In readme:
|
6
|
-
# config.cloners.mysql.config_option = yes
|
7
|
-
#
|
8
|
-
# In provisioner
|
9
|
-
# config.cloners.any? {|k, v| v.enabled?}
|
10
|
-
|
11
|
-
require 'ostruct'
|
12
|
-
|
13
|
-
module Vagrant
|
14
|
-
module Provisioners
|
15
|
-
class ClonerContainer < OpenStruct
|
16
|
-
include Enumerable
|
17
|
-
def members
|
18
|
-
methods(false).grep(/=/).map {|m| m[0...-1] }
|
19
|
-
end
|
20
|
-
|
21
|
-
def each
|
22
|
-
members.each {|m| yield send(m) }
|
23
|
-
self
|
24
|
-
end
|
25
|
-
|
26
|
-
def each_pair
|
27
|
-
members.each {|m| yield m, send(m)}
|
28
|
-
self
|
29
|
-
end
|
30
|
-
|
31
|
-
def enabled_by_order
|
32
|
-
members.collect {|m| send(m)} # Get all plugin instances
|
33
|
-
.select {|m| m.enabled? } # Only enabled
|
34
|
-
.sort_by(&:run_order) # Sort by run order
|
35
|
-
.each {|m| yield m} # Yield up
|
36
|
-
end
|
37
|
-
|
1
|
+
module VagrantCloner
|
2
|
+
class Config < Vagrant.plugin("2", :config)
|
3
|
+
class << self
|
4
|
+
attr_accessor :registered_cloners
|
38
5
|
end
|
39
6
|
|
40
|
-
|
41
|
-
class
|
42
|
-
|
43
|
-
def registered_cloners
|
44
|
-
@@registered_cloners ||= ClonerContainer.new
|
45
|
-
end
|
46
|
-
|
47
|
-
def register_cloner(name, instance)
|
48
|
-
registered_cloners.send("#{name}=".to_sym, instance)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def cloners
|
53
|
-
@@registered_cloners
|
54
|
-
end
|
55
|
-
|
56
|
-
def validate(env, errors)
|
57
|
-
# errors.add('Remote server must be specified.') unless remote_host
|
58
|
-
cloners.select {|c| c.enabled? }.each do |cloner|
|
59
|
-
cloner.validate!(env, errors)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
7
|
+
def cloner
|
8
|
+
self.class.registered_cloners ||= []
|
9
|
+
end
|
63
10
|
|
64
|
-
|
65
|
-
|
11
|
+
def validate(machine)
|
12
|
+
errors = {}
|
13
|
+
cloner.select {|c| c.enabled? }.each do |c|
|
14
|
+
c.validate(machine, errors)
|
66
15
|
end
|
16
|
+
errors
|
67
17
|
end
|
68
18
|
end
|
69
19
|
end
|
70
|
-
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'vagrant-cloner/cloner_container'
|
2
|
+
require 'vagrant-cloner/base_cloner'
|
3
|
+
Dir[File.join(File.dirname(__FILE__), 'cloners', '*.rb')].each {|f| require f }
|
4
|
+
|
5
|
+
module VagrantCloner
|
6
|
+
class Plugin < ::Vagrant.plugin("2")
|
7
|
+
name "Cloner"
|
8
|
+
|
9
|
+
config(:cloner, :provisioner) do
|
10
|
+
require 'vagrant-cloner/config'
|
11
|
+
::VagrantCloner::Config.tap do |c|
|
12
|
+
c.registered_cloners = ::VagrantCloner::ClonerContainer.instance
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
provisioner(:cloner) do
|
17
|
+
require 'vagrant-cloner/provisioner'
|
18
|
+
::VagrantCloner::Provisioner
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -1,18 +1,12 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
config.cloners.enabled_by_order do |cloner|
|
11
|
-
cloner.tap {|c|
|
12
|
-
c.options = config.cloners.send(cloner.name)
|
13
|
-
c.env = env
|
14
|
-
}.call
|
15
|
-
end
|
1
|
+
module VagrantCloner
|
2
|
+
class Provisioner < Vagrant.plugin("2", :provisioner)
|
3
|
+
def provision
|
4
|
+
@machine.env.ui.info "Vagrant-Cloner beginning back-up process."
|
5
|
+
config.cloner.enabled_by_order do |cloner|
|
6
|
+
cloner.tap {|c|
|
7
|
+
c.options = config.cloner.send(cloner.name)
|
8
|
+
c.machine = @machine
|
9
|
+
}.call
|
16
10
|
end
|
17
11
|
end
|
18
12
|
end
|
data/vagrant-cloner.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-cloner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -39,7 +39,7 @@ cert_chain:
|
|
39
39
|
ME9XOXNmTwoxbjFNamRBaGZra1VWeHJiamZHT0VqcFRlZVEzckFjSGtVTkFX
|
40
40
|
TkxlSWVIKzJ6OHNrYTZ6QUhsNDFhVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUt
|
41
41
|
LS0tLQo=
|
42
|
-
date: 2013-
|
42
|
+
date: 2013-03-23 00:00:00.000000000 Z
|
43
43
|
dependencies: []
|
44
44
|
description: Copy production resources down to your new VM.
|
45
45
|
email:
|
@@ -54,12 +54,15 @@ files:
|
|
54
54
|
- LICENSE.txt
|
55
55
|
- README.md
|
56
56
|
- Rakefile
|
57
|
+
- gem-public_cert.pem
|
57
58
|
- lib/vagrant-cloner.rb
|
58
|
-
- lib/vagrant-cloner/
|
59
|
+
- lib/vagrant-cloner/base_cloner.rb
|
60
|
+
- lib/vagrant-cloner/cloner_container.rb
|
59
61
|
- lib/vagrant-cloner/cloners/mysql.rb
|
60
62
|
- lib/vagrant-cloner/cloners/mysql_cleaner.rb
|
61
63
|
- lib/vagrant-cloner/cloners/testcloner.rb
|
62
64
|
- lib/vagrant-cloner/config.rb
|
65
|
+
- lib/vagrant-cloner/plugin.rb
|
63
66
|
- lib/vagrant-cloner/provisioner.rb
|
64
67
|
- lib/vagrant_init.rb
|
65
68
|
- vagrant-cloner.gemspec
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'net/ssh'
|
2
|
-
require 'net/scp'
|
3
|
-
require 'date'
|
4
|
-
require 'singleton'
|
5
|
-
|
6
|
-
module Vagrant
|
7
|
-
module Cloners
|
8
|
-
# Cloner defines the base API that a cloner has to modify a VM or remote systems.
|
9
|
-
# TODO: Create a method that downloads to local and then uploads to VM?
|
10
|
-
|
11
|
-
class Cloner
|
12
|
-
include Singleton
|
13
|
-
|
14
|
-
attr_accessor :enabled, :env, :options, :run_order
|
15
|
-
|
16
|
-
def name
|
17
|
-
raise "Cloner must define #name and return a string."
|
18
|
-
end
|
19
|
-
|
20
|
-
def validate!(env, errors)
|
21
|
-
true
|
22
|
-
end
|
23
|
-
|
24
|
-
def enabled?
|
25
|
-
@enabled.nil? ? false : @enabled
|
26
|
-
end
|
27
|
-
|
28
|
-
def run_order
|
29
|
-
@run_order ||= 1000
|
30
|
-
end
|
31
|
-
|
32
|
-
# Shorthand for addressing the SSH communicator to the VM. View available methods
|
33
|
-
# here:
|
34
|
-
# https://github.com/mitchellh/vagrant/blob/master/plugins/communicators/ssh/communicator.rb
|
35
|
-
def vm
|
36
|
-
env[:vm].channel
|
37
|
-
end
|
38
|
-
|
39
|
-
# Opens an SSH connection to an arbitrary server and passes it to a supplied block.
|
40
|
-
#
|
41
|
-
# See netssh documentation for further method options.
|
42
|
-
# http://net-ssh.github.com/net-ssh/
|
43
|
-
def ssh(*args, &block)
|
44
|
-
Net::SSH.start(*args, &block)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Opens an SCP connection to an arbitrary server, downloading or uploading to the
|
48
|
-
# machine currently in scope (whether the host machine or the VM).
|
49
|
-
# Recommended params:
|
50
|
-
# remote_host, remote_user, {:password => remote_password}
|
51
|
-
#
|
52
|
-
# See netscp documentation for further method options.
|
53
|
-
# https://github.com/net-ssh/net-scp
|
54
|
-
def scp(*args, &block)
|
55
|
-
Net::SCP.start(*args, &block)
|
56
|
-
end
|
57
|
-
|
58
|
-
def datestring
|
59
|
-
Date.today.to_s
|
60
|
-
end
|
61
|
-
protected :datestring
|
62
|
-
|
63
|
-
# Wrap debugging options.
|
64
|
-
%w(info warn error success).each do |meth|
|
65
|
-
define_method(meth) do |message|
|
66
|
-
env[:ui].send(meth.to_sym, message)
|
67
|
-
end
|
68
|
-
protected meth.to_sym
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|