vagrant-masonry 0.13.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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.yardopts +6 -0
  4. data/CHANGELOG +190 -0
  5. data/Gemfile +16 -0
  6. data/LICENSE +15 -0
  7. data/README.md +129 -0
  8. data/docs/GettingStarted.markdown +175 -0
  9. data/examples/Vagrantfile +1 -0
  10. data/examples/roles.yaml +29 -0
  11. data/examples/vms.yaml +12 -0
  12. data/lib/config_builder.rb +24 -0
  13. data/lib/config_builder/action/load_extensions.rb +14 -0
  14. data/lib/config_builder/class_registry.rb +72 -0
  15. data/lib/config_builder/extension_handler.rb +22 -0
  16. data/lib/config_builder/filter.rb +6 -0
  17. data/lib/config_builder/filter/boxes.rb +22 -0
  18. data/lib/config_builder/filter/roles.rb +149 -0
  19. data/lib/config_builder/filter_stack.rb +37 -0
  20. data/lib/config_builder/loader.rb +23 -0
  21. data/lib/config_builder/loader/yaml.rb +44 -0
  22. data/lib/config_builder/loader/yaml_erb.rb +24 -0
  23. data/lib/config_builder/model.rb +67 -0
  24. data/lib/config_builder/model/base.rb +101 -0
  25. data/lib/config_builder/model/network/forwarded_port.rb +37 -0
  26. data/lib/config_builder/model/network/private_network.rb +15 -0
  27. data/lib/config_builder/model/provider/azure.rb +66 -0
  28. data/lib/config_builder/model/provider/libvirt.rb +108 -0
  29. data/lib/config_builder/model/provider/virtualbox.rb +35 -0
  30. data/lib/config_builder/model/provider/vmware.rb +40 -0
  31. data/lib/config_builder/model/provider/vmware_fusion.rb +8 -0
  32. data/lib/config_builder/model/provider/vmware_workstation.rb +8 -0
  33. data/lib/config_builder/model/provider/vsphere.rb +30 -0
  34. data/lib/config_builder/model/provisioner/file.rb +24 -0
  35. data/lib/config_builder/model/provisioner/puppet.rb +37 -0
  36. data/lib/config_builder/model/provisioner/puppet_server.rb +27 -0
  37. data/lib/config_builder/model/provisioner/shell.rb +27 -0
  38. data/lib/config_builder/model/root.rb +69 -0
  39. data/lib/config_builder/model/ssh.rb +110 -0
  40. data/lib/config_builder/model/synced_folder.rb +43 -0
  41. data/lib/config_builder/model/vm.rb +235 -0
  42. data/lib/config_builder/model/winrm.rb +56 -0
  43. data/lib/config_builder/model_delegator.rb +30 -0
  44. data/lib/config_builder/plugin.rb +15 -0
  45. data/lib/config_builder/runner.rb +33 -0
  46. data/lib/config_builder/version.rb +3 -0
  47. data/lib/vagrant-masonry.rb +1 -0
  48. data/spec/config_builder/filter/boxes_spec.rb +87 -0
  49. data/spec/config_builder/filter/roles_spec.rb +287 -0
  50. data/spec/config_builder/loader/yaml_spec.rb +76 -0
  51. data/spec/config_builder/model/provider/vmware_fusion_spec.rb +29 -0
  52. data/spec/spec_helper.rb +4 -0
  53. data/templates/locales/en.yml +11 -0
  54. data/vagrant-masonry.gemspec +24 -0
  55. metadata +128 -0
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConfigBuilder::Loader::YAML do
4
+ describe '#yamldir' do
5
+
6
+ before :each do
7
+ # Simulate directories of YAML files for the loader.
8
+ allow(File).to receive(:join).with('tst_dir_a', anything()).and_return('tst_dir_a')
9
+ allow(File).to receive(:join).with('tst_dir_b', anything()).and_return('tst_dir_b')
10
+
11
+ allow(Dir).to receive(:glob).with('tst_dir_a').and_return(['a/boxes.yaml', 'a/roles.yaml'])
12
+ allow(Dir).to receive(:glob).with('tst_dir_b').and_return(['b/boxes.yaml', 'b/roles.yaml'])
13
+
14
+ allow(::YAML).to receive(:load_file).with('a/boxes.yaml').and_return(::YAML.load <<-EOF)
15
+ ---
16
+ boxes:
17
+ 'box-a': 'http://puppet-vagrant-boxes.puppetlabs.com/'
18
+ EOF
19
+
20
+ allow(::YAML).to receive(:load_file).with('a/roles.yaml').and_return(::YAML.load <<-EOF)
21
+ ---
22
+ roles:
23
+ base:
24
+ private_networks:
25
+ - {ip: '0.0.0.0', auto_network: true}
26
+ EOF
27
+
28
+ allow(::YAML).to receive(:load_file).with('b/boxes.yaml').and_return(::YAML.load <<-EOF)
29
+ ---
30
+ boxes:
31
+ 'box-b': 'http://puppet-vagrant-boxes.puppetlabs.com/'
32
+ EOF
33
+
34
+ allow(::YAML).to receive(:load_file).with('b/roles.yaml').and_return(::YAML.load <<-EOF)
35
+ ---
36
+ roles:
37
+ base:
38
+ private_networks:
39
+ - {ip: '10.0.0.1'}
40
+ EOF
41
+ end
42
+
43
+
44
+ it 'loads from single directories' do
45
+ subject.yamldir('tst_dir_a')
46
+
47
+ expect(::YAML).to have_received(:load_file).exactly(2).times
48
+ end
49
+
50
+ it 'loads from multiple directories' do
51
+ subject.yamldir(['tst_dir_a', 'tst_dir_b'])
52
+
53
+ expect(::YAML).to have_received(:load_file).exactly(4).times
54
+ end
55
+
56
+ it 'merges separate hashes' do
57
+ config = subject.yamldir('tst_dir_a')
58
+
59
+ expect(config).to have_key('boxes')
60
+ expect(config).to have_key('roles')
61
+ end
62
+
63
+ describe 'when merging overlapping configs' do
64
+ let(:config) { subject.yamldir(['tst_dir_a', 'tst_dir_b']) }
65
+
66
+ it 'merges subhashes' do
67
+ expect(config['boxes']).to have_key('box-a')
68
+ expect(config['boxes']).to have_key('box-b')
69
+ end
70
+
71
+ it 'concatenates subarrays' do
72
+ expect(config['roles']['base']['private_networks']).to have(2).items
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'config_builder/model'
3
+
4
+ describe ConfigBuilder::Model::Provider::VMwareFusion do
5
+ describe "converting to a proc" do
6
+
7
+ let(:vmx) { Hash.new }
8
+ let(:fusion_config) { double('fusion provider config', :vmx => vmx) }
9
+ let(:vm_config) { double('vagrant VM config', :provider => fusion_config) }
10
+
11
+ before do
12
+ allow(vm_config).to receive(:provider).and_yield(fusion_config)
13
+ end
14
+
15
+ it "assigns the gui value to the fusion provider object" do
16
+ subject.attrs = {:gui => 'guivalue'}
17
+ expect(fusion_config).to receive(:gui=).with('guivalue')
18
+ p = subject.to_proc
19
+ p.call(vm_config)
20
+ end
21
+
22
+ it "assigns the vmx value to the fusion provider object" do
23
+ subject.attrs = {:vmx => {:hello => 'world'}}
24
+ allow(fusion_config).to receive(:gui=)
25
+ subject.call(vm_config)
26
+ expect(vmx).to eq({:hello => 'world'})
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ require 'config_builder'
3
+
4
+ require 'rspec'
@@ -0,0 +1,11 @@
1
+ ---
2
+ en:
3
+ config_builder:
4
+ class_registry:
5
+ unknown_entry: |-
6
+ Unable to locate a class associated with the identifier %{identifier} in the registry
7
+ %{registry}. The relevant plugin may have not loaded the config_builder extension.
8
+ The identifiers registered with %{registry} are %{identifiers}.
9
+ duplicate_entry: |-
10
+ The class registry %{registry} already has a class registered with identifier %{identifier}
11
+ and cannot replace the existing entry.
@@ -0,0 +1,24 @@
1
+ $LOAD_PATH << File.expand_path(File.join('..', 'lib'), __FILE__)
2
+ require 'config_builder/version'
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'vagrant-masonry'
6
+ gem.version = ConfigBuilder::VERSION
7
+
8
+ gem.summary = 'Generate Vagrant configurations from arbitrary data'
9
+ gem.description = 'Use YAML configuration files to declaratively specify Vagrant configuration.'
10
+
11
+ gem.authors = ['Jozef Izso', 'Adrien Thebo']
12
+ gem.email = ['jozef.izso@gmail.com', 'adrien@somethingsinistral.net']
13
+ gem.homepage = 'https://github.com/goitsk/vagrant-masonry'
14
+
15
+ gem.has_rdoc = true
16
+ gem.license = 'Apache 2.0'
17
+
18
+ gem.files = %x{git ls-files -z}.split("\0")
19
+ gem.require_path = 'lib'
20
+
21
+ gem.add_runtime_dependency 'deep_merge', '~> 1.0.0'
22
+
23
+ gem.add_development_dependency 'rspec', '~> 2.14.0'
24
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-masonry
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.13.0
5
+ platform: ruby
6
+ authors:
7
+ - Jozef Izso
8
+ - Adrien Thebo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-12-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: deep_merge
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 1.0.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 1.0.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: rspec
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 2.14.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 2.14.0
42
+ description: Use YAML configuration files to declaratively specify Vagrant configuration.
43
+ email:
44
+ - jozef.izso@gmail.com
45
+ - adrien@somethingsinistral.net
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".gitignore"
51
+ - ".yardopts"
52
+ - CHANGELOG
53
+ - Gemfile
54
+ - LICENSE
55
+ - README.md
56
+ - docs/GettingStarted.markdown
57
+ - examples/Vagrantfile
58
+ - examples/roles.yaml
59
+ - examples/vms.yaml
60
+ - lib/config_builder.rb
61
+ - lib/config_builder/action/load_extensions.rb
62
+ - lib/config_builder/class_registry.rb
63
+ - lib/config_builder/extension_handler.rb
64
+ - lib/config_builder/filter.rb
65
+ - lib/config_builder/filter/boxes.rb
66
+ - lib/config_builder/filter/roles.rb
67
+ - lib/config_builder/filter_stack.rb
68
+ - lib/config_builder/loader.rb
69
+ - lib/config_builder/loader/yaml.rb
70
+ - lib/config_builder/loader/yaml_erb.rb
71
+ - lib/config_builder/model.rb
72
+ - lib/config_builder/model/base.rb
73
+ - lib/config_builder/model/network/forwarded_port.rb
74
+ - lib/config_builder/model/network/private_network.rb
75
+ - lib/config_builder/model/provider/azure.rb
76
+ - lib/config_builder/model/provider/libvirt.rb
77
+ - lib/config_builder/model/provider/virtualbox.rb
78
+ - lib/config_builder/model/provider/vmware.rb
79
+ - lib/config_builder/model/provider/vmware_fusion.rb
80
+ - lib/config_builder/model/provider/vmware_workstation.rb
81
+ - lib/config_builder/model/provider/vsphere.rb
82
+ - lib/config_builder/model/provisioner/file.rb
83
+ - lib/config_builder/model/provisioner/puppet.rb
84
+ - lib/config_builder/model/provisioner/puppet_server.rb
85
+ - lib/config_builder/model/provisioner/shell.rb
86
+ - lib/config_builder/model/root.rb
87
+ - lib/config_builder/model/ssh.rb
88
+ - lib/config_builder/model/synced_folder.rb
89
+ - lib/config_builder/model/vm.rb
90
+ - lib/config_builder/model/winrm.rb
91
+ - lib/config_builder/model_delegator.rb
92
+ - lib/config_builder/plugin.rb
93
+ - lib/config_builder/runner.rb
94
+ - lib/config_builder/version.rb
95
+ - lib/vagrant-masonry.rb
96
+ - spec/config_builder/filter/boxes_spec.rb
97
+ - spec/config_builder/filter/roles_spec.rb
98
+ - spec/config_builder/loader/yaml_spec.rb
99
+ - spec/config_builder/model/provider/vmware_fusion_spec.rb
100
+ - spec/spec_helper.rb
101
+ - templates/locales/en.yml
102
+ - vagrant-masonry.gemspec
103
+ homepage: https://github.com/goitsk/vagrant-masonry
104
+ licenses:
105
+ - Apache 2.0
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.4.5
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: Generate Vagrant configurations from arbitrary data
127
+ test_files: []
128
+ has_rdoc: true