vagrant-config_builder 0.15.1 → 1.0.0.rc1

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +18 -4
  3. data/CHANGELOG +44 -0
  4. data/Gemfile +3 -4
  5. data/lib/config_builder/model/base.rb +182 -8
  6. data/lib/config_builder/model/network/forwarded_port.rb +34 -13
  7. data/lib/config_builder/model/network/private_network.rb +17 -1
  8. data/lib/config_builder/model/network/public_network.rb +39 -0
  9. data/lib/config_builder/model/nfs.rb +33 -0
  10. data/lib/config_builder/model/provider/aws.rb +16 -39
  11. data/lib/config_builder/model/provider/azure.rb +11 -33
  12. data/lib/config_builder/model/provider/base.rb +37 -0
  13. data/lib/config_builder/model/provider/libvirt.rb +33 -39
  14. data/lib/config_builder/model/provider/openstack.rb +69 -0
  15. data/lib/config_builder/model/provider/openstack_plugin.rb +46 -0
  16. data/lib/config_builder/model/provider/softlayer.rb +85 -0
  17. data/lib/config_builder/model/provider/virtualbox.rb +84 -17
  18. data/lib/config_builder/model/provider/vmware.rb +6 -4
  19. data/lib/config_builder/model/provider/vsphere.rb +33 -15
  20. data/lib/config_builder/model/provisioner/base.rb +33 -0
  21. data/lib/config_builder/model/provisioner/file.rb +1 -10
  22. data/lib/config_builder/model/provisioner/puppet.rb +32 -22
  23. data/lib/config_builder/model/provisioner/puppet_server.rb +21 -15
  24. data/lib/config_builder/model/provisioner/shell.rb +28 -10
  25. data/lib/config_builder/model/root.rb +28 -4
  26. data/lib/config_builder/model/ssh.rb +29 -11
  27. data/lib/config_builder/model/synced_folder.rb +83 -14
  28. data/lib/config_builder/model/vm.rb +111 -52
  29. data/lib/config_builder/model/winrm.rb +27 -7
  30. data/lib/config_builder/model.rb +9 -1
  31. data/lib/config_builder/model_delegator.rb +5 -24
  32. data/lib/config_builder/version.rb +1 -1
  33. data/spec/integration/vagrant/root_config_spec.rb +89 -0
  34. data/spec/integration/vagrant/vm_config_spec.rb +101 -0
  35. data/spec/integration/vagrant/vm_provider_spec.rb +57 -0
  36. data/spec/integration/vagrant/vm_provisioner_spec.rb +90 -0
  37. data/spec/spec_helper.rb +6 -2
  38. data/spec/{config_builder → unit}/filter/boxes_spec.rb +0 -0
  39. data/spec/{config_builder → unit}/filter/roles_spec.rb +0 -0
  40. data/spec/{config_builder → unit}/loader/yaml_spec.rb +0 -0
  41. data/spec/unit/model/base_spec.rb +122 -0
  42. data/spec/{config_builder → unit}/model/provider/vmware_fusion_spec.rb +6 -5
  43. data/templates/locales/en.yml +4 -0
  44. metadata +33 -20
@@ -0,0 +1,37 @@
1
+ # Abstract base class for Vagrant providers
2
+ #
3
+ # @abstract
4
+ #
5
+ # @since 0.16.0
6
+ #
7
+ # @see https://www.vagrantup.com/docs/providers/configuration.html
8
+ class ConfigBuilder::Model::Provider::Base < ConfigBuilder::Model::Base
9
+ def_model_delegator :overrides
10
+
11
+ def to_proc
12
+ Proc.new do |vm_config|
13
+ vm_config.provider instance_id do |config, overrides|
14
+ configure!(config)
15
+
16
+ # NOTE: All models inheriting from this class need to provide
17
+ # delegators which can consume a tuple of provider and override
18
+ # configuration.
19
+ eval_models([config, overrides])
20
+ end
21
+ end
22
+ end
23
+
24
+ def eval_overrides(configs)
25
+ with_attr(:overrides) do |hash|
26
+ _, overrides = configs
27
+ r = ConfigBuilder::Model::Root.new_from_hash(hash)
28
+ r.call(overrides)
29
+ end
30
+ end
31
+
32
+ # Set this to the name of the 'provider': 'vsphere', 'openstack', 'vmware',
33
+ # etc.
34
+ def instance_id
35
+ raise NotImplementedError
36
+ end
37
+ end
@@ -1,5 +1,5 @@
1
1
  # @see http://github.com/pradels/vagrant-libvirt
