vagrant-dotvm 0.19.0 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +2 -0
- data/lib/vagrant-dotvm.rb +11 -2
- data/lib/vagrant-dotvm/config/abstractconfig.rb +47 -0
- data/lib/vagrant-dotvm/config/authorizedkey.rb +11 -0
- data/lib/vagrant-dotvm/config/host.rb +10 -0
- data/lib/vagrant-dotvm/config/machine.rb +124 -0
- data/lib/vagrant-dotvm/config/network.rb +38 -0
- data/lib/vagrant-dotvm/config/option.rb +10 -0
- data/lib/vagrant-dotvm/config/provision.rb +19 -0
- data/lib/vagrant-dotvm/config/root.rb +21 -0
- data/lib/vagrant-dotvm/config/route.rb +10 -0
- data/lib/vagrant-dotvm/config/sharedfolder.rb +18 -0
- data/lib/vagrant-dotvm/configinjecter.rb +58 -68
- data/lib/vagrant-dotvm/dotvm.rb +10 -2
- data/lib/vagrant-dotvm/version.rb +1 -1
- metadata +12 -4
- data/lib/vagrant-dotvm/configparser.rb +0 -216
- data/lib/vagrant-dotvm/defaults.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 545c505f26efb5f6cb1c5942a50ef7527c43d475
|
4
|
+
data.tar.gz: 0fb0700ae56254b6c3ce17f00994183687c8e201
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 945f73762362513e6ea469102603b3ef0de865405891173dcafa5b84b3102f1c6bb421b9c91fae0d17deba840f3d7cb56e9b30de90822e6198d59c7cde1d8d8a
|
7
|
+
data.tar.gz: 8682d1684a8eeca8023117d7a36bc939588669e9337fca88357c3d71257ebe6d6b9c536d0aeb32edd2e59c43d8adf608d2538ff70326fce34cd19f60a3315c7b
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# DotVm
|
2
2
|
|
3
|
+
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/krzysztof-magosa/vagrant-dotvm/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/krzysztof-magosa/vagrant-dotvm/?branch=master)
|
4
|
+
|
3
5
|
## What is that?
|
4
6
|
DotVm is vagrant plugin for easier maintenance of multi machine configurations.
|
5
7
|
DotVm joins easy syntax of YAML files with flexibility offered by configuration exploded into several small files.
|
data/lib/vagrant-dotvm.rb
CHANGED
@@ -4,6 +4,15 @@ require 'yaml'
|
|
4
4
|
require 'vagrant-dotvm/plugin'
|
5
5
|
require 'vagrant-dotvm/version'
|
6
6
|
require 'vagrant-dotvm/dotvm'
|
7
|
-
require 'vagrant-dotvm/defaults'
|
8
|
-
require 'vagrant-dotvm/configparser'
|
9
7
|
require 'vagrant-dotvm/configinjecter'
|
8
|
+
|
9
|
+
require 'vagrant-dotvm/config/abstractconfig'
|
10
|
+
require 'vagrant-dotvm/config/root'
|
11
|
+
require 'vagrant-dotvm/config/machine'
|
12
|
+
require 'vagrant-dotvm/config/provision'
|
13
|
+
require 'vagrant-dotvm/config/authorizedkey'
|
14
|
+
require 'vagrant-dotvm/config/host'
|
15
|
+
require 'vagrant-dotvm/config/sharedfolder'
|
16
|
+
require 'vagrant-dotvm/config/option'
|
17
|
+
require 'vagrant-dotvm/config/route'
|
18
|
+
require 'vagrant-dotvm/config/network'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Dotvm
|
3
|
+
module Config
|
4
|
+
class AbstractConfig
|
5
|
+
def populate(data)
|
6
|
+
data.each do |key, value|
|
7
|
+
if respond_to?("populate_#{key}")
|
8
|
+
m = method("populate_#{key}")
|
9
|
+
elsif respond_to? "#{key}="
|
10
|
+
m = method("#{key}=")
|
11
|
+
else
|
12
|
+
raise "Invalid configuration option: #{key}."
|
13
|
+
end
|
14
|
+
|
15
|
+
m.call(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def replace_vars(vars, target)
|
20
|
+
if target.kind_of?(Array)
|
21
|
+
target.each do |item|
|
22
|
+
replace_vars(vars, item)
|
23
|
+
end
|
24
|
+
elsif target.kind_of?(Hash)
|
25
|
+
target.each do |name, item|
|
26
|
+
replace_vars(vars, item)
|
27
|
+
end
|
28
|
+
elsif target.kind_of?(String)
|
29
|
+
vars.each do |k, v|
|
30
|
+
pattern = "%#{k}%"
|
31
|
+
target.gsub! pattern, v
|
32
|
+
end
|
33
|
+
elsif target.kind_of?(AbstractConfig)
|
34
|
+
target.replace_vars!(vars)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def replace_vars!(vars)
|
39
|
+
instance_variables.each do |var_name|
|
40
|
+
var = instance_variable_get(var_name)
|
41
|
+
replace_vars(vars, var)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Dotvm
|
3
|
+
module Config
|
4
|
+
class Machine < AbstractConfig
|
5
|
+
attr_accessor :nick
|
6
|
+
attr_accessor :name
|
7
|
+
attr_accessor :box
|
8
|
+
attr_accessor :memory
|
9
|
+
attr_accessor :cpus
|
10
|
+
attr_accessor :cpucap
|
11
|
+
attr_accessor :primary
|
12
|
+
attr_accessor :natnet
|
13
|
+
attr_accessor :networks
|
14
|
+
attr_accessor :routes
|
15
|
+
attr_accessor :provision
|
16
|
+
attr_accessor :groups
|
17
|
+
attr_accessor :authorized_keys
|
18
|
+
attr_accessor :boot_timeout
|
19
|
+
attr_accessor :box_check_update
|
20
|
+
attr_accessor :box_version
|
21
|
+
attr_accessor :graceful_halt_timeout
|
22
|
+
attr_accessor :post_up_message
|
23
|
+
attr_accessor :autostart
|
24
|
+
attr_accessor :hosts
|
25
|
+
attr_accessor :options
|
26
|
+
attr_accessor :shared_folders
|
27
|
+
|
28
|
+
def initialize()
|
29
|
+
@primary = false
|
30
|
+
@networks = []
|
31
|
+
@routes = []
|
32
|
+
@provision = []
|
33
|
+
@groups = []
|
34
|
+
@authorized_keys = []
|
35
|
+
@hosts = []
|
36
|
+
@options = {
|
37
|
+
:virtualbox => [],
|
38
|
+
}
|
39
|
+
@shared_folders = []
|
40
|
+
|
41
|
+
populate_shared_folders(
|
42
|
+
[
|
43
|
+
{
|
44
|
+
"host" => "%project.host%",
|
45
|
+
"guest" => "%project.guest%",
|
46
|
+
"disabled" => false,
|
47
|
+
"create" => false,
|
48
|
+
"type" => nil,
|
49
|
+
}
|
50
|
+
]
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
def populate_networks(data)
|
55
|
+
data.to_a.each do |conf|
|
56
|
+
item = Network.new
|
57
|
+
item.populate conf
|
58
|
+
@networks << item
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def populate_routes(data)
|
63
|
+
data.to_a.each do |conf|
|
64
|
+
item = Route.new
|
65
|
+
item.populate conf
|
66
|
+
@routes << item
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def populate_provision(data)
|
71
|
+
data.to_a.each do |conf|
|
72
|
+
item = Provision.new
|
73
|
+
item.populate conf
|
74
|
+
@provision << item
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def populate_groups(data)
|
79
|
+
data.to_a.each do |item|
|
80
|
+
@groups << item
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def populate_authorized_keys(data)
|
85
|
+
data.to_a.each do |conf|
|
86
|
+
item = AuthorizedKey.new
|
87
|
+
item.populate conf
|
88
|
+
@authorized_keys << item
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def populate_hosts(data)
|
93
|
+
data.to_a.each do |conf|
|
94
|
+
item = Host.new
|
95
|
+
item.populate conf
|
96
|
+
@hosts << item
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def populate_options(data)
|
101
|
+
data.to_h.each do |key, confs|
|
102
|
+
key = key.to_sym
|
103
|
+
raise "Invalid options category: #{key}." unless @options.has_key?(key)
|
104
|
+
|
105
|
+
confs.to_a.each do |conf|
|
106
|
+
item = Option.new
|
107
|
+
item.populate conf
|
108
|
+
@options[key] << item
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def populate_shared_folders(data)
|
114
|
+
data.to_a.each do |conf|
|
115
|
+
item = SharedFolder.new
|
116
|
+
item.populate conf
|
117
|
+
@shared_folders << item
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Dotvm
|
3
|
+
module Config
|
4
|
+
class Network < AbstractConfig
|
5
|
+
attr_reader :net
|
6
|
+
attr_accessor :type
|
7
|
+
attr_accessor :ip
|
8
|
+
attr_accessor :mask # netmask
|
9
|
+
attr_accessor :interface
|
10
|
+
attr_accessor :guest
|
11
|
+
attr_accessor :host
|
12
|
+
attr_accessor :protocol
|
13
|
+
attr_accessor :bridge
|
14
|
+
|
15
|
+
def initialize()
|
16
|
+
@net = :private_network
|
17
|
+
end
|
18
|
+
|
19
|
+
def net=(value)
|
20
|
+
nets = {
|
21
|
+
"private_network" => :private_network,
|
22
|
+
"private" => :private_network,
|
23
|
+
"public_network" => :public_network,
|
24
|
+
"public" => :public_network,
|
25
|
+
"forwarded_port" => :forwarded_port,
|
26
|
+
"port" => :forwarded_port,
|
27
|
+
}
|
28
|
+
|
29
|
+
@net = nets[value]
|
30
|
+
end
|
31
|
+
|
32
|
+
def netmask=(value)
|
33
|
+
@mask = value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Dotvm
|
3
|
+
module Config
|
4
|
+
class Provision < AbstractConfig
|
5
|
+
attr_accessor :type
|
6
|
+
attr_accessor :source
|
7
|
+
attr_accessor :destination
|
8
|
+
attr_accessor :inline
|
9
|
+
attr_accessor :path
|
10
|
+
attr_accessor :args
|
11
|
+
attr_accessor :module_path
|
12
|
+
attr_accessor :manifests_path
|
13
|
+
attr_accessor :manifest_file
|
14
|
+
attr_accessor :privileged
|
15
|
+
attr_accessor :run
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Dotvm
|
3
|
+
module Config
|
4
|
+
class Root < AbstractConfig
|
5
|
+
attr_reader :machines
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
@machines = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def populate_machines(data)
|
12
|
+
data.to_a.each do |item|
|
13
|
+
machine = Machine.new
|
14
|
+
machine.populate item
|
15
|
+
@machines << machine
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Dotvm
|
3
|
+
module Config
|
4
|
+
class SharedFolder < AbstractConfig
|
5
|
+
attr_accessor :host
|
6
|
+
attr_accessor :guest
|
7
|
+
attr_accessor :disabled
|
8
|
+
attr_accessor :create
|
9
|
+
attr_accessor :type
|
10
|
+
|
11
|
+
def initialize()
|
12
|
+
@disabled = false
|
13
|
+
@create = false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -7,97 +7,87 @@ module VagrantPlugins
|
|
7
7
|
# General settings
|
8
8
|
vc.ssh.forward_x11 = true
|
9
9
|
|
10
|
-
config
|
11
|
-
vc.vm.define machine_cfg
|
12
|
-
primary: machine_cfg
|
13
|
-
autostart: machine_cfg
|
14
|
-
machine.vm.box = machine_cfg
|
15
|
-
machine.vm.hostname = machine_cfg
|
16
|
-
machine.vm.boot_timeout = machine_cfg
|
17
|
-
machine.vm.box_check_update = machine_cfg
|
18
|
-
machine.vm.box_version = machine_cfg
|
19
|
-
machine.vm.graceful_halt_timeout = machine_cfg
|
20
|
-
machine.vm.post_up_message = machine_cfg
|
10
|
+
config.machines.each do |machine_cfg|
|
11
|
+
vc.vm.define machine_cfg.nick,
|
12
|
+
primary: machine_cfg.primary,
|
13
|
+
autostart: machine_cfg.autostart do |machine|
|
14
|
+
machine.vm.box = machine_cfg.box
|
15
|
+
machine.vm.hostname = machine_cfg.name
|
16
|
+
machine.vm.boot_timeout = machine_cfg.boot_timeout
|
17
|
+
machine.vm.box_check_update = machine_cfg.box_check_update
|
18
|
+
machine.vm.box_version = machine_cfg.box_version
|
19
|
+
machine.vm.graceful_halt_timeout = machine_cfg.graceful_halt_timeout
|
20
|
+
machine.vm.post_up_message = machine_cfg.post_up_message
|
21
21
|
|
22
22
|
machine.vm.provider "virtualbox" do |vb|
|
23
|
-
vb.customize ["modifyvm", :id, "--memory",
|
24
|
-
vb.customize ["modifyvm", :id, "--cpus",
|
25
|
-
vb.customize ["modifyvm", :id, "--cpuexecutioncap", machine_cfg
|
26
|
-
vb.customize ["modifyvm", :id, "--natnet1",
|
23
|
+
vb.customize ["modifyvm", :id, "--memory", machine_cfg.memory] unless machine_cfg.memory.nil?
|
24
|
+
vb.customize ["modifyvm", :id, "--cpus", machine_cfg.cpus] unless machine_cfg.cpus.nil?
|
25
|
+
vb.customize ["modifyvm", :id, "--cpuexecutioncap", machine_cfg.cpucap] unless machine_cfg.cpucap.nil?
|
26
|
+
vb.customize ["modifyvm", :id, "--natnet1", machine_cfg.natnet] unless machine_cfg.natnet.nil?
|
27
27
|
|
28
|
-
machine_cfg
|
29
|
-
vb.customize ["modifyvm", :id, option
|
28
|
+
machine_cfg.options[:virtualbox].each do |option|
|
29
|
+
vb.customize ["modifyvm", :id, option.name, option.value]
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
machine_cfg
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
bridge: net[:bridge]
|
46
|
-
elsif net[:net] == :forwarded_port
|
47
|
-
machine.vm.network net[:net],
|
48
|
-
guest: net[:guest],
|
49
|
-
host: net[:host],
|
50
|
-
protocol: net[:protocol]
|
51
|
-
end
|
33
|
+
machine_cfg.networks.each do |net|
|
34
|
+
hash = {}
|
35
|
+
hash[:type] = net.type unless net.type.nil?
|
36
|
+
hash[:ip] = net.ip unless net.ip.nil?
|
37
|
+
hash[:netmask] = net.mask unless net.mask.nil?
|
38
|
+
hash[:virtualbox__intnet] = net.interface unless net.interface.nil?
|
39
|
+
hash[:guest] = net.guest unless net.guest.nil?
|
40
|
+
hash[:host] = net.host unless net.host.nil?
|
41
|
+
hash[:protocol] = net.protocol unless net.protocol.nil?
|
42
|
+
hash[:bridge] = net.bridge unless net.bridge.nil?
|
43
|
+
|
44
|
+
machine.vm.network net.net, **hash
|
52
45
|
end
|
53
46
|
|
54
|
-
machine_cfg
|
47
|
+
machine_cfg.routes.each do |route|
|
55
48
|
machine.vm.provision "shell", run: "always" do |s|
|
56
49
|
s.path = File.dirname(__FILE__) + "/../../utils/setup_route.sh"
|
57
|
-
s.args = [route
|
50
|
+
s.args = [route.destination, route.gateway]
|
58
51
|
s.privileged = true
|
59
52
|
end
|
60
53
|
end
|
61
54
|
|
62
|
-
machine_cfg
|
55
|
+
machine_cfg.hosts.each do |host|
|
63
56
|
machine.vm.provision "shell", run: "always" do |s|
|
64
57
|
s.path = File.dirname(__FILE__) + "/../../utils/add_host.sh"
|
65
|
-
s.args = [host
|
58
|
+
s.args = [host.ip, host.host]
|
66
59
|
s.privileged = true
|
67
60
|
end
|
68
61
|
end
|
69
62
|
|
70
|
-
machine_cfg
|
71
|
-
machine.vm.provision provision
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
p.module_path = provision[:module_path]
|
82
|
-
p.manifest_file = provision[:manifest_file]
|
83
|
-
p.manifests_path = provision[:manifests_path]
|
84
|
-
end
|
63
|
+
machine_cfg.provision.each do |provision|
|
64
|
+
machine.vm.provision provision.type, run: provision.run do |p|
|
65
|
+
p.path = provision.path unless provision.path.nil?
|
66
|
+
p.inline = provision.inline unless provision.inline.nil?
|
67
|
+
p.args = provision.args unless provision.args.nil?
|
68
|
+
p.privileged = provision.privileged unless provision.privileged.nil?
|
69
|
+
p.source = provision.source unless provision.source.nil?
|
70
|
+
p.destination = provision.destination unless provision.destination.nil?
|
71
|
+
p.module_path = provision.module_path unless provision.module_path.nil?
|
72
|
+
p.manifest_file = provision.manifest_file unless provision.manifest_file.nil?
|
73
|
+
p.manifests_path = provision.manifests_path unless provision.manifests_path.nil?
|
85
74
|
end
|
86
75
|
end
|
87
76
|
|
88
|
-
machine_cfg
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
77
|
+
machine_cfg.shared_folders.each do |folder|
|
78
|
+
hash = {}
|
79
|
+
hash[:disabled] = folder.disabled unless folder.disabled.nil?
|
80
|
+
hash[:create] = folder.create unless folder.create.nil?
|
81
|
+
hash[:type] = folder.type unless folder.type.nil?
|
82
|
+
|
83
|
+
machine.vm.synced_folder folder.host, folder.guest, **hash
|
94
84
|
end
|
95
85
|
|
96
|
-
machine_cfg
|
97
|
-
if key
|
98
|
-
pubkey = File.readlines(File.expand_path(key
|
99
|
-
elsif key
|
100
|
-
pubkey = key
|
86
|
+
machine_cfg.authorized_keys.each do |key|
|
87
|
+
if key.type == "file"
|
88
|
+
pubkey = File.readlines(File.expand_path(key.path)).first.strip
|
89
|
+
elsif key.type == "static"
|
90
|
+
pubkey = key.key
|
101
91
|
end
|
102
92
|
|
103
93
|
machine.vm.provision "shell" do |s|
|
@@ -110,9 +100,9 @@ module VagrantPlugins
|
|
110
100
|
if Vagrant.has_plugin?("vagrant-group")
|
111
101
|
vc.group.groups = {} unless vc.group.groups.kind_of?(Hash)
|
112
102
|
|
113
|
-
machine_cfg
|
103
|
+
machine_cfg.groups.each do |group|
|
114
104
|
vc.group.groups[group] = [] unless vc.group.groups.has_key?(group)
|
115
|
-
vc.group.groups[group] << machine_cfg
|
105
|
+
vc.group.groups[group] << machine_cfg.nick
|
116
106
|
end
|
117
107
|
end
|
118
108
|
end
|
data/lib/vagrant-dotvm/dotvm.rb
CHANGED
@@ -26,8 +26,16 @@ module VagrantPlugins
|
|
26
26
|
vars['env.' + name] = value
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
begin
|
30
|
+
conf = Config::Root.new
|
31
|
+
conf.populate yaml
|
32
|
+
conf.replace_vars! vars
|
33
|
+
rescue Exception => e
|
34
|
+
file = fname[(@path.length+"/projects/".length)..-1]
|
35
|
+
raise Vagrant::Errors::VagrantError.new, "DotVM: #{file}: #{e.message}"
|
36
|
+
end
|
37
|
+
|
38
|
+
configs << conf
|
31
39
|
end
|
32
40
|
|
33
41
|
return configs
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-dotvm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Krzysztof Magosa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,9 +60,17 @@ files:
|
|
60
60
|
- examples/config/projects/playground/main.yaml
|
61
61
|
- examples/config/projects/playground/modules/.gitkeep
|
62
62
|
- lib/vagrant-dotvm.rb
|
63
|
+
- lib/vagrant-dotvm/config/abstractconfig.rb
|
64
|
+
- lib/vagrant-dotvm/config/authorizedkey.rb
|
65
|
+
- lib/vagrant-dotvm/config/host.rb
|
66
|
+
- lib/vagrant-dotvm/config/machine.rb
|
67
|
+
- lib/vagrant-dotvm/config/network.rb
|
68
|
+
- lib/vagrant-dotvm/config/option.rb
|
69
|
+
- lib/vagrant-dotvm/config/provision.rb
|
70
|
+
- lib/vagrant-dotvm/config/root.rb
|
71
|
+
- lib/vagrant-dotvm/config/route.rb
|
72
|
+
- lib/vagrant-dotvm/config/sharedfolder.rb
|
63
73
|
- lib/vagrant-dotvm/configinjecter.rb
|
64
|
-
- lib/vagrant-dotvm/configparser.rb
|
65
|
-
- lib/vagrant-dotvm/defaults.rb
|
66
74
|
- lib/vagrant-dotvm/dotvm.rb
|
67
75
|
- lib/vagrant-dotvm/plugin.rb
|
68
76
|
- lib/vagrant-dotvm/version.rb
|
@@ -1,216 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module Dotvm
|
3
|
-
class ConfigParser
|
4
|
-
|
5
|
-
def initialize(vars = {})
|
6
|
-
@vars = vars
|
7
|
-
end
|
8
|
-
|
9
|
-
private
|
10
|
-
def replace_vars(value)
|
11
|
-
if value.kind_of?(Hash)
|
12
|
-
result = {}
|
13
|
-
value.each do |key, val|
|
14
|
-
result[key] = replace_vars(val)
|
15
|
-
end
|
16
|
-
elsif value.kind_of?(Array)
|
17
|
-
result = value.map do |val|
|
18
|
-
replace_vars(val)
|
19
|
-
end
|
20
|
-
elsif value.kind_of?(String)
|
21
|
-
result = value.dup
|
22
|
-
|
23
|
-
@vars.each do |k, v|
|
24
|
-
pattern = "%#{k}%"
|
25
|
-
result.gsub! pattern, v
|
26
|
-
end
|
27
|
-
elsif !value.respond_to?(:duplicable) or !value.duplicable?
|
28
|
-
result = value
|
29
|
-
else
|
30
|
-
result = value.dup
|
31
|
-
end
|
32
|
-
|
33
|
-
return result
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
def parse_machine(machine)
|
38
|
-
{
|
39
|
-
:nick => machine["nick"],
|
40
|
-
:name => machine["name"],
|
41
|
-
:box => machine["box"],
|
42
|
-
:memory => machine["memory"],
|
43
|
-
:cpus => machine["cpus"],
|
44
|
-
:cpucap => machine["cpucap"],
|
45
|
-
:primary => coalesce(machine["primary"], false),
|
46
|
-
:natnet => machine["natnet"],
|
47
|
-
:networks => [],
|
48
|
-
:routes => [],
|
49
|
-
:provision => [],
|
50
|
-
:groups => [],
|
51
|
-
:authorized_keys => [],
|
52
|
-
:boot_timeout => coalesce(machine["boot_timeout"], Defaults::BOOT_TIMEOUT),
|
53
|
-
:box_check_update => coalesce(machine["box_check_update"], Defaults::BOX_CHECK_UPDATE),
|
54
|
-
:box_version => coalesce(machine["box_version"], Defaults::BOX_VERSION),
|
55
|
-
:graceful_halt_timeout => coalesce(machine["graceful_halt_timeout"], Defaults::GRACEFUL_HALT_TIMEOUT),
|
56
|
-
:post_up_message => machine["post_up_message"],
|
57
|
-
:autostart => coalesce(machine["autostart"], true),
|
58
|
-
:hosts => [],
|
59
|
-
:folders => [
|
60
|
-
{
|
61
|
-
:host => "%project.host%",
|
62
|
-
:guest => "%project.guest%",
|
63
|
-
:disabled => false,
|
64
|
-
:create => false,
|
65
|
-
:type => nil,
|
66
|
-
}
|
67
|
-
],
|
68
|
-
:options => {
|
69
|
-
:virtualbox => [],
|
70
|
-
},
|
71
|
-
}
|
72
|
-
end
|
73
|
-
|
74
|
-
private
|
75
|
-
def parse_net(net)
|
76
|
-
nets = {
|
77
|
-
"private_network" => :private_network,
|
78
|
-
"private" => :private_network,
|
79
|
-
"public_network" => :public_network,
|
80
|
-
"public" => :public_network,
|
81
|
-
"forwarded_port" => :forwarded_port,
|
82
|
-
"port" => :forwarded_port,
|
83
|
-
}
|
84
|
-
|
85
|
-
{
|
86
|
-
:net => nets.has_key?(net["net"]) ? nets[net["net"]] : Defaults::NET,
|
87
|
-
:type => coalesce(net["type"], Defaults::NET_TYPE),
|
88
|
-
:ip => net["ip"],
|
89
|
-
:mask => coalesce(net["mask"], net["netmask"], Defaults::NETMASK),
|
90
|
-
:interface => net["interface"],
|
91
|
-
:guest => net["guest"],
|
92
|
-
:host => net["host"],
|
93
|
-
:protocol => coalesce(net["protocol"], Defaults::PROTOCOL),
|
94
|
-
:bridge => net["bridge"],
|
95
|
-
}
|
96
|
-
end
|
97
|
-
|
98
|
-
private
|
99
|
-
def parse_route(route)
|
100
|
-
{
|
101
|
-
:destination => route["destination"],
|
102
|
-
:gateway => route["gateway"],
|
103
|
-
}
|
104
|
-
end
|
105
|
-
|
106
|
-
private
|
107
|
-
def parse_provision(prv)
|
108
|
-
{
|
109
|
-
:type => prv["type"],
|
110
|
-
:source => prv["source"],
|
111
|
-
:destination => prv["destination"],
|
112
|
-
:inline => prv["inline"],
|
113
|
-
:path => prv["path"],
|
114
|
-
:args => prv["args"],
|
115
|
-
:module_path => prv["module_path"],
|
116
|
-
:manifests_path => prv["manifests_path"],
|
117
|
-
:manifest_file => prv["manifest_file"],
|
118
|
-
:privileged => prv["privileged"].nil? ? true : prv["privileged"],
|
119
|
-
:run => prv["run"],
|
120
|
-
}
|
121
|
-
end
|
122
|
-
|
123
|
-
private
|
124
|
-
def parse_folder(folder)
|
125
|
-
{
|
126
|
-
:host => folder["host"],
|
127
|
-
:guest => folder["guest"],
|
128
|
-
:disabled => coalesce(folder["disabled"], false),
|
129
|
-
:create => coalesce(folder["create"], false),
|
130
|
-
:type => folder["type"],
|
131
|
-
}
|
132
|
-
end
|
133
|
-
|
134
|
-
private
|
135
|
-
def parse_authorized_key(key)
|
136
|
-
{
|
137
|
-
:type => key["type"],
|
138
|
-
:path => key["path"],
|
139
|
-
:key => key["key"],
|
140
|
-
}
|
141
|
-
end
|
142
|
-
|
143
|
-
private
|
144
|
-
def parse_option(option)
|
145
|
-
{
|
146
|
-
:name => option["name"],
|
147
|
-
:value => option["value"],
|
148
|
-
}
|
149
|
-
end
|
150
|
-
|
151
|
-
private
|
152
|
-
def parse_host(host)
|
153
|
-
{
|
154
|
-
:ip => host["ip"],
|
155
|
-
:host => host["host"],
|
156
|
-
}
|
157
|
-
end
|
158
|
-
|
159
|
-
public
|
160
|
-
def parse(yaml)
|
161
|
-
config = {
|
162
|
-
:machines => []
|
163
|
-
}
|
164
|
-
|
165
|
-
yaml["machines"].each do |machine|
|
166
|
-
item = parse_machine(machine)
|
167
|
-
|
168
|
-
machine["networks"].to_a.each do |net|
|
169
|
-
item[:networks] << parse_net(net)
|
170
|
-
end
|
171
|
-
|
172
|
-
machine["routes"].to_a.each do |route|
|
173
|
-
item[:routes] << parse_route(route)
|
174
|
-
end
|
175
|
-
|
176
|
-
machine["provision"].to_a.each do |prv|
|
177
|
-
item[:provision] << parse_provision(prv)
|
178
|
-
end
|
179
|
-
|
180
|
-
machine["shared_folders"].to_a.each do |folder|
|
181
|
-
item[:folders] << parse_folder(folder)
|
182
|
-
end
|
183
|
-
|
184
|
-
machine["groups"].to_a.each do |group|
|
185
|
-
item[:groups] << group
|
186
|
-
end
|
187
|
-
|
188
|
-
machine["authorized_keys"].to_a.each do |key|
|
189
|
-
item[:authorized_keys] << parse_authorized_key(key)
|
190
|
-
end
|
191
|
-
|
192
|
-
machine["options"].to_h["virtualbox"].to_a.each do |option|
|
193
|
-
item[:options][:virtualbox] << parse_option(option)
|
194
|
-
end
|
195
|
-
|
196
|
-
machine["hosts"].to_a.each do |host|
|
197
|
-
item[:hosts] << parse_host(host)
|
198
|
-
end
|
199
|
-
|
200
|
-
config[:machines] << item
|
201
|
-
end
|
202
|
-
|
203
|
-
replace_vars(config)
|
204
|
-
end
|
205
|
-
|
206
|
-
private
|
207
|
-
def coalesce(*args)
|
208
|
-
args.each do |val|
|
209
|
-
next if val.nil?
|
210
|
-
return val
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
end
|
215
|
-
end
|
216
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module Dotvm
|
3
|
-
class Defaults
|
4
|
-
NET = :private_network
|
5
|
-
NET_TYPE = "static"
|
6
|
-
NETMASK = "255.255.255.0"
|
7
|
-
PROTOCOL = "tcp"
|
8
|
-
BOOT_TIMEOUT = 300
|
9
|
-
BOX_CHECK_UPDATE = true
|
10
|
-
BOX_VERSION = ">= 0"
|
11
|
-
GRACEFUL_HALT_TIMEOUT = 60
|
12
|
-
end # Defaults
|
13
|
-
end # Dotvm
|
14
|
-
end # VagrantPlugins
|