vagrant-invade 0.0.1 → 0.2.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.
- checksums.yaml +4 -4
- data/.gitattributes +17 -0
- data/.gitignore +4 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +106 -0
- data/LICENSE +339 -0
- data/README.md +4 -0
- data/Rakefile +3 -0
- data/images/logo-128.png +0 -0
- data/images/logo-256.png +0 -0
- data/images/logo-512.png +0 -0
- data/invade.yml.dist +56 -0
- data/lib/vagrant-invade/action/config.rb +73 -0
- data/lib/vagrant-invade/action/create.rb +97 -0
- data/lib/vagrant-invade/action/generate.rb +95 -0
- data/lib/vagrant-invade/action/validate.rb +156 -0
- data/lib/vagrant-invade/action.rb +34 -0
- data/lib/vagrant-invade/builder/definition.rb +43 -0
- data/lib/vagrant-invade/builder/network/forwarded_port.rb +47 -0
- data/lib/vagrant-invade/builder/network/private_network.rb +41 -0
- data/lib/vagrant-invade/builder/network/public_network.rb +43 -0
- data/lib/vagrant-invade/builder/network.rb +13 -0
- data/lib/vagrant-invade/builder/provider/virtualbox.rb +47 -0
- data/lib/vagrant-invade/builder/provider/vmware.rb +44 -0
- data/lib/vagrant-invade/builder/provider.rb +12 -0
- data/lib/vagrant-invade/builder/provision/puppet.rb +47 -0
- data/lib/vagrant-invade/builder/provision/shell.rb +45 -0
- data/lib/vagrant-invade/builder/provision/shell_inline.rb +45 -0
- data/lib/vagrant-invade/builder/provision.rb +12 -0
- data/lib/vagrant-invade/builder/synced_folder/nfs.rb +48 -0
- data/lib/vagrant-invade/builder/synced_folder/virtualbox.rb +48 -0
- data/lib/vagrant-invade/builder/synced_folder.rb +12 -0
- data/lib/vagrant-invade/builder/vagrantfile.rb +35 -0
- data/lib/vagrant-invade/builder/vm.rb +41 -0
- data/lib/vagrant-invade/builder.rb +17 -0
- data/lib/vagrant-invade/command/base.rb +19 -0
- data/lib/vagrant-invade/command/build.rb +37 -0
- data/lib/vagrant-invade/command/root.rb +73 -0
- data/lib/vagrant-invade/command/validate.rb +37 -0
- data/lib/vagrant-invade/generator/definition.rb +25 -0
- data/lib/vagrant-invade/generator/section/network.rb +38 -0
- data/lib/vagrant-invade/generator/section/plugin.rb +0 -0
- data/lib/vagrant-invade/generator/section/provider.rb +36 -0
- data/lib/vagrant-invade/generator/section/provision.rb +38 -0
- data/lib/vagrant-invade/generator/section/synced_folder.rb +36 -0
- data/lib/vagrant-invade/generator/section/vm.rb +27 -0
- data/lib/vagrant-invade/generator/section.rb +15 -0
- data/lib/vagrant-invade/generator/vagrantfile.rb +24 -0
- data/lib/vagrant-invade/generator.rb +11 -0
- data/lib/vagrant-invade/plugin.rb +28 -0
- data/lib/vagrant-invade/template/definition.erb +19 -0
- data/lib/vagrant-invade/template/network/forwarded_port.erb +8 -0
- data/lib/vagrant-invade/template/network/private_network.erb +1 -0
- data/lib/vagrant-invade/template/network/public_network.erb +5 -0
- data/lib/vagrant-invade/template/provider/virtualbox.erb +11 -0
- data/lib/vagrant-invade/template/provider/vmware.erb +5 -0
- data/lib/vagrant-invade/template/provision/puppet.erb +0 -0
- data/lib/vagrant-invade/template/provision/shell.erb +2 -0
- data/lib/vagrant-invade/template/provision/shell_inline.erb +2 -0
- data/lib/vagrant-invade/template/synced_folder/nfs.erb +12 -0
- data/lib/vagrant-invade/template/synced_folder/virtualbox.erb +1 -0
- data/lib/vagrant-invade/template/v2.erb +9 -0
- data/lib/vagrant-invade/template/vm/vm.erb +7 -0
- data/lib/vagrant-invade/validator/invade.rb +39 -0
- data/lib/vagrant-invade/validator/network/forwarded_port.rb +68 -0
- data/lib/vagrant-invade/validator/network/private_network.rb +44 -0
- data/lib/vagrant-invade/validator/network/public_network.rb +56 -0
- data/lib/vagrant-invade/validator/network.rb +13 -0
- data/lib/vagrant-invade/validator/plugin/hostmanager.rb +57 -0
- data/lib/vagrant-invade/validator/plugin/winnfsd.rb +52 -0
- data/lib/vagrant-invade/validator/plugin.rb +12 -0
- data/lib/vagrant-invade/validator/provider/virtualbox.rb +46 -0
- data/lib/vagrant-invade/validator/provider/vmware.rb +27 -0
- data/lib/vagrant-invade/validator/provider.rb +39 -0
- data/lib/vagrant-invade/validator/provision/puppet.rb +70 -0
- data/lib/vagrant-invade/validator/provision/shell.rb +52 -0
- data/lib/vagrant-invade/validator/provision/shell_inline.rb +52 -0
- data/lib/vagrant-invade/validator/provision.rb +22 -0
- data/lib/vagrant-invade/validator/ssh.rb +38 -0
- data/lib/vagrant-invade/validator/synced_folder/nfs.rb +46 -0
- data/lib/vagrant-invade/validator/synced_folder/vb.rb +52 -0
- data/lib/vagrant-invade/validator/synced_folder.rb +36 -0
- data/lib/vagrant-invade/validator/vm.rb +45 -0
- data/lib/vagrant-invade/validator.rb +113 -0
- data/lib/vagrant-invade/version.rb +5 -0
- data/lib/vagrant-invade.rb +41 -0
- data/pkg/vagrant-invade-0.0.1.gem +0 -0
- data/vagrant-invade.gemspec +17 -0
- metadata +94 -7
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module Provider
|
|
5
|
+
|
|
6
|
+
autoload :VirtualBox, 'vagrant-invade/validator/provider/virtualbox'
|
|
7
|
+
autoload :VMware, 'vagrant-invade/validator/provider/vmware'
|
|
8
|
+
|
|
9
|
+
DEFAULT = {
|
|
10
|
+
'name' => nil,
|
|
11
|
+
'core' => 1,
|
|
12
|
+
'memory' => 1024
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
def self.validate_base(env, provider)
|
|
16
|
+
return nil unless provider
|
|
17
|
+
|
|
18
|
+
# NAME
|
|
19
|
+
provider['name'] = Validator.validate_string(
|
|
20
|
+
provider['name'], 'name', DEFAULT['name']
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# CORE
|
|
24
|
+
provider['cores'] = Validator.validate_integer(
|
|
25
|
+
provider['cores'], 'cores', DEFAULT['cores']
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# MEMORY
|
|
29
|
+
provider['memory'] = Validator.validate_integer(
|
|
30
|
+
provider['memory'], 'memory', DEFAULT['memory']
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
provider
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module Provision
|
|
5
|
+
|
|
6
|
+
class Puppet
|
|
7
|
+
|
|
8
|
+
attr_accessor :env
|
|
9
|
+
attr_accessor :puppet
|
|
10
|
+
|
|
11
|
+
DEFAULT = {
|
|
12
|
+
'folder' => './puppet',
|
|
13
|
+
'modules' => 'modules',
|
|
14
|
+
'manifests' => 'manifests',
|
|
15
|
+
'manifest_file' => 'init.pp',
|
|
16
|
+
'hiera_config_path' => nil,
|
|
17
|
+
'facter' => []
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
def initialize(env, puppet)
|
|
21
|
+
@env = env
|
|
22
|
+
@puppet = Provision.validate_base(env, puppet)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def validate
|
|
26
|
+
return nil unless @puppet
|
|
27
|
+
|
|
28
|
+
# FOLDER
|
|
29
|
+
@puppet['folder'] = Validator.validate_string(
|
|
30
|
+
@puppet['folder'], 'folder', DEFAULT['folder']
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# MODULES PATH
|
|
34
|
+
@puppet['modules_path'] = Validator.validate_string(
|
|
35
|
+
@puppet['modules_path'], 'modules_path', DEFAULT['modules_path']
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# MANIFESTS PATH
|
|
39
|
+
@puppet['manifests_path'] = Validator.validate_string(
|
|
40
|
+
@puppet['manifests_path'], 'manifests_path', DEFAULT['manifests_path']
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# MANIFEST FILE
|
|
44
|
+
@puppet['manifest_file'] = Validator.validate_string(
|
|
45
|
+
@puppet['manifest_file'], 'manifest_file', DEFAULT['manifest_file']
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# HIERA CONFIG PATH
|
|
49
|
+
@puppet['hiera_config_path'] = Validator.validate_string(
|
|
50
|
+
@puppet['hiera_config_path'], 'hiera_config_path', DEFAULT['hiera_config_path']
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# FACTER
|
|
54
|
+
@puppet['facter'] = Validator.validate_array(
|
|
55
|
+
@puppet['facter'], 'facter', DEFAULT['facter']
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
@puppet
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.default(params)
|
|
62
|
+
@folder = params[:folder]
|
|
63
|
+
@modules_path = params[:modules_path]
|
|
64
|
+
@manifests_path = params[:manifests_path]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module Provision
|
|
5
|
+
|
|
6
|
+
class Shell
|
|
7
|
+
|
|
8
|
+
attr_accessor :env
|
|
9
|
+
attr_accessor :shell
|
|
10
|
+
|
|
11
|
+
DEFAULT = {
|
|
12
|
+
'name' => 'invade_shell',
|
|
13
|
+
'path' => nil,
|
|
14
|
+
'binary' => nil, # Vagrant default is true
|
|
15
|
+
'privileged' => nil # Vagrant default is true
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def initialize(env, shell)
|
|
19
|
+
@env = env
|
|
20
|
+
@shell = Provision.validate_base(env, shell)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def validate
|
|
24
|
+
return nil unless @shell
|
|
25
|
+
|
|
26
|
+
# NAME
|
|
27
|
+
@shell['name'] = Validator.validate_string(
|
|
28
|
+
@shell['name'], 'name', DEFAULT['name']
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# PATH (path to shell script or remote address to script file)
|
|
32
|
+
@shell['path'] = Validator.validate_string(
|
|
33
|
+
@shell['path'], 'path', DEFAULT['path']
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# BINARY (replace windows newline endings with unix line endings)
|
|
37
|
+
@shell['binary'] = Validator.validate_boolean(
|
|
38
|
+
@shell['binary'], 'binary', DEFAULT['binary']
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# PRIVILEGED (run with sudo)
|
|
42
|
+
@shell['privileged'] = Validator.validate_boolean(
|
|
43
|
+
@shell['privileged'], 'privileged', DEFAULT['privileged']
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
@shell
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module Provision
|
|
5
|
+
|
|
6
|
+
class ShellInline
|
|
7
|
+
|
|
8
|
+
attr_accessor :env
|
|
9
|
+
attr_accessor :shell_inline
|
|
10
|
+
|
|
11
|
+
DEFAULT = {
|
|
12
|
+
'name' => 'invade_shell_inline',
|
|
13
|
+
'inline' => nil,
|
|
14
|
+
'binary' => nil, # Vagrant default is true
|
|
15
|
+
'privileged' => nil # Vagrant default is true
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def initialize(env, shell_inline)
|
|
19
|
+
@env = env
|
|
20
|
+
@shell_inline = Provision.validate_base(env, shell_inline)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def validate
|
|
24
|
+
return nil unless @shell_inline
|
|
25
|
+
|
|
26
|
+
# NAME
|
|
27
|
+
@shell_inline['name'] = Validator.validate_string(
|
|
28
|
+
@shell_inline['name'], 'name', DEFAULT['name']
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# INLINE SCRIPT
|
|
32
|
+
@shell_inline['inline'] = Validator.validate_string(
|
|
33
|
+
@shell_inline['inline'], 'inline', DEFAULT['inline']
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# BINARY (replace windows newline endings with unix line endings)
|
|
37
|
+
@shell_inline['binary'] = Validator.validate_boolean(
|
|
38
|
+
@shell_inline['binary'], 'binary', DEFAULT['binary']
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# PRIVILEGED (run with sudo)
|
|
42
|
+
@shell_inline['privileged'] = Validator.validate_boolean(
|
|
43
|
+
@shell_inline['privileged'], 'privileged', DEFAULT['privileged']
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
@shell_inline
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module Provision
|
|
5
|
+
|
|
6
|
+
autoload :Shell, 'vagrant-invade/validator/provision/shell'
|
|
7
|
+
autoload :ShellInline, 'vagrant-invade/validator/provision/shell_inline'
|
|
8
|
+
autoload :Puppet, 'vagrant-invade/validator/provision/puppet'
|
|
9
|
+
#autoload :Chef, 'vagrant-invade/validator/provision/chef'
|
|
10
|
+
#autoload :Docker, 'vagrant-invade/validator/provision/docker'
|
|
11
|
+
|
|
12
|
+
DEFAULT = {}
|
|
13
|
+
|
|
14
|
+
def self.validate_base(env, provision)
|
|
15
|
+
return nil unless provision
|
|
16
|
+
|
|
17
|
+
provision
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
|
|
5
|
+
class SSH
|
|
6
|
+
|
|
7
|
+
attr_accessor :env, :ssh
|
|
8
|
+
|
|
9
|
+
DEFAULT = {
|
|
10
|
+
'enabled' => nil,
|
|
11
|
+
'path' => '~/.ssh/'
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
def initialize(env, ssh)
|
|
15
|
+
@env = env
|
|
16
|
+
@ssh = ssh
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def validate
|
|
20
|
+
return DEFAULT unless @ssh
|
|
21
|
+
|
|
22
|
+
# ENABLED
|
|
23
|
+
@ssh['enabled'] = Validator.validate_boolean(
|
|
24
|
+
@ssh['enabled'], 'enabled', DEFAULT['enabled']
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# PATH TO HOST SSH FOLDER
|
|
28
|
+
@ssh['path'] = Validator.validate_string(
|
|
29
|
+
@ssh['path'], 'path', DEFAULT['path']
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
@ssh
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module SyncedFolder
|
|
5
|
+
|
|
6
|
+
class NFS
|
|
7
|
+
|
|
8
|
+
attr_accessor :env
|
|
9
|
+
attr_accessor :nfs
|
|
10
|
+
|
|
11
|
+
DEFAULT = {
|
|
12
|
+
'uid' => nil,
|
|
13
|
+
'gid' => nil,
|
|
14
|
+
'mount_options' => ['nolock']
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
def initialize(env, nfs)
|
|
18
|
+
@env = env
|
|
19
|
+
@nfs = SyncedFolder.validate_base(env, nfs)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def validate
|
|
23
|
+
return nil unless @nfs
|
|
24
|
+
|
|
25
|
+
# USER ID
|
|
26
|
+
@nfs['uid'] = Validator.validate_integer(
|
|
27
|
+
@nfs['uid'], 'uid', DEFAULT['uid']
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# GROUP ID
|
|
31
|
+
@nfs['gid'] = Validator.validate_integer(
|
|
32
|
+
@nfs['gid'], 'gid', DEFAULT['gid']
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# NFS OPTIONS
|
|
36
|
+
@nfs['mount_options'] = Validator.validate_array(
|
|
37
|
+
@nfs['mount_options'], 'mount_options', DEFAULT['mount_options']
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
@nfs
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module SyncedFolder
|
|
5
|
+
|
|
6
|
+
class Vb
|
|
7
|
+
|
|
8
|
+
attr_accessor :env
|
|
9
|
+
attr_accessor :vb
|
|
10
|
+
|
|
11
|
+
DEFAULT = {
|
|
12
|
+
'owner' => 'vagrant',
|
|
13
|
+
'group' => 'root',
|
|
14
|
+
'dmode' => 755,
|
|
15
|
+
'fmode' => 664
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def initialize(env, vb)
|
|
19
|
+
@env = env
|
|
20
|
+
@vb = SyncedFolder.validate_base(env, vb)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def validate
|
|
24
|
+
return false unless @vb
|
|
25
|
+
|
|
26
|
+
# OWNER
|
|
27
|
+
@vb['owner'] = Validator.validate(
|
|
28
|
+
@vb['owner'], 'owner', 'string', DEFAULT['owner']
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# GROUP
|
|
32
|
+
@vb['group'] = Validator.validate(
|
|
33
|
+
@vb['group'], 'group', 'string', DEFAULT['group']
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# DMODE (Directory Permission Mode)
|
|
37
|
+
@vb['dmode'] = Validator.validat(
|
|
38
|
+
@vb['dmode'], 'dmode', 'integer', DEFAULT['dmode']
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# FMODE (File Permission Mode)
|
|
42
|
+
@vb['fmode'] = Validator.validate(
|
|
43
|
+
@vb['fmode'], 'fmode', 'integer', DEFAULT['fmode']
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
@vb
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
module SyncedFolder
|
|
5
|
+
|
|
6
|
+
autoload :VB, 'vagrant-invade/validator/synced_folder/vb'
|
|
7
|
+
autoload :NFS, 'vagrant-invade/validator/synced_folder/nfs'
|
|
8
|
+
|
|
9
|
+
DEFAULT = {
|
|
10
|
+
'enabled' => nil,
|
|
11
|
+
'source' => '.',
|
|
12
|
+
'path' => '/www'
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
def self.validate_base(env, shared_folder)
|
|
16
|
+
return nil unless shared_folder
|
|
17
|
+
|
|
18
|
+
shared_folder['enabled'] = Validator.validate_boolean(
|
|
19
|
+
shared_folder['enabled'], 'enabled', DEFAULT['enabled']
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
shared_folder['source'] = Validator.validate_string(
|
|
23
|
+
shared_folder['source'], 'source', DEFAULT['source']
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
shared_folder['path'] = Validator.validate_string(
|
|
27
|
+
shared_folder['path'], 'path', DEFAULT['path']
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
shared_folder
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
|
|
5
|
+
class VM
|
|
6
|
+
|
|
7
|
+
attr_accessor :env
|
|
8
|
+
attr_accessor :vm
|
|
9
|
+
|
|
10
|
+
DEFAULT = {
|
|
11
|
+
'box' => 'invade/default',
|
|
12
|
+
'url' => nil,
|
|
13
|
+
'hostname' => 'invade.vm'
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
def initialize(env, vm)
|
|
17
|
+
@env = env
|
|
18
|
+
@vm = vm
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def validate
|
|
22
|
+
return DEFAULT unless @vm
|
|
23
|
+
|
|
24
|
+
# BOX NAME (usually repository name of vm on Atlas (http://atlas.hashicorp.com))
|
|
25
|
+
@vm['box'] = Validator.validate_string(
|
|
26
|
+
@vm['box'], 'box', DEFAULT['box']
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# BOX URL
|
|
30
|
+
@vm['url'] = Validator.validate_string(
|
|
31
|
+
@vm['url'], 'url', DEFAULT['url']
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# BOX URL
|
|
35
|
+
@vm['hostname'] = Validator.validate_string(
|
|
36
|
+
@vm['hostname'], 'hostname', DEFAULT['hostname']
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
@vm
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module Invade
|
|
3
|
+
module Validator
|
|
4
|
+
|
|
5
|
+
autoload :Invade, 'vagrant-invade/validator/invade'
|
|
6
|
+
autoload :VM, 'vagrant-invade/validator/vm'
|
|
7
|
+
autoload :Network, 'vagrant-invade/validator/network'
|
|
8
|
+
autoload :Provider, 'vagrant-invade/validator/provider'
|
|
9
|
+
autoload :Provision, 'vagrant-invade/validator/provision'
|
|
10
|
+
autoload :SyncedFolder, 'vagrant-invade/validator/synced_folder'
|
|
11
|
+
autoload :SSH, 'vagrant-invade/validator/ssh'
|
|
12
|
+
autoload :Plugin, 'vagrant-invade/validator/plugin'
|
|
13
|
+
|
|
14
|
+
VALIDATION_ERRORS = 0
|
|
15
|
+
|
|
16
|
+
attr_accessor :env
|
|
17
|
+
attr_accessor :invade
|
|
18
|
+
|
|
19
|
+
@env = nil
|
|
20
|
+
@invade = nil
|
|
21
|
+
|
|
22
|
+
def self.set_env(env)
|
|
23
|
+
@env = env
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.set_invade(env)
|
|
27
|
+
@invade = env[:invade]['invade']
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Validates to BOOLEAN and returns the value at success or a default if not
|
|
31
|
+
def self.validate_boolean(value, name, default)
|
|
32
|
+
|
|
33
|
+
invade = @env[:invade]['invade']
|
|
34
|
+
|
|
35
|
+
if [true, false].include? value
|
|
36
|
+
@env[:ui].success("\t#{name} => #{value}") unless @env[:invade_command_quiet]
|
|
37
|
+
elsif value === nil
|
|
38
|
+
@env[:ui].warn("\t#{name} not set. Use Vagrant default.") unless @env[:invade_command_quiet]
|
|
39
|
+
return default
|
|
40
|
+
else
|
|
41
|
+
@env[:ui].warn("\tWarning: #{name} => #{value} is not a boolean. Set '#{name}' to default value #{default.to_s.upcase}.")
|
|
42
|
+
self.VALIDATION_ERRORS = self.VALIDATION_ERRORS + 1
|
|
43
|
+
return default
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
value
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Validates to STRING and returns the value at success or a default if not
|
|
50
|
+
def self.validate_string(value, name, default)
|
|
51
|
+
|
|
52
|
+
invade = @env[:invade]['invade']
|
|
53
|
+
|
|
54
|
+
if value.is_a? String
|
|
55
|
+
@env[:ui].success("\t#{name} => '#{value}'") unless @env[:invade_command_quiet]
|
|
56
|
+
elsif value === nil
|
|
57
|
+
@env[:ui].warn("\t#{name} not set. Use Vagrant default.") unless @env[:invade_command_quiet]
|
|
58
|
+
return default
|
|
59
|
+
elsif value === ''
|
|
60
|
+
@env[:ui].warn("\tEmpty string is not valid. Set '#{name}' => '#{default}'.") unless @env[:invade_command_quiet]
|
|
61
|
+
return default
|
|
62
|
+
else
|
|
63
|
+
@env[:ui].warn("\tWarning: '#{value}' is not a string. Set to '#{name}' to default value '#{default}'.")
|
|
64
|
+
self.VALIDATION_ERRORS = self.VALIDATION_ERRORS + 1
|
|
65
|
+
return default
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
value
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Validates to INT and returns the value at success or a default if not
|
|
72
|
+
def self.validate_integer(value, name, default)
|
|
73
|
+
|
|
74
|
+
invade = @env[:invade]['invade']
|
|
75
|
+
|
|
76
|
+
if value.is_a? Integer or is_number(value)
|
|
77
|
+
@env[:ui].success("\t#{name} => #{value}") unless @env[:invade_command_quiet]
|
|
78
|
+
elsif value === nil
|
|
79
|
+
@env[:ui].warn("\t#{name} not set. Use Vagrant default.") unless @env[:invade_command_quiet]
|
|
80
|
+
return default
|
|
81
|
+
else
|
|
82
|
+
@env[:ui].warn("\tWarning: '#{value}' is not an integer. Set '#{name}' to default value #{default}.")
|
|
83
|
+
self.VALIDATION_ERRORS = self.VALIDATION_ERRORS + 1
|
|
84
|
+
return default
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
value
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Validates to ARRAY and returns the value at success or a default if not
|
|
91
|
+
def self.validate_array(value, name, default)
|
|
92
|
+
|
|
93
|
+
if value.is_a? Array
|
|
94
|
+
@env[:ui].success("\t#{name} => #{value}") unless @env[:invade_command_quiet]
|
|
95
|
+
elsif value === nil
|
|
96
|
+
@env[:ui].warn("\t#{name} not set. Use Vagrant default.") unless @env[:invade_command_quiet]
|
|
97
|
+
return default
|
|
98
|
+
else
|
|
99
|
+
@env[:ui].warn("\tWarning: '#{value}' is not an array. Set '#{name}' to default value #{default}.")
|
|
100
|
+
self.VALIDATION_ERRORS = self.VALIDATION_ERRORS + 1
|
|
101
|
+
return default
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
value
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def self.is_number(value)
|
|
108
|
+
value.to_f.to_s == value.to_s || value.to_i.to_s == value.to_s
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require 'vagrant'
|
|
5
|
+
rescue LoadError
|
|
6
|
+
Bundler.require(:default, :development)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
require 'vagrant-invade/plugin'
|
|
10
|
+
|
|
11
|
+
module VagrantPlugins
|
|
12
|
+
module Invade
|
|
13
|
+
|
|
14
|
+
autoload :Validator, 'vagrant-invade/validator'
|
|
15
|
+
autoload :Builder, 'vagrant-invade/builder'
|
|
16
|
+
autoload :Generator, 'vagrant-invade/generator'
|
|
17
|
+
|
|
18
|
+
def self.get_invade_config
|
|
19
|
+
#Loading Invade configuration settings from file
|
|
20
|
+
@source_root = VagrantPlugins::Invade.source_root
|
|
21
|
+
invade_config_file = "#{@source_root}/invade.yml"
|
|
22
|
+
|
|
23
|
+
if File.exist?(invade_config_file)
|
|
24
|
+
begin
|
|
25
|
+
return YAML.load_file(invade_config_file)
|
|
26
|
+
rescue SyntaxError => e
|
|
27
|
+
@logger.error e
|
|
28
|
+
fail e
|
|
29
|
+
end
|
|
30
|
+
else
|
|
31
|
+
@config_values = nil
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
@config_values
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.source_root
|
|
38
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
require File.expand_path('../lib/vagrant-invade/version', __FILE__)
|
|
3
|
+
|
|
4
|
+
Gem::Specification.new do |s|
|
|
5
|
+
s.name = 'vagrant-invade'
|
|
6
|
+
s.version = VagrantPlugins::Invade::VERSION
|
|
7
|
+
s.date = '2015-08-10'
|
|
8
|
+
s.summary = "Create a Vagrantfile with a single YAML configuration file"
|
|
9
|
+
s.description = "InVaDE is a plugin that uses a YAML configuration file to build a Vagrantfile from it."
|
|
10
|
+
s.authors = ["Lennart Stein"]
|
|
11
|
+
s.email = 'frgmt@posteo.de'
|
|
12
|
+
s.files = `git ls-files`.split($\)
|
|
13
|
+
s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
14
|
+
s.require_paths = ['lib']
|
|
15
|
+
s.homepage = 'https://github.com/frgmt/vagrant-invade'
|
|
16
|
+
s.license = 'GNU'
|
|
17
|
+
end
|