2
- class ConfigBuilder::Model::Provider::Libvirt < ConfigBuilder::Model::Base
2
+ class ConfigBuilder::Model::Provider::Libvirt < ConfigBuilder::Model::Provider::Base
3
3
 
4
4
  # @!attribute [rw] uri
5
5
  # @return [String] Manually specify URI
@@ -15,7 +15,7 @@ class ConfigBuilder::Model::Provider::Libvirt < ConfigBuilder::Model::Base
15
15
 
16
16
  # @!attribute [rw] connect_via_ssh
17
17
  # @return [String] If use ssh tunnel to connect to Libvirt.
18
- def_model_attribute :connect_via_ssh
18
+ def_model_attribute :connect_via_ssh
19
19
 
20
20
  # @!attribute [rw] socket
21
21
  # @return [String] Path towards the libvirt socket
@@ -50,58 +50,52 @@ class ConfigBuilder::Model::Provider::Libvirt < ConfigBuilder::Model::Base
50
50
  # @return [String] Libvirt default network address
51
51
  def_model_attribute :management_network_address
52
52
 
53
+ # @!attribute [rw] management_network_mode
54
+ # @return [String]
55
+ def_model_attribute :management_network_mode
56
+
57
+ # @!attribute [rw] management_network_mac
58
+ # @return [String]
59
+ def_model_attribute :management_network_mac
60
+
53
61
  # @!attribute [rw] default_prefix
54
62
  # @return [String] Default host prefix (alternative to use project folder
55
63
  # name)
56
64
  def_model_attribute :default_prefix
57
65
 
58
66
  # Domain specific settings used while creating new domain.
67
+ def_model_attribute :uuid
59
68
  def_model_attribute :memory
60
69
  def_model_attribute :cpus
61
70
  def_model_attribute :cpu_mode
71
+ def_model_attribute :loader
72
+ def_model_attribute :boot_order
73
+ def_model_attribute :machine_type
74
+ def_model_attribute :machine_arch
75
+ def_model_attribute :machine_virtual_size
62
76
  def_model_attribute :disk_bus
77
+ def_model_attribute :nic_model_type
63
78
  def_model_attribute :nested
64
79
  def_model_attribute :volume_cache
65
80
  def_model_attribute :kernel
66
81
  def_model_attribute :cmd_line
67
82
  def_model_attribute :initrd
