vagrant-config_builder 0.15.1 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +18 -4
- data/CHANGELOG +44 -0
- data/Gemfile +3 -4
- data/lib/config_builder/model/base.rb +182 -8
- data/lib/config_builder/model/network/forwarded_port.rb +34 -13
- data/lib/config_builder/model/network/private_network.rb +17 -1
- data/lib/config_builder/model/network/public_network.rb +39 -0
- data/lib/config_builder/model/nfs.rb +33 -0
- data/lib/config_builder/model/provider/aws.rb +16 -39
- data/lib/config_builder/model/provider/azure.rb +11 -33
- data/lib/config_builder/model/provider/base.rb +37 -0
- data/lib/config_builder/model/provider/libvirt.rb +33 -39
- data/lib/config_builder/model/provider/openstack.rb +69 -0
- data/lib/config_builder/model/provider/openstack_plugin.rb +46 -0
- data/lib/config_builder/model/provider/softlayer.rb +85 -0
- data/lib/config_builder/model/provider/virtualbox.rb +84 -17
- data/lib/config_builder/model/provider/vmware.rb +6 -4
- data/lib/config_builder/model/provider/vsphere.rb +33 -15
- data/lib/config_builder/model/provisioner/base.rb +33 -0
- data/lib/config_builder/model/provisioner/file.rb +1 -10
- data/lib/config_builder/model/provisioner/puppet.rb +32 -22
- data/lib/config_builder/model/provisioner/puppet_server.rb +21 -15
- data/lib/config_builder/model/provisioner/shell.rb +28 -10
- data/lib/config_builder/model/root.rb +28 -4
- data/lib/config_builder/model/ssh.rb +29 -11
- data/lib/config_builder/model/synced_folder.rb +83 -14
- data/lib/config_builder/model/vm.rb +111 -52
- data/lib/config_builder/model/winrm.rb +27 -7
- data/lib/config_builder/model.rb +9 -1
- data/lib/config_builder/model_delegator.rb +5 -24
- data/lib/config_builder/version.rb +1 -1
- data/spec/integration/vagrant/root_config_spec.rb +89 -0
- data/spec/integration/vagrant/vm_config_spec.rb +101 -0
- data/spec/integration/vagrant/vm_provider_spec.rb +57 -0
- data/spec/integration/vagrant/vm_provisioner_spec.rb +90 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/{config_builder → unit}/filter/boxes_spec.rb +0 -0
- data/spec/{config_builder → unit}/filter/roles_spec.rb +0 -0
- data/spec/{config_builder → unit}/loader/yaml_spec.rb +0 -0
- data/spec/unit/model/base_spec.rb +122 -0
- data/spec/{config_builder → unit}/model/provider/vmware_fusion_spec.rb +6 -5
- data/templates/locales/en.yml +4 -0
- metadata +33 -20
@@ -1,49 +1,59 @@
|
|
1
1
|
# @see http://docs.vagrantup.com/v2/provisioning/puppet_apply.html
|
2
|
-
class ConfigBuilder::Model::Provisioner::Puppet < ConfigBuilder::Model::Base
|
2
|
+
class ConfigBuilder::Model::Provisioner::Puppet < ConfigBuilder::Model::Provisioner::Base
|
3
|
+
|
4
|
+
# @!attribute [rw] binary_path
|
5
|
+
# @return [String] The path to Puppet's `bin` directory.
|
6
|
+
def_model_attribute :binary_path
|
3
7
|
|
4
8
|
# @!attribute [rw] manifests_path
|
5
9
|
# @return [String] The path to the puppet manifests.
|
6
|
-
|
10
|
+
def_model_attribute :manifests_path
|
7
11
|
|
8
12
|
# @!attribute [rw] manifest_file
|
9
13
|
# @return [String] The name of the manifest to apply
|
10
|
-
|
14
|
+
def_model_attribute :manifest_file
|
11
15
|
|
12
16
|
# @!attribute [rw] module_path
|
13
17
|
# @return [String] A colon separated set of filesystem paths for Puppet
|
14
|
-
|
18
|
+
def_model_attribute :module_path
|
15
19
|
|
16
20
|
# @!attribute [rw] facter
|
17
21
|
# @return [Hash] A hash of values to use as facts
|
18
|
-
|
22
|
+
def_model_attribute :facter
|
19
23
|
|
20
24
|
# @!attribute [rw] options
|
21
25
|
# @return [String] An arbitrary set of arguments for the `puppet` command
|
22
|
-
|
26
|
+
def_model_attribute :options
|
23
27
|
|
24
28
|
# @!attribute [rw] hiera_config_path
|
25
29
|
# @return [String] Path to the Hiera configuration file stored on the host
|
26
30
|
# @since 0.15.0
|
27
|
-
|
31
|
+
def_model_attribute :hiera_config_path
|
28
32
|
|
29
33
|
# @!attribute [rw] working_directory
|
30
34
|
# @return [String] Path in the guest that will be the working directory when Puppet is executed
|
31
35
|
# @since 0.15.0
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
36
|
+
def_model_attribute :working_directory
|
37
|
+
|
38
|
+
# @!attribute [rw] environment
|
39
|
+
# @return [String] Name of the Puppet environment.
|
40
|
+
def_model_attribute :environment
|
41
|
+
|
42
|
+
# @!attribute [rw] environment_path
|
43
|
+
# @return [String] Path to the directory that contains environment files on the host disk.
|
44
|
+
def_model_attribute :environment_path
|
45
|
+
|
46
|
+
# @!attribute [rw] synced_folder_type
|
47
|
+
# @return [String] The type of synced folders to use when sharing the data required for the provisioner to work properly.
|
48
|
+
def_model_attribute :synced_folder_type
|
49
|
+
|
50
|
+
# @!attribute [rw] synced_folder_args
|
51
|
+
# @return [Array<String>] Arguments that are passed to the folder sync.
|
52
|
+
def_model_attribute :synced_folder_args
|
53
|
+
|
54
|
+
# @!attribute [rw] temp_dir
|
55
|
+
# @return [String] The directory where the data associated with the Puppet run will be stored on the guest machine.
|
56
|
+
def_model_attribute :temp_dir
|
47
57
|
|
48
58
|
ConfigBuilder::Model::Provisioner.register('puppet', self)
|
49
59
|
end
|
@@ -1,27 +1,33 @@
|
|
1
1
|
# @see http://docs.vagrantup.com/v2/provisioning/puppet_agent.html
|
2
|
-
class ConfigBuilder::Model::Provisioner::PuppetServer < ConfigBuilder::Model::Base
|
2
|
+
class ConfigBuilder::Model::Provisioner::PuppetServer < ConfigBuilder::Model::Provisioner::Base
|
3
|
+
|
4
|
+
# @!attribute [rw] binary_path
|
5
|
+
# @return [String]
|
6
|
+
def_model_attribute :binary_path
|
7
|
+
|
8
|
+
# @!attribute [rw] client_cert_path
|
9
|
+
# @return [String]
|
10
|
+
def_model_attribute :client_cert_path
|
11
|
+
|
12
|
+
# @!attribute [rw] client_private_key_path
|
13
|
+
# @return [String]
|
14
|
+
def_model_attribute :client_private_key_path
|
15
|
+
|
16
|
+
# @!attribute [rw] facter
|
17
|
+
# @return [Hash]
|
18
|
+
def_model_attribute :facter
|
3
19
|
|
4
20
|
# @!attribute [rw] puppet_server
|
5
21
|
# @return [String]
|
6
|
-
|
22
|
+
def_model_attribute :puppet_server
|
7
23
|
|
8
|
-
# @!attribute [rw]
|
24
|
+
# @!attribute [rw] puppet_node
|
9
25
|
# @return [String]
|
10
|
-
|
26
|
+
def_model_attribute :puppet_node
|
11
27
|
|
12
28
|
# @!attribute [rw] options
|
13
29
|
# @return [String]
|
14
|
-
|
15
|
-
|
16
|
-
def to_proc
|
17
|
-
Proc.new do |vm_config|
|
18
|
-
vm_config.provision :puppet_server do |puppet_config|
|
19
|
-
with_attr(:puppet_server) { |val| puppet_config.puppet_server = val }
|
20
|
-
with_attr(:node_name) { |val| puppet_config.node_name = val }
|
21
|
-
with_attr(:options) { |val| puppet_config.options = val }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
30
|
+
def_model_attribute :options
|
25
31
|
|
26
32
|
ConfigBuilder::Model::Provisioner.register('puppet_server', self)
|
27
33
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# @see http://docs.vagrantup.com/v2/provisioning/shell.html
|
2
|
-
class ConfigBuilder::Model::Provisioner::Shell < ConfigBuilder::Model::Base
|
2
|
+
class ConfigBuilder::Model::Provisioner::Shell < ConfigBuilder::Model::Provisioner::Base
|
3
3
|
|
4
4
|
# @!attribute [rw] inline
|
5
5
|
# @return [String] The inline shell command to run
|
@@ -13,15 +13,33 @@ class ConfigBuilder::Model::Provisioner::Shell < ConfigBuilder::Model::Base
|
|
13
13
|
# @return [String] A string acting as an argument vector to the command.
|
14
14
|
def_model_attribute :args
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
# @!attribute [rw] env
|
17
|
+
# @return [Hash] A hash of values passed in as environment variables to the script.
|
18
|
+
def_model_attribute :env
|
19
|
+
|
20
|
+
# @!attribute [rw] binary
|
21
|
+
# @return [Boolean] Whether Windows line endings are replaced with Unix line endings.
|
22
|
+
def_model_attribute :binary
|
23
|
+
|
24
|
+
# @!attribute [rw] privileged
|
25
|
+
# @return [Boolean] Specifies whether to execute the script as a privileged user or not.
|
26
|
+
def_model_attribute :privileged
|
27
|
+
|
28
|
+
# @!attribute [rw] upload_path
|
29
|
+
# @return [String] The remote path where the shell script will be uploaded to.
|
30
|
+
def_model_attribute :upload_path
|
31
|
+
|
32
|
+
# @!attribute [rw] keep_color
|
33
|
+
# @return [Boolean] Whether Vagrant should use coloring for the output.
|
34
|
+
def_model_attribute :keep_color
|
35
|
+
|
36
|
+
# @!attribute [rw] powershell_args
|
37
|
+
# @return [String] Extra arguments to pass to PowerShell if you are provisioning with PowerShell on Windows.
|
38
|
+
def_model_attribute :powershell_args
|
39
|
+
|
40
|
+
# @!attribute [rw] powershell_elevated_interactive
|
41
|
+
# @return [Boolean] Whether to run an elevated script in interactive mode on Windows.
|
42
|
+
def_model_attribute :powershell_elevated_interactive
|
25
43
|
|
26
44
|
ConfigBuilder::Model::Provisioner.register('shell', self)
|
27
45
|
end
|
@@ -2,11 +2,9 @@
|
|
2
2
|
#
|
3
3
|
# @see http://docs.vagrantup.com/v2/vagrantfile/index.html
|
4
4
|
class ConfigBuilder::Model::Root < ConfigBuilder::Model::Base
|
5
|
-
|
6
|
-
include ConfigBuilder::ModelDelegator
|
7
|
-
|
8
5
|
def_model_delegator :vagrant
|
9
6
|
def_model_delegator :vms
|
7
|
+
def_model_delegator :vm_defaults
|
10
8
|
|
11
9
|
# @!attribute [rw] ssh
|
12
10
|
# @return [Hash<Symbol, Object>] The ssh configuration for all VMs
|
@@ -18,6 +16,16 @@ class ConfigBuilder::Model::Root < ConfigBuilder::Model::Base
|
|
18
16
|
# }
|
19
17
|
def_model_delegator :ssh
|
20
18
|
|
19
|
+
# @!attribute [rw] nfs
|
20
|
+
# @return [Hash<Symbol, Object>] The nfs configuration for all VMs
|
21
|
+
# @example
|
22
|
+
# >> config.nfs
|
23
|
+
# => {
|
24
|
+
# :nfs_export => true,
|
25
|
+
# :nfs_version => 4
|
26
|
+
# }
|
27
|
+
def_model_delegator :nfs
|
28
|
+
|
21
29
|
# @!attribute [rw] winrm
|
22
30
|
# @return [Hash<Symbol, Object>] The winrm configuration for all VMs
|
23
31
|
# @example
|
@@ -40,10 +48,19 @@ class ConfigBuilder::Model::Root < ConfigBuilder::Model::Base
|
|
40
48
|
|
41
49
|
private
|
42
50
|
|
51
|
+
def eval_vm_defaults(root_config)
|
52
|
+
with_attr(:vm_defaults) do |hash|
|
53
|
+
v = ConfigBuilder::Model::VM.new_from_hash(hash)
|
54
|
+
v.call(root_config)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
43
58
|
def eval_vms(root_config)
|
44
59
|
attr(:vms).each do |hash|
|
45
60
|
v = ConfigBuilder::Model::VM.new_from_hash(hash)
|
46
|
-
v.
|
61
|
+
root_config.vm.define(v.instance_id, v.instance_options) do |vm_config|
|
62
|
+
v.call(vm_config)
|
63
|
+
end
|
47
64
|
end
|
48
65
|
end
|
49
66
|
|
@@ -53,6 +70,13 @@ class ConfigBuilder::Model::Root < ConfigBuilder::Model::Base
|
|
53
70
|
end
|
54
71
|
end
|
55
72
|
|
73
|
+
def eval_nfs(root_config)
|
74
|
+
with_attr(:nfs) do |nfs_config|
|
75
|
+
f = ConfigBuilder::Model::NFS.new_from_hash(nfs_config)
|
76
|
+
f.call(root_config)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
56
80
|
def eval_ssh(root_config)
|
57
81
|
with_attr(:ssh) do |ssh_config|
|
58
82
|
f = ConfigBuilder::Model::SSH.new_from_hash(ssh_config)
|
@@ -35,6 +35,10 @@ class ConfigBuilder::Model::SSH < ConfigBuilder::Model::Base
|
|
35
35
|
# option.
|
36
36
|
def_model_attribute :guest_port
|
37
37
|
|
38
|
+
# @!attribute [rw] keep_alive
|
39
|
+
# @return [Boolean]
|
40
|
+
def_model_attribute :keep_alive
|
41
|
+
|
38
42
|
# @!attribute [rw] private_key_path
|
39
43
|
# @return [String] The path to the private key to use to SSH into the guest
|
40
44
|
# machine. By default this is the insecure private key that ships with
|
@@ -58,6 +62,11 @@ class ConfigBuilder::Model::SSH < ConfigBuilder::Model::Base
|
|
58
62
|
# enabled. Defaults to `false`.
|
59
63
|
def_model_attribute :forward_x11
|
60
64
|
|
65
|
+
# @!attribute [rw] forward_env
|
66
|
+
# @return [Array<String>] An array of host environment variables to forward
|
67
|
+
# to the guest.
|
68
|
+
def_model_attribute :forward_env
|
69
|
+
|
61
70
|
# @!attribute [rw] insert_key
|
62
71
|
# @return [Boolean] If `true`, Vagrant will automatically insert an insecure
|
63
72
|
# keypair to use for SSH. By default, this is `true`. This only has an
|
@@ -89,22 +98,31 @@ class ConfigBuilder::Model::SSH < ConfigBuilder::Model::Base
|
|
89
98
|
# Vagrant.
|
90
99
|
def_model_attribute :shell
|
91
100
|
|
101
|
+
# @!attribute [rw] sudo_command
|
102
|
+
# @return [String] The command to use when executing a command with sudo.
|
103
|
+
# This defaults to `sudo -E -H %c`. The `%c` will be replaced by the
|
104
|
+
# command that is being executed.
|
105
|
+
def_model_attribute :sudo_command
|
106
|
+
|
92
107
|
def to_proc
|
93
108
|
Proc.new do |global_config|
|
94
109
|
ssh = global_config.ssh
|
95
110
|
|
96
|
-
with_attr(:username) { |val| ssh.username
|
97
|
-
with_attr(:password) { |val| ssh.password
|
98
|
-
with_attr(:host) { |val| ssh.host
|
99
|
-
with_attr(:port) { |val| ssh.port
|
100
|
-
with_attr(:guest_port) { |val| ssh.guest_port
|
111
|
+
with_attr(:username) { |val| ssh.username = val }
|
112
|
+
with_attr(:password) { |val| ssh.password = val }
|
113
|
+
with_attr(:host) { |val| ssh.host = val }
|
114
|
+
with_attr(:port) { |val| ssh.port = val }
|
115
|
+
with_attr(:guest_port) { |val| ssh.guest_port = val }
|
116
|
+
with_attr(:keep_alive) { |val| ssh.keep_alive = val }
|
101
117
|
with_attr(:private_key_path) { |val| ssh.private_key_path = val }
|
102
|
-
with_attr(:forward_agent) { |val| ssh.forward_agent
|
103
|
-
with_attr(:forward_x11) { |val| ssh.forward_x11
|
104
|
-
with_attr(:
|
105
|
-
with_attr(:
|
106
|
-
with_attr(:
|
107
|
-
with_attr(:
|
118
|
+
with_attr(:forward_agent) { |val| ssh.forward_agent = val }
|
119
|
+
with_attr(:forward_x11) { |val| ssh.forward_x11 = val }
|
120
|
+
with_attr(:forward_env) { |val| ssh.forward_env = val }
|
121
|
+
with_attr(:insert_key) { |val| ssh.insert_key = val }
|
122
|
+
with_attr(:proxy_command) { |val| ssh.proxy_command = val }
|
123
|
+
with_attr(:pty) { |val| ssh.pty = val }
|
124
|
+
with_attr(:shell) { |val| ssh.shell = val }
|
125
|
+
with_attr(:sudo_command) { |val| ssh.sudo_command = val }
|
108
126
|
end
|
109
127
|
end
|
110
128
|
end
|
@@ -4,30 +4,82 @@
|
|
4
4
|
class ConfigBuilder::Model::SyncedFolder < ConfigBuilder::Model::Base
|
5
5
|
|
6
6
|
# @!attribute [rw] host_path
|
7
|
-
# @return [String] The host file path to mount on the guest
|
7
|
+
# @return [String] The host file path to mount on the guest.
|
8
8
|
def_model_attribute :host_path
|
9
9
|
|
10
10
|
# @!attribute [rw] guest_path
|
11
|
-
# @return [String] The guest file path to be used as the mount point
|
11
|
+
# @return [String] The guest file path to be used as the mount point.
|
12
12
|
def_model_attribute :guest_path
|
13
13
|
|
14
|
-
# @!attribute [rw]
|
15
|
-
#
|
16
|
-
#
|
17
|
-
def_model_attribute :
|
14
|
+
# @!attribute [rw] create
|
15
|
+
# @return [Boolean] If true, the host path will be created if it does not
|
16
|
+
# exist.
|
17
|
+
def_model_attribute :create
|
18
|
+
|
19
|
+
# @!attribute [rw] mount_options
|
20
|
+
# @return [Array<String>] A list of additional options to pass to the mount.
|
21
|
+
# command.
|
22
|
+
def_model_attribute :mount_options
|
18
23
|
|
19
24
|
# @!attribute [rw] disabled
|
20
25
|
# @return [Boolean] If the mount point should be disabled.
|
21
26
|
def_model_attribute :disabled
|
22
27
|
|
23
|
-
# @!attribute [rw]
|
24
|
-
# @return [
|
25
|
-
|
28
|
+
# @!attribute [rw] group
|
29
|
+
# @return [String] The group that will own the synced folder. By default this
|
30
|
+
# will be the SSH user.
|
31
|
+
def_model_attribute :group
|
32
|
+
|
33
|
+
# @!attribute [rw] owner
|
34
|
+
# @return [String] The user who should be the owner of this synced folder. By
|
35
|
+
# default this will be the SSH user.
|
36
|
+
def_model_attribute :owner
|
26
37
|
|
27
38
|
# @!attribute [rw] type
|
28
39
|
# @return [String] The method for syncing folder to guest.
|
29
40
|
def_model_attribute :type
|
30
41
|
|
42
|
+
# @!attribute [rw] nfs_export
|
43
|
+
# @return [Boolean] Whether Vagrant should manage entries in /etc/exports.
|
44
|
+
def_model_attribute :nfs_export
|
45
|
+
|
46
|
+
# @!attribute [rw] nfs_export
|
47
|
+
# @return [nfs_udp] Whether or not to use UDP as the transport.
|
48
|
+
def_model_attribute :nfs_udp
|
49
|
+
|
50
|
+
# @!attribute [rw] nfs_version
|
51
|
+
# @return [Fixnum, String] The NFS protocol version to use.
|
52
|
+
def_model_attribute :nfs_version
|
53
|
+
|
54
|
+
# @!attribute [rw] rsync__args
|
55
|
+
# @return [Array<String>] A list of arguments to supply to rsync.
|
56
|
+
def_model_attribute :rsync__args
|
57
|
+
|
58
|
+
# @!attribute [rw] rsync__auto
|
59
|
+
# @return [Boolean] If false, then rsync-auto will not watch and
|
60
|
+
# automatically sync this folder.
|
61
|
+
def_model_attribute :rsync__auto
|
62
|
+
|
63
|
+
# @!attribute [rw] rsync__chown
|
64
|
+
# @return [Boolean] If false, then the owner and group options for the synced
|
65
|
+
# folder are ignored and Vagrant will not execute a recursive chown.
|
66
|
+
def_model_attribute :rsync__chown
|
67
|
+
|
68
|
+
# @!attribute [rw] rsync__exclude
|
69
|
+
# @return [String, Array<String>] A list of files or directories to exclude
|
70
|
+
# from the sync.
|
71
|
+
def_model_attribute :rsync__exclude
|
72
|
+
|
73
|
+
# @!attribute [rw] rsync__rsync_path
|
74
|
+
# @return [String] The path on the remote host where rsync is and how it is
|
75
|
+
# executed.
|
76
|
+
def_model_attribute :rsync__rsync_path
|
77
|
+
|
78
|
+
# @!attribute [rw] rsync__verbose
|
79
|
+
# @return [Boolean] If true, then the output from the rsync process will be
|
80
|
+
# echoed to the console.
|
81
|
+
def_model_attribute :rsync__verbose
|
82
|
+
|
31
83
|
def to_proc
|
32
84
|
Proc.new do |vm_config|
|
33
85
|
vm_config.synced_folder(attr(:host_path), attr(:guest_path), folder_opts)
|
@@ -38,11 +90,28 @@ class ConfigBuilder::Model::SyncedFolder < ConfigBuilder::Model::Base
|
|
38
90
|
|
39
91
|
def folder_opts
|
40
92
|
h = {}
|
41
|
-
with_attr(:
|
42
|
-
with_attr(:
|
43
|
-
with_attr(:
|
44
|
-
with_attr(:
|
45
|
-
|
93
|
+
with_attr(:create) { |val| h[:create] = val }
|
94
|
+
with_attr(:mount_options) { |val| h[:mount_options] = val }
|
95
|
+
with_attr(:disabled) { |val| h[:disabled] = val }
|
96
|
+
with_attr(:group) { |val| h[:group] = val }
|
97
|
+
with_attr(:create) { |val| h[:create] = val }
|
98
|
+
with_attr(:extra) { |val| h[:extra] = val }
|
99
|
+
with_attr(:disabled) { |val| h[:disabled] = val }
|
100
|
+
with_attr(:group) { |val| h[:group] = val }
|
101
|
+
with_attr(:nfs) { |val| h[:nfs] = val }
|
102
|
+
with_attr(:owner) { |val| h[:owner] = val }
|
103
|
+
with_attr(:type) { |val| h[:type] = val }
|
104
|
+
# NFS
|
105
|
+
with_attr(:nfs_export) { |val| h[:nfs_export] = val }
|
106
|
+
with_attr(:nfs_udp) { |val| h[:nfs_udp] = val }
|
107
|
+
with_attr(:nfs_version) { |val| h[:nfs_version] = val }
|
108
|
+
# RSync
|
109
|
+
with_attr(:rsync__args) { |val| h[:rsync__args] = val }
|
110
|
+
with_attr(:rsync__auto) { |val| h[:rsync__auto] = val }
|
111
|
+
with_attr(:rsync__chown) { |val| h[:rsync__chown] = val }
|
112
|
+
with_attr(:rsync__exclude) { |val| h[:rsync__exclude] = val }
|
113
|
+
with_attr(:rsync__rsync_path) { |val| h[:rsync__rsync_path] = val }
|
114
|
+
with_attr(:rsync__verbose) { |val| h[:rsync__verbose] = val }
|
46
115
|
h
|
47
116
|
end
|
48
117
|
end
|
@@ -1,8 +1,5 @@
|
|
1
1
|
# @see http://docs.vagrantup.com/v2/vagrantfile/machine_settings.html
|
2
2
|
class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
3
|
-
|
4
|
-
include ConfigBuilder::ModelDelegator
|
5
|
-
|
6
3
|
# @!attribute [rw] provider
|
7
4
|
# @return [Hash<Symbol, Object>] The provider configuration for
|
8
5
|
# this VM
|
@@ -64,6 +61,17 @@ class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
|
64
61
|
# ]
|
65
62
|
def_model_delegator :private_networks
|
66
63
|
|
64
|
+
# @!attribute [rw] public_networks
|
65
|
+
# @return [Array<Hash<Symbol, Object>>] A collection of IP address network
|
66
|
+
# settings.
|
67
|
+
# @example
|
68
|
+
# >> vm.public_networks
|
69
|
+
# => [
|
70
|
+
# {:ip => '10.20.4.1'},
|
71
|
+
# {:bridge: "en1: Wi-Fi (AirPort)"},
|
72
|
+
# ]
|
73
|
+
def_model_delegator :public_networks
|
74
|
+
|
67
75
|
# @!attribute [rw] synced_folders
|
68
76
|
# @return [Array<Hash<Symbol, Object>>]
|
69
77
|
# @example
|
@@ -75,9 +83,28 @@ class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
|
75
83
|
#
|
76
84
|
def_model_delegator :synced_folders
|
77
85
|
|
78
|
-
# @!attribute [rw]
|
79
|
-
# @return [String] The
|
80
|
-
|
86
|
+
# @!attribute [rw] name
|
87
|
+
# @return [String] The name of the instantiated box in this environment.
|
88
|
+
def_model_id :name
|
89
|
+
|
90
|
+
# @!attribute [rw] autostart
|
91
|
+
# @return [Boolean] If true, vagrant will start the box on "vagrant up".
|
92
|
+
# If false, vagrant must be given the box name explicitly or it will not
|
93
|
+
# start.
|
94
|
+
def_model_option :autostart
|
95
|
+
|
96
|
+
# @!attribute [rw] allowed_synced_folder_types
|
97
|
+
# @return [Array<String>]
|
98
|
+
def_model_attribute :allowed_synced_folder_types
|
99
|
+
|
100
|
+
# @!attribute [rw] base_mac
|
101
|
+
# @return [String] MAC address of the NAT device.
|
102
|
+
def_model_attribute :base_mac
|
103
|
+
|
104
|
+
# @!attribute [rw] autostart
|
105
|
+
# @return [Fixnum] The time in seconds that Vagrant will wait for the machine
|
106
|
+
# to boot and be accessible. By default this is 300 seconds.
|
107
|
+
def_model_attribute :boot_timeout
|
81
108
|
|
82
109
|
# @!attribute [rw] box
|
83
110
|
# @return [String] This configures what box the machine will be brought up
|
@@ -85,6 +112,14 @@ class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
|
85
112
|
# shorthand name of a box in Vagrant Cloud.
|
86
113
|
def_model_attribute :box
|
87
114
|
|
115
|
+
# @!attribute [rw] box_check_update
|
116
|
+
# @return [Boolean] If true, Vagrant will check for updates to the
|
117
|
+
# configured box on every `vagrant up`. If an update is found, Vagrant
|
118
|
+
# will tell the user. By default this is `true`. Updates will only be
|
119
|
+
# checked for boxes that properly support updates (boxes from Vagrant
|
120
|
+
# Cloud or some other versioned box).
|
121
|
+
def_model_attribute :box_check_update
|
122
|
+
|
88
123
|
# @!attribute [rw] box_url
|
89
124
|
# @return [String, Array<String>] The URL that the configured box can be
|
90
125
|
# found at. If `box` is a shorthand to a box in Vagrant Cloud then this
|
@@ -99,6 +134,29 @@ class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
|
99
134
|
# example: "file:///tmp/test.box".
|
100
135
|
def_model_attribute :box_url
|
101
136
|
|
137
|
+
# @!attribute [rw] box_server_url
|
138
|
+
# @return [String]
|
139
|
+
def_model_attribute :box_server_url
|
140
|
+
|
141
|
+
# @!attribute [rw] box_version
|
142
|
+
# @return [String] The version of the box to use. This defaults to ">= 0"
|
143
|
+
# (the latest version available). This can contain an arbitrary list of
|
144
|
+
# constraints, separated by commas, such as: >= 1.0, < 1.5. When
|
145
|
+
# constraints are given, Vagrant will use the latest available box
|
146
|
+
# satisfying these constraints.
|
147
|
+
def_model_attribute :box_version
|
148
|
+
|
149
|
+
# @!attribute [rw] box_download_ca_cert
|
150
|
+
# @return [String] Path to a CA cert bundle to use when downloading a box
|
151
|
+
# directly. By default, Vagrant will use the Mozilla CA cert bundle.
|
152
|
+
def_model_attribute :box_download_ca_cert
|
153
|
+
|
154
|
+
# @!attribute [rw] box_download_ca_path
|
155
|
+
# @return [String] Path to a directory containing CA certificates for
|
156
|
+
# downloading a box directly. By default, Vagrant will use the Mozilla CA
|
157
|
+
# cert bundle.
|
158
|
+
def_model_attribute :box_download_ca_path
|
159
|
+
|
102
160
|
# @!attribute [rw] box_download_checksum
|
103
161
|
# @return [String] The checksum of the box specified by `box_url`.
|
104
162
|
# If not specified, no checksum comparison will be done. If specified,
|
@@ -128,40 +186,42 @@ class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
|
128
186
|
# will be verified.
|
129
187
|
def_model_attribute :box_download_insecure
|
130
188
|
|
131
|
-
# @!attribute [rw]
|
132
|
-
# @return [Boolean] If true
|
133
|
-
#
|
134
|
-
#
|
135
|
-
#
|
136
|
-
|
137
|
-
def_model_attribute :box_check_update
|
189
|
+
# @!attribute [rw] box_download_location_trusted
|
190
|
+
# @return [Boolean] If ´true´, then all HTTP redirects will be treated as
|
191
|
+
# trusted. That means credentials used for initial URL will be used for all
|
192
|
+
# subsequent redirects. By default, redirect locations are untrusted so
|
193
|
+
# credentials (if specified) used only for initial HTTP request.
|
194
|
+
def_model_attribute :box_download_location_trusted
|
138
195
|
|
139
|
-
# @!attribute [rw]
|
140
|
-
# @return [String] The
|
141
|
-
#
|
142
|
-
|
143
|
-
# constraints are given, Vagrant will use the latest available box
|
144
|
-
# satisfying these constraints.
|
145
|
-
def_model_attribute :box_version
|
196
|
+
# @!attribute [rw] communicator
|
197
|
+
# @return [String] The name of the communicator to use when sending
|
198
|
+
# commands to this box. Set to 'winrm' for Windows VMs.
|
199
|
+
def_model_attribute :communicator
|
146
200
|
|
147
|
-
# @!attribute [rw]
|
148
|
-
# @return [
|
149
|
-
|
201
|
+
# @!attribute [rw] graceful_halt_timeout
|
202
|
+
# @return [Fixnum] The time in seconds that Vagrant will wait for the machine
|
203
|
+
# to
|
204
|
+
# gracefully halt when vagrant halt is called. Defaults to 60 seconds.
|
205
|
+
def_model_attribute :graceful_halt_timeout
|
206
|
+
|
207
|
+
# @!attribute [rw] guest
|
208
|
+
# @return [String] The guest type to use for this VM.
|
209
|
+
def_model_attribute :guest
|
150
210
|
|
151
211
|
# @!attribute [rw] hostname
|
152
212
|
# @return [String] The hostname the machine should have.
|
153
213
|
def_model_attribute :hostname
|
154
214
|
|
155
|
-
# @!attribute [rw]
|
156
|
-
# @return [String]
|
157
|
-
#
|
158
|
-
|
215
|
+
# @!attribute [rw] post_up_message
|
216
|
+
# @return [String] A message to show after vagrant up. This will be shown to
|
217
|
+
# the user and is useful for containing instructions such as how to access
|
218
|
+
# various components of the development environment.
|
219
|
+
def_model_attribute :post_up_message
|
159
220
|
|
160
|
-
# @!attribute [rw]
|
161
|
-
# @return [
|
162
|
-
#
|
163
|
-
|
164
|
-
def_model_attribute :autostart
|
221
|
+
# @!attribute [rw] usable_port_range
|
222
|
+
# @return [String] A range of ports Vagrant can use for handling port
|
223
|
+
# collisions and such. Defaults to 2200..2250.
|
224
|
+
def_model_attribute :usable_port_range
|
165
225
|
|
166
226
|
def initialize
|
167
227
|
@defaults = {
|
@@ -169,35 +229,27 @@ class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
|
169
229
|
:provisioners => [],
|
170
230
|
:forwarded_ports => [],
|
171
231
|
:private_networks => [],
|
232
|
+
:public_networks => [],
|
172
233
|
:synced_folders => [],
|
173
234
|
:autostart => true,
|
174
235
|
}
|
175
236
|
end
|
176
237
|
|
177
238
|
def to_proc
|
178
|
-
Proc.new do |
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
with_attr(:box_url) { |val| vm_config.box_url = val }
|
184
|
-
with_attr(:box_download_checksum) { |val| vm_config.box_download_checksum = val }
|
185
|
-
with_attr(:box_download_checksum_type) { |val| vm_config.box_download_checksum_type = val }
|
186
|
-
with_attr(:box_download_client_cert) { |val| vm_config.box_download_client_cert = val }
|
187
|
-
with_attr(:box_download_insecure) { |val| vm_config.box_download_insecure = val }
|
188
|
-
with_attr(:box_check_update) { |val| vm_config.box_check_update = val }
|
189
|
-
with_attr(:box_version) { |val| vm_config.box_version = val }
|
190
|
-
|
191
|
-
with_attr(:hostname) { |val| vm_config.hostname = attr(:hostname) }
|
192
|
-
with_attr(:guest) { |val| vm_config.guest = attr(:guest) }
|
193
|
-
|
194
|
-
with_attr(:communicator) { |val| vm_config.communicator = attr(:communicator) }
|
195
|
-
|
196
|
-
eval_models(vm_config)
|
197
|
-
end
|
239
|
+
Proc.new do |config|
|
240
|
+
vm_config = config.vm
|
241
|
+
|
242
|
+
configure!(vm_config)
|
243
|
+
eval_models(vm_config)
|
198
244
|
end
|
199
245
|
end
|
200
246
|
|
247
|
+
|
248
|
+
# @private
|
249
|
+
def configure_usable_port_range(config, val)
|
250
|
+
config.usable_port_range = Range.new(*val.split('..').map(&:to_i))
|
251
|
+
end
|
252
|
+
|
201
253
|
private
|
202
254
|
|
203
255
|
def eval_provisioners(vm_config)
|
@@ -232,6 +284,13 @@ class ConfigBuilder::Model::VM < ConfigBuilder::Model::Base
|
|
232
284
|
end
|
233
285
|
end
|
234
286
|
|
287
|
+
def eval_public_networks(vm_config)
|
288
|
+
attr(:public_networks).each do |hash|
|
289
|
+
n = ConfigBuilder::Model::Network::PublicNetwork.new_from_hash(hash)
|
290
|
+
n.call(vm_config)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
235
294
|
def eval_forwarded_ports(vm_config)
|
236
295
|
attr(:forwarded_ports).each do |hash|
|
237
296
|
f = ConfigBuilder::Model::Network::ForwardedPort.new_from_hash(hash)
|