vagrant-cloner 0.9.3 → 2.0.0
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.
- 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
|