68
-
69
- def initialize
70
- @defaults = {}
71
- end
72
-
73
- def to_proc
74
- Proc.new do |vm_config|
75
- vm_config.provider 'libvirt' do |vb_config|
76
-
77
- with_attr(:uri) { |val| vb_config.host = val }
78
- with_attr(:driver) { |val| vb_config.host = val }
79
- with_attr(:host) { |val| vb_config.host = val }
80
- with_attr(:connect_via_ssh) { |val| vb_config.connect_via_ssh = val }
81
- with_attr(:socket) { |val| vb_config.socket = val }
82
- with_attr(:username) { |val| vb_config.username = val }
83
- with_attr(:password) { |val| vb_config.username = val }
84
- with_attr(:id_ssh_key_file) { |val| vb_config.id_ssh_key_file = val }
85
- with_attr(:storage_pool_name) { |val| vb_config.storage_pool_name = val }
86
- with_attr(:random_hostname) { |val| vb_config.random_hostname = val }
87
- with_attr(:management_network_name) { |val|
88
- vb_config.username = val
89
- }
90
- with_attr(:management_network_address) { |val|
91
- vb_config.username = val
92
- }
93
- with_attr(:default_prefix) { |val| vb_config.username = val }
94
- with_attr(:memory) { |val| vb_config.memory = val }
95
- with_attr(:cpus) { |val| vb_config.cpus = val }
96
- with_attr(:cpu_mode) { |val| vb_config.cpu_mode = val }
97
- with_attr(:disk_bus) { |val| vb_config.disk_bus = val }
98
- with_attr(:nested) { |val| vb_config.nested = val }
99
- with_attr(:volume_cache) { |val| vb_config.volume_cache = val }
100
- with_attr(:kernel) { |val| vb_config.kernel = val }
101
- with_attr(:cmd_line) { |val| vb_config.cmd_line = val }
102
- with_attr(:initrd) { |val| vb_config.initrd = val }
103
- end
104
- end
83
+ def_model_attribute :graphics_type
84
+ def_model_attribute :graphics_autoport
85
+ def_model_attribute :graphics_port
86
+ def_model_attribute :graphics_passwd
87
+ def_model_attribute :graphics_ip
88
+ def_model_attribute :video_type
89
+ def_model_attribute :video_vram
90
+ def_model_attribute :keymap
91
+ def_model_attribute :nic_adapter_count
92
+ def_model_attribute :disks
93
+ def_model_attribute :cdroms
94
+ def_model_attribute :inputs
95
+ def_model_attribute :suspend_mode
96
+
97
+ def instance_id
98
+ 'libvirt'
105
99
  end
106
100
 
107
101
  ConfigBuilder::Model::Provider.register('libvirt', self)
@@ -0,0 +1,69 @@
1
+ # @see https://github.com/ggiamarchi/vagrant-openstack-provider
2
+ class ConfigBuilder::Model::Provider::Openstack < ConfigBuilder::Model::Provider::Base
3
+
4
+ # Credentials
5
+ def_model_attribute :username
6
+ def_model_attribute :password
7
+ def_model_attribute :tenant_name
8
+ def_model_attribute :region
9
+ def_model_attribute :openstack_auth_url
10
+ def_model_attribute :openstack_compute_url
11
+ def_model_attribute :openstack_network_url
12
+ def_model_attribute :openstack_volume_url
13
+ def_model_attribute :openstack_image_url
14
+ def_model_attribute :openstack_orchestration_url
15
+ def_model_attribute :endpoint_type
16
+
17
+ # VM Configuration
18
+ def_model_attribute :server_name
19
+ def_model_attribute :flavor
20
+ def_model_attribute :image
21
+ def_model_attribute :availability_zone
22
+ def_model_attribute :security_groups
23
+ def_model_attribute :user_data
24
+ def_model_attribute :metadata
25
+ def_model_attribute :scheduler_hints
26
+
27
+ # Floating IPs
28
+ def_model_attribute :floating_ip
29
+ def_model_attribute :floating_ip_pool
30
+ def_model_attribute :floating_ip_pool_always_allocate
31
+
32
+ # Networks
33
+ def_model_attribute :networks
34
+
35
+ # Volumes
36
+ def_model_attribute :volumes
37
+ def_model_attribute :volume_boot
38
+
39
+ # Orchestration Stacks
40
+ def_model_attribute :stacks
41
+ def_model_attribute :stack_create_timeout
42
+ def_model_attribute :stack_delete_timeout
43
+
44
+ # SSH authentication
45
+ def_model_attribute :keypair_name
46
+ def_model_attribute :public_key_path
47
+ def_model_attribute :ssh_username
48
+ def_model_attribute :ssh_disabled
49
+ def_model_attribute :ssh_timeout
50
+
51
+ # Synced folders
52
+ def_model_attribute :sync_method
53
+ def_model_attribute :rsync_includes
54
+ def_model_attribute :rsync_ignore_files
55
+
56
+ # Timeouts
57
+ def_model_attribute :server_create_timeout
58
+ def_model_attribute :server_active_timeout
59
+ def_model_attribute :server_stop_timeout
60
+ def_model_attribute :server_delete_timeout
61
+ def_model_attribute :http_open_timeout
62
+ def_model_attribute :http_read_timeout
63
+
64
+ def instance_id
65
+ 'openstack'
66
+ end
67
+
68
+ ConfigBuilder::Model::Provider.register('openstack', self)
69
+ end
@@ -0,0 +1,46 @@
1
+ # @see https://github.com/cloudbau/vagrant-openstack-plugin
2
+ class ConfigBuilder::Model::Provider::OpenstackPlugin < ConfigBuilder::Model::Provider::Base
3
+
4
+ def_model_attribute :username
5
+ def_model_attribute :api_key
6
+ def_model_attribute :tenant
7
+ def_model_attribute :region
8
+ def_model_attribute :endpoint
9
+ def_model_attribute :proxy
10
+ def_model_attribute :ssl_verify_peer
11
+
12
+ def_model_attribute :server_name
13
+ def_model_attribute :flavor
14
+ def_model_attribute :image
15
+ def_model_attribute :availability_zone
16
+ def_model_attribute :security_groups
17
+ def_model_attribute :user_data
18
+ def_model_attribute :metadata
19
+ def_model_attribute :scheduler_hints
20
+
21
+ def_model_attribute :floating_ip
22
+ def_model_attribute :floating_ip_pool
23
+
24
+ def_model_attribute :network
25
+ def_model_attribute :networks
26
+ def_model_attribute :address_id
27
+
28
+ def_model_attribute :disks
29
+
30
+ def_model_attribute :orchestration_stack_name
31
+ def_model_attribute :orchestration_stack_destroy
32
+ def_model_attribute :orchestration_cfn_template
33
+ def_model_attribute :orchestration_cfn_template_file
34
+ def_model_attribute :orchestration_cfn_template_url
35
+ def_model_attribute :orchestration_cfn_template_parameters
36
+
37
+ def_model_attribute :keypair_name
38
+ def_model_attribute :ssh_username
39
+ def_model_attribute :ssh_ip_family
40
+
41
+ def instance_id
42
+ 'openstack'
43
+ end
44
+
45
+ ConfigBuilder::Model::Provider.register('openstack_plugin', self)
46
+ end
@@ -0,0 +1,85 @@
1
+ # @see https://github.com/audiolize/vagrant-softlayer
2
+ class ConfigBuilder::Model::Provider::SoftLayer < ConfigBuilder::Model::Provider::Base
3
+ def_model_attribute :api_key
4
+ def_model_attribute :endpoint_url
5
+ def_model_attribute :username
6
+
7
+ def_model_attribute :manage_dns
8
+
9
+ def_model_attribute :datacenter
10
+ def_model_attribute :dedicated
11
+ def_model_attribute :disk_capacity
12
+ def_model_attribute :domain
13
+ def_model_attribute :force_private_ip
14
+ def_model_attribute :hostname
15
+ def_model_attribute :hourly_billing
16
+ def_model_attribute :image_guid
17
+ def_model_attribute :local_disk
18
+ def_model_attribute :max_memory
19
+ def_model_attribute :network_speed
20
+ def_model_attribute :operating_system
21
+ def_model_attribute :post_install
22
+ def_model_attribute :private_only
23
+ def_model_attribute :start_cpus
24
+ def_model_attribute :user_data
25
+ def_model_attribute :vlan_private
26
+ def_model_attribute :vlan_public
27
+ def_model_attribute :ssh_key
28
+ # Aliases for ssh_key
29
+ def_model_attribute :ssh_keys
30
+ def_model_attribute :ssh_key_id
31
+ def_model_attribute :ssh_key_ids
32
+ def_model_attribute :ssh_key_name
33
+ def_model_attribute :ssh_key_names
34
+
35
+ def_model_attribute :api_timeout
36
+ def_model_attribute :provision_timeout
37
+ def_model_attribute :rebuild_timeout
38
+ def_model_attribute :transaction_wait
39
+
40
+ def_model_delegator :load_balancers
41
+
42
+ def instance_id
43
+ 'softlayer'
44
+ end
45
+
46
+ private
47
+
48
+ def eval_load_balancers(configs)
49
+ provider, _ = configs
50
+
51
+ attr(:load_balancers).each do |hash|
52
+ v = ConfigBuilder::Model::Provider::SoftLayer::LoadBalancer.new_from_hash(hash)
53
+ v.call(provider)
54
+ end
55
+ end
56
+
57
+ class LoadBalancer < ConfigBuilder::Model::Base
58
+
59
+ def_model_attribute :destination_port
60
+ def_model_attribute :health_check
61
+ def_model_attribute :weight
62
+
63
+ def to_proc
64
+ Proc.new do |config|
65
+ config.join_load_balancer service_group_opts do |service|
66
+ with_attr(:destination_port) { |val| service.destination_port = val }
67
+ with_attr(:health_check) { |val| service.health_check = val }
68
+ with_attr(:weight) { |val| service.weight = val }
69
+ end
70
+ end
71
+ end
72
+
73
+ def service_group_opts
74
+ h = {}
75
+ with_attr(:method) { |val| h[:method] = val }
76
+ with_attr(:port) { |val| h[:port] = val }
77
+ with_attr(:type) { |val| h[:type] = val }
78
+ with_attr(:vip) { |val| h[:vip] = val }
79
+ h
80
+ end
81
+
82
+ end
83
+
84
+ ConfigBuilder::Model::Provider.register('softlayer', self)
85
+ end
@@ -1,35 +1,102 @@
1
1
  # @see http://docs.vagrantup.com/v2/virtualbox/configuration.html
2
- class ConfigBuilder::Model::Provider::Virtualbox < ConfigBuilder::Model::Base
2
+ class ConfigBuilder::Model::Provider::Virtualbox < ConfigBuilder::Model::Provider::Base
3
3
 
4
- # @!attribute [rw] name
5
- # @return [String] The name of the created VM in the Virtualbox GUI
6
- def_model_attribute :name
4
+ # Vagrant by default will make "smart" decisions to enable/disable
5
+ # the NAT DNS proxy. If this is set to `true`, then the DNS proxy
6
+ # will not be enabled, and it is up to the end user to do it.
7
+ #
8
+ # @return [Boolean]
9
+ def_model_attribute :auto_nat_dns_proxy
10
+
11
+ # If true, will check if guest additions are installed and up to
12
+ # date. By default, this is true.
13
+ #
14
+ # @return [Boolean]
15
+ def_model_attribute :check_guest_additions
7
16
 
8
17
  # @!attribute [rw] customize
9
- # @return [Array<String>] A list of customize arguments to use upon VM instantiation.
18
+ # @return [Array<String>] A list of customize arguments to use upon VM
19
+ # instantiation.
10
20
  def_model_attribute :customize
11
21
 
12
- # @!attribute [rw] gui
13
- # @return [Boolean] Whether the GUI should be launched when the VM is created
22
+ # Shortcut for setting CPU count for the virtual machine.
23
+ # Calls #customize internally.
24
+ #
25
+ # @param count [Integer, String] the count of CPUs
26
+ def_model_attribute :cpus
27
+
28
+ # If true, unused network interfaces will automatically be deleted.
29
+ # This defaults to false because the detection does not work across
30
+ # multiple users, and because on Windows this operation requires
31
+ # administrative privileges.
32
+ #
33
+ # @return [Boolean]
34
+ def_model_attribute :destroy_unused_network_interfaces
35
+
36
+ # If set to `true`, then VirtualBox will be launched with a GUI.
37
+ #
38
+ # @return [Boolean]
14
39
  def_model_attribute :gui
15
40
 
41
+ # If set to `true`, then a linked clone is created from a master
42
+ # VM generated from the specified box.
43
+ #
44
+ # @return [Boolean]
45
+ def_model_attribute :linked_clone
46
+
47
+ # The snapshot to base the linked clone from. If this isn't set
48
+ # a snapshot will be made with the name of "base" which will be used.
49
+ #
50
+ # If this is set, then the snapshot must already exist.
51
+ #
52
+ # @return [String]
53
+ def_model_attribute :linked_clone_snapshot
54
+
55
+ # Shortcut for setting memory size for the virtual machine.
56
+ # Calls #customize internally.
57
+ #
58
+ # @param size [Integer, String] the memory size in MB
59
+ def_model_attribute :memory
60
+
61
+ # This should be set to the name of the machine in the VirtualBox
62
+ # GUI.
63
+ #
64
+ # @return [String]
65
+ def_model_attribute :name
66
+
67
+ # Whether or not this VM has a functional vboxsf filesystem module.
68
+ # This defaults to true. If you set this to false, then the "virtualbox"
69
+ # synced folder type won't be valid.
70
+ #
71
+ # @return [Boolean]
72
+ def_model_attribute :functional_vboxsf
73
+
16
74
  def initialize
17
75
  @defaults = {:customize => []}
18
76
  end
19
77
 
20
- def to_proc
21
- Proc.new do |vm_config|
22
- vm_config.provider 'virtualbox' do |vb_config|
23
- with_attr(:name) { |val| vb_config.name = val }
24
-
25
- attr(:customize).each do |cmd|
26
- vb_config.customize cmd
27
- end
78
+ def instance_id
79
+ 'virtualbox'
80
+ end
28
81
 
29
- with_attr(:gui) { |val| vb_config.gui = val }
30
- end
82
+ # @private
83
+ def configure_customize(config, val)
84
+ val.each do |cmd|
85
+ config.customize(cmd)
31
86
  end
32
87
  end
33
88
 
89
+ # @private
90
+ def configure_linked_clone(config, val)
91
+ # Linked clone support landed in Vagrant 1.8
92
+ config.linked_clone = val if (Vagrant::VERSION > '1.8')
93
+ end
94
+
95
+ # @private
96
+ def configure_linked_clone_snapshot(config, val)
97
+ # Linked clone support landed in Vagrant 1.8
98
+ config.linked_clone_snapshot = val if (Vagrant::VERSION > '1.8')
99
+ end
100
+
34
101
  ConfigBuilder::Model::Provider.register('virtualbox', self)
35
102
  end
@@ -1,5 +1,5 @@
1
1
  # @see http://docs.vagrantup.com/v2/vmware/configuration.html
2
- class ConfigBuilder::Model::Provider::VMware < ConfigBuilder::Model::Base
2
+ class ConfigBuilder::Model::Provider::VMware < ConfigBuilder::Model::Provider::Base
3
3
 
4
4
  # @!attribute [rw] vmx
5
5
  # @return [Hash<String, String>] A hash of VMX options for the given VM
@@ -26,11 +26,13 @@ class ConfigBuilder::Model::Provider::VMware < ConfigBuilder::Model::Base
26
26
  def to_proc
27
27
  Proc.new do |vm_config|
28
28
  @providers.each do |vmware_provider|
29
- vm_config.provider vmware_provider do |config|
30
- config.gui = attr(:gui)
29
+ vm_config.provider vmware_provider do |provider, override|
30
+ provider.gui = attr(:gui)
31
31
  attr(:vmx).each_pair do |key, value|
32
- config.vmx[key] = value
32
+ provider.vmx[key] = value
33
33
  end
34
+
35
+ eval_models([provider, override])
34
36
  end
35
37
  end
36
38
  end
@@ -1,14 +1,31 @@
1
1
  # @see https://github.com/nsidc/vagrant-vsphere
2
- class ConfigBuilder::Model::Provider::Vsphere< ConfigBuilder::Model::Base
2
+ class ConfigBuilder::Model::Provider::Vsphere< ConfigBuilder::Model::Provider::Base
3
3
 
4
- VSPHERE_ATTRIBUTES = [ :host, :insecure, :user, :password, :data_center_name, :compute_resource_name, :resource_pool_name, :clone_from_vm, :template_name, :name, :vm_base_path, :customization_spec_name, :data_store_name, :linked_clone, :proxy_host, :proxy_port, :vlan ]
4
+ def_model_attribute :host
5
+ def_model_attribute :insecure
6
+ def_model_attribute :user
7
+ def_model_attribute :password
8
+ def_model_attribute :data_center_name
9
+ def_model_attribute :compute_resource_name
10
+ def_model_attribute :resource_pool_name
11
+ def_model_attribute :clone_from_vm
12
+ def_model_attribute :template_name
13
+ def_model_attribute :name
14
+ def_model_attribute :vm_base_path
15
+ def_model_attribute :customization_spec_name
16
+ def_model_attribute :data_store_name
17
+ def_model_attribute :linked_clone
18
+ def_model_attribute :proxy_host
19
+ def_model_attribute :proxy_port
20
+ def_model_attribute :vlan
21
+ def_model_attribute :addressType
22
+ def_model_attribute :mac
23
+ def_model_attribute :memory_mb
24
+ def_model_attribute :cpu_count
25
+ def_model_attribute :cpu_reservation
26
+ def_model_attribute :mem_reservation
5
27
 
6
- # @!attribute [rw]
7
- # The mandatory attributes will be verified by vagrant-vsphere
8
- # @see https://github.com/nsidc/vagrant-vsphere#configuration
9
- VSPHERE_ATTRIBUTES.each do |key|
10
- def_model_attribute attr
11
- end
28
+ def_model_attribute :custom_attributes
12
29
 
13
30
  def initialize
14
31
  @defaults = {
@@ -16,13 +33,14 @@ class ConfigBuilder::Model::Provider::Vsphere< ConfigBuilder::Model::Base
16
33
  }
17
34
  end
18
35
 
19
- def to_proc
20
- Proc.new do |vm_config|
21
- vm_config.provider 'vsphere' do |config|
22
- VSPHERE_ATTRIBUTES.each do |key|
23
- config.send("#{key}=", attr(key)) if attr(key)
24
- end
25
- end
36
+ def instance_id
37
+ 'vsphere'
38
+ end
39
+
40
+ # @private
41
+ def config_custom_attributes(config, val)
42
+ val.each do |e|
43
+ config.custom_attribute(*e)
26
44
  end
27
45
  end
28
46
 
@@ -0,0 +1,33 @@
1
+ # Abstract base class for Vagrant provisioners
2
+ #
3
+ # @abstract
4
+ #
5
+ # @since 0.16.0
6
+ #
7
+ # @see https://www.vagrantup.com/docs/provisioning/basic_usage.html
8
+ class ConfigBuilder::Model::Provisioner::Base < ConfigBuilder::Model::Base
9
+ def_model_option :name
10
+ def_model_option :type
11
+ def_model_option :run
12
+ def_model_option :preserve_order
13
+
14
+ def to_proc
15
+ Proc.new do |vm_config|
16
+ options = instance_options
17
+
18
+ name = options.delete(:name)
19
+ if name.nil?
20
+ name = options.delete(:type)
21
+ elsif Vagrant::VERSION < '1.7'
22
+ # Vagrant 1.6 and earlier used "id" instead of "name".
23
+ options[:id] = name
24
+ name = options.delete(:type)
25
+ end
26
+
27
+ vm_config.provision(name, **options) do |config|
28
+ configure!(config)
29
+ eval_models(config)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # @see http://docs.vagrantup.com/v2/provisioning/file.html
2
- class ConfigBuilder::Model::Provisioner::File < ConfigBuilder::Model::Base
2
+ class ConfigBuilder::Model::Provisioner::File < ConfigBuilder::Model::Provisioner::Base
3
3
  # @!attribute [rw] source
4
4
  # @return [Source] Is the local path of the file to be uploaded.
5
5
  def_model_attribute :source
@@ -11,14 +11,5 @@ class ConfigBuilder::Model::Provisioner::File < ConfigBuilder::Model::Base
11
11
  # determined by running vagrant ssh-config, and defaults to "vagrant".
12
12
  def_model_attribute :destination
13
13
 
14
- def to_proc
15
- Proc.new do |vm_config|
16
- vm_config.provision :file do |file_config|
17
- with_attr(:source) { |val| file_config.source = val }
18
- with_attr(:destination) { |val| file_config.destination = val }
19
- end
20
- end
21
- end
22
-
23
14
  ConfigBuilder::Model::Provisioner.register('file', self)
24
15
  end