vagrant-templated 0.1.5 → 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/Berksfile +2 -2
- data/CHANGELOG.md +18 -0
- data/README.md +17 -14
- data/Vagrantfile +3 -6
- data/config/attributes/base/1.0.yml +16 -0
- data/config/attributes/django/1.11.yml +31 -0
- data/config/attributes/nodejs/6.11.yml +28 -0
- data/config/attributes/rails/5.1.yml +40 -0
- data/config/attributes/vagrant-plugin/1.9.yml +25 -0
- data/config/locales/en.yml +19 -6
- data/config/templates/{files/Berksfile.erb → Berksfile.erb} +2 -2
- data/config/templates/{files/Vagrantfile.erb → Vagrantfile.erb} +3 -6
- data/lib/vagrant-templated.rb +1 -2
- data/lib/vagrant-templated/catalog.rb +72 -0
- data/lib/vagrant-templated/command/init.rb +80 -76
- data/lib/vagrant-templated/errors.rb +23 -9
- data/lib/vagrant-templated/version.rb +1 -1
- data/spec/vagrant_templated_spec.rb +80 -42
- metadata +10 -8
- data/config/templates/attributes/base.yml +0 -17
- data/config/templates/attributes/django1.11.yml +0 -32
- data/config/templates/attributes/rails5.yml +0 -41
- data/config/templates/attributes/vagrant-plugin.yml +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0de3022048ea907bdc99c4a5e89d69d851ed14d8
|
4
|
+
data.tar.gz: 7d3b70f7a0b47f25e332c2d03458e8e34e2e557e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6443c74321a96df9b12863f43d88a8d5bb1abdc1180bfb74c02e0c192db84b23cf787818ff3d9d04d7b716a0ef509b3c9d66792fb75215b0b053c4538556032e
|
7
|
+
data.tar.gz: c54d2c5a4171e52787923a05528f194f89e0be7c4c23af415179f0794a35cc7b38ee505d6498983d2931a6521953f8f5df2d6bd4d00268fa30f04a7936aceff0
|
data/Berksfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# vagrant-templated berksfile for vagrant-plugin 1.9
|
2
|
+
# check https://github.com/afaundez/vagrant-templated for more options
|
3
3
|
source 'https://supermarket.chef.io'
|
4
4
|
|
5
5
|
cookbook 'apt', '~> 6.1.0'
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,24 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.2.0] - 2017-08-12
|
10
|
+
### Added
|
11
|
+
- Node.js 6 template
|
12
|
+
- Cat option
|
13
|
+
### Changed
|
14
|
+
- Refactor config directories
|
15
|
+
- Lock chef version for all templates
|
16
|
+
- Move version from template name to a new option. If version not provided, using largest version
|
17
|
+
- Refactor loading and accessing template attributes
|
18
|
+
- Creating all error in vagrant templated module
|
19
|
+
- Update vagrantfile and berksfile
|
20
|
+
- Replace suffix with output option
|
21
|
+
- Update readme
|
22
|
+
## Removed
|
23
|
+
- Vagrantfile's magic comments
|
24
|
+
- Extra empty lines in templates
|
25
|
+
|
26
|
+
|
9
27
|
## [0.1.5] - 2017-08-07
|
10
28
|
### Added
|
11
29
|
- Update Vagrantfile from vagrant-templated
|
data/README.md
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
[](https://badge.fury.io/gh/afaundez%2Fvagrant-templated)
|
2
1
|
[](https://badge.fury.io/rb/vagrant-templated)
|
3
2
|
|
4
3
|
# VAGRANT TEMPLATED PLUGIN
|
5
4
|
|
6
|
-
Vagrant Templated is [Vagrant](https://www.vagrantup.com/downloads.html) plugin that add a new vagrant action to start a new Project. You will be able to choose between templates and start with a project with a Vagrantfile (and Berksfile) with cookbooks and configurations.
|
5
|
+
Vagrant Templated is [Vagrant](https://www.vagrantup.com/downloads.html) plugin that add a new vagrant action to start a new Project. You will be able to choose between templates and start with a project with a Vagrantfile (and Berksfile) with cookbooks and configurations already configured.
|
7
6
|
|
8
7
|
I started this gem because every time I start a new project, for production or just testing something, after the traditional vagrant init I had look in others projects looking for a specific configuration (for example, a Rails 5 project)
|
9
8
|
|
@@ -15,7 +14,7 @@ With vagrant:
|
|
15
14
|
vagrant plugin install vagrant-templated
|
16
15
|
```
|
17
16
|
|
18
|
-
To use the Vagranfile and Berksfile created, you will need [chefdk](https://downloads.chef.io/chefdk), [vagrant-berkshelf](https://github.com/berkshelf/vagrant-berkshelf) and
|
17
|
+
To use the Vagranfile and Berksfile created, you will need [chefdk](https://downloads.chef.io/chefdk), [vagrant-berkshelf](https://github.com/berkshelf/vagrant-berkshelf) and [vagrant-omnibus](https://github.com/chef/vagrant-omnibus).
|
19
18
|
|
20
19
|
|
21
20
|
## Usage
|
@@ -23,23 +22,29 @@ To use the Vagranfile and Berksfile created, you will need [chefdk](https://down
|
|
23
22
|
The new init action runs like this:
|
24
23
|
|
25
24
|
```shell
|
26
|
-
vagrant templated init <template>
|
25
|
+
vagrant templated init <template> [version]
|
27
26
|
```
|
28
27
|
|
29
28
|
The templates available at this moment are:
|
30
29
|
|
31
|
-
- `base
|
32
|
-
- `
|
33
|
-
- `
|
34
|
-
- `
|
30
|
+
- `base`
|
31
|
+
- `1.0`: apt and timezone update
|
32
|
+
- `vagrant-plugin`:
|
33
|
+
- `1.9`: base, rbenv, ruby 2.3 and bundler
|
34
|
+
- `django`:
|
35
|
+
- `1.11`: base, pyenv and python 2/3
|
36
|
+
- `rails`:
|
37
|
+
- `5.1`: base, rbenv, ruby 2.4, bundler, node and postgresql
|
38
|
+
- `nodejs`:
|
39
|
+
- `6.11`: base, nodenv and node 6.11
|
35
40
|
|
36
|
-
In both cases a Vagrantfile and a Berksfile will be generated where you executing the command.
|
37
|
-
|
38
|
-
Then, you just should `vagrant up` and enter the matrix.
|
41
|
+
In both cases a Vagrantfile and a Berksfile will be generated where you executing the command. You should adapt these files to you projects, but it should work as a starting point.
|
39
42
|
|
40
43
|
## Development
|
41
44
|
|
42
|
-
After checking out the repo,
|
45
|
+
After checking out the repo, you just should `vagrant up` and enter the matrix. Everything is at `/vagrant`.
|
46
|
+
|
47
|
+
Inside the box run `bundle install` to install dependencies. Then, run `bundle exec rake spec` to run the tests. Run `bundle exec vagrant templated init -h` and help will arise.
|
43
48
|
|
44
49
|
## Contributing
|
45
50
|
|
@@ -47,11 +52,9 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/afaund
|
|
47
52
|
|
48
53
|
## TODO list
|
49
54
|
|
50
|
-
- Refactor template management in a isolated component, making plugin more skinnier
|
51
55
|
- Add multiple choices for some components. For example, rails5 add postgresql by default, but it could be mysql or sqlite3 (that what I have used). Maybe it would better to add everything and leave everything commented but one default.
|
52
56
|
- Display ad hoc tips when new files are created
|
53
57
|
- Add tips as a command
|
54
|
-
- Refactor versions, maybe add version to the options
|
55
58
|
|
56
59
|
## License
|
57
60
|
|
data/Vagrantfile
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# Vagrantfile generated with https://github.com/afaundez/vagrant-templated
|
4
|
-
|
1
|
+
# vagrant-templated vagrantfile for vagrant-plugin 1.9
|
2
|
+
# check https://github.com/afaundez/vagrant-templated for more options
|
5
3
|
["vagrant-omnibus", "vagrant-berkshelf"].each do |plugin_name|
|
6
4
|
unless Vagrant.has_plugin? plugin_name
|
7
5
|
raise "#{plugin_name} plugin is required. Please run `vagrant plugin install #{plugin_name}`"
|
@@ -10,8 +8,7 @@ end
|
|
10
8
|
|
11
9
|
Vagrant.configure('2') do |config|
|
12
10
|
config.vm.box = 'bento/ubuntu-16.04'
|
13
|
-
|
14
|
-
config.omnibus.chef_version = 'latest'
|
11
|
+
config.omnibus.chef_version = '13.2.20'
|
15
12
|
config.vm.provision :chef_solo do |chef|
|
16
13
|
chef.add_recipe 'apt'
|
17
14
|
chef.add_recipe 'ruby_build'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
omnibus:
|
2
|
+
chef_version: 13.2.20
|
3
|
+
berkself:
|
4
|
+
cookbooks:
|
5
|
+
apt: ~> 6.1.3
|
6
|
+
timezone_iii: ~> 1.0.4
|
7
|
+
chef:
|
8
|
+
recipes:
|
9
|
+
- apt
|
10
|
+
- timezone_iii
|
11
|
+
json:
|
12
|
+
timezone_iii: UTC
|
13
|
+
require:
|
14
|
+
vagrant-plugins:
|
15
|
+
- vagrant-omnibus
|
16
|
+
- vagrant-berkshelf
|
@@ -0,0 +1,31 @@
|
|
1
|
+
omnibus:
|
2
|
+
chef_version: 13.2.20
|
3
|
+
network:
|
4
|
+
private_network:
|
5
|
+
ip: 192.168.33.101
|
6
|
+
comments:
|
7
|
+
- "TIP: the static IP must not collide with other machines on the same network"
|
8
|
+
- "TIP: Make sure to have something like this on your settings.py:"
|
9
|
+
- "ALLOWED_HOSTS = ['192.168.33.101', 'localhost', '127.0.0.1']"
|
10
|
+
berkself:
|
11
|
+
cookbooks:
|
12
|
+
apt: ~> 6.1.3
|
13
|
+
timezone_iii: ~> 1.0.4
|
14
|
+
pyenv: ~> 0.1.4
|
15
|
+
chef:
|
16
|
+
recipes:
|
17
|
+
- apt
|
18
|
+
- timezone_iii
|
19
|
+
- pyenv::user
|
20
|
+
json:
|
21
|
+
timezone: UTC
|
22
|
+
pyenv:
|
23
|
+
user_installs:
|
24
|
+
- user: vagrant
|
25
|
+
pythons:
|
26
|
+
- 3.4.0
|
27
|
+
- 2.7.6
|
28
|
+
require:
|
29
|
+
vagrant-plugins:
|
30
|
+
- vagrant-omnibus
|
31
|
+
- vagrant-berkshelf
|
@@ -0,0 +1,28 @@
|
|
1
|
+
omnibus:
|
2
|
+
chef_version: 13.2.20
|
3
|
+
network:
|
4
|
+
private_network:
|
5
|
+
ip: 192.168.33.101
|
6
|
+
comments:
|
7
|
+
- "TIP: the static IP must not collide with other machines on the same network"
|
8
|
+
berkself:
|
9
|
+
cookbooks:
|
10
|
+
apt: ~> 6.1.3
|
11
|
+
timezone_iii: ~> 1.0.4
|
12
|
+
nodenv: ~> 0.1.2
|
13
|
+
chef:
|
14
|
+
recipes:
|
15
|
+
- apt
|
16
|
+
- timezone_iii
|
17
|
+
- nodenv
|
18
|
+
json:
|
19
|
+
timezone: UTC
|
20
|
+
nodenv:
|
21
|
+
user_installs:
|
22
|
+
- user: vagrant
|
23
|
+
nodes:
|
24
|
+
- 6.11.2
|
25
|
+
require:
|
26
|
+
vagrant-plugins:
|
27
|
+
- vagrant-omnibus
|
28
|
+
- vagrant-berkshelf
|
@@ -0,0 +1,40 @@
|
|
1
|
+
omnibus:
|
2
|
+
chef_version: 13.2.20
|
3
|
+
network:
|
4
|
+
private_network:
|
5
|
+
ip: 192.168.33.101
|
6
|
+
comments:
|
7
|
+
- "TIP: the static IP must not collide with other machines on the same network"
|
8
|
+
berkself:
|
9
|
+
cookbooks:
|
10
|
+
apt: ~> 6.1.0
|
11
|
+
timezone_iii: ~> 1.0.4
|
12
|
+
ruby_rbenv: ~> 1.2.0
|
13
|
+
nodejs: ~> 4.0.0
|
14
|
+
postgresql: ~> 6.1.1
|
15
|
+
chef:
|
16
|
+
recipes:
|
17
|
+
- apt
|
18
|
+
- timezone_iii
|
19
|
+
- ruby_build
|
20
|
+
- ruby_rbenv::user
|
21
|
+
- nodejs
|
22
|
+
- postgresql::server
|
23
|
+
json:
|
24
|
+
timezone: UTC
|
25
|
+
rbenv:
|
26
|
+
user_installs:
|
27
|
+
- user: vagrant
|
28
|
+
rubies:
|
29
|
+
- 2.4.1
|
30
|
+
global: 2.4.1
|
31
|
+
gems:
|
32
|
+
2.4.1:
|
33
|
+
- name: bundler
|
34
|
+
postgresql:
|
35
|
+
password:
|
36
|
+
postgres: password
|
37
|
+
require:
|
38
|
+
vagrant-plugins:
|
39
|
+
- vagrant-omnibus
|
40
|
+
- vagrant-berkshelf
|
@@ -0,0 +1,25 @@
|
|
1
|
+
omnibus:
|
2
|
+
chef_version: 13.2.20
|
3
|
+
berkself:
|
4
|
+
cookbooks:
|
5
|
+
apt: ~> 6.1.0
|
6
|
+
ruby_rbenv: ~> 1.2.0
|
7
|
+
chef:
|
8
|
+
recipes:
|
9
|
+
- apt
|
10
|
+
- ruby_build
|
11
|
+
- ruby_rbenv::user
|
12
|
+
json:
|
13
|
+
rbenv:
|
14
|
+
user_installs:
|
15
|
+
- user: vagrant
|
16
|
+
rubies:
|
17
|
+
- 2.3.4
|
18
|
+
global: 2.3.4
|
19
|
+
gems:
|
20
|
+
2.3.4:
|
21
|
+
- name: bundler
|
22
|
+
require:
|
23
|
+
vagrant-plugins:
|
24
|
+
- vagrant-omnibus
|
25
|
+
- vagrant-berkshelf
|
data/config/locales/en.yml
CHANGED
@@ -1,12 +1,25 @@
|
|
1
1
|
en:
|
2
2
|
vagrant:
|
3
3
|
errors:
|
4
|
-
|
4
|
+
vagrant_templated_vagrantfile_exists: |-
|
5
5
|
A `Vagrantfile` already exists in this directory. Remove it before
|
6
|
-
running `vagrant templated init
|
7
|
-
|
6
|
+
running `vagrant templated init` o use force option.
|
7
|
+
vagrant_templated_berksfile_exists: |-
|
8
8
|
A `Berksfile` already exists in this directory. Remove it before
|
9
|
-
running `vagrant templated init
|
10
|
-
|
11
|
-
|
9
|
+
running `vagrant templated init` o use force option.
|
10
|
+
vagrant_templated_template_not_found: |-
|
11
|
+
Template not available. Check templates availables
|
12
12
|
running `vagrant templated init --help`.
|
13
|
+
vagrant_templated_version_not_found: |-
|
14
|
+
Version for template not available. Check versions availables
|
15
|
+
running `vagrant templated init --help`.
|
16
|
+
vagrant_templated_berksfile_write_error: |-
|
17
|
+
The user that is running Vagrant doesn't have the proper permissions
|
18
|
+
to write a Vagrantfile to the specified location. Please ensure that
|
19
|
+
you call `vagrant init` in a location where the proper permissions
|
20
|
+
are in place to create a Vagrantfile.
|
21
|
+
vagrant_templated_berksfile_write_error: |-
|
22
|
+
The user that is running Vagrant doesn't have the proper permissions
|
23
|
+
to write a Berksfile to the specified location. Please ensure that
|
24
|
+
you call `vagrant init` in a location where the proper permissions
|
25
|
+
are in place to create a Berksfile.
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# vagrant-templated berksfile for <%= template %> <%= version %>
|
2
|
+
# check https://github.com/afaundez/vagrant-templated for more options
|
3
3
|
source 'https://supermarket.chef.io'
|
4
4
|
|
5
5
|
<%- template_attributes['berkself']['cookbooks'].each do |name, version| -%>
|
@@ -1,18 +1,15 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# Vagrantfile generated with https://github.com/afaundez/vagrant-templated
|
4
|
-
|
1
|
+
# vagrant-templated vagrantfile for <%= template %> <%= version %>
|
2
|
+
# check https://github.com/afaundez/vagrant-templated for more options
|
5
3
|
<%- if template_attributes['require'] && template_attributes['require']['vagrant-plugins'] -%>
|
6
4
|
<%= template_attributes['require']['vagrant-plugins'].to_a %>.each do |plugin_name|
|
7
5
|
unless Vagrant.has_plugin? plugin_name
|
8
6
|
raise "#{plugin_name} plugin is required. Please run `vagrant plugin install #{plugin_name}`"
|
9
7
|
end
|
10
8
|
end
|
11
|
-
<%- end -%>
|
12
9
|
|
10
|
+
<%- end -%>
|
13
11
|
Vagrant.configure('2') do |config|
|
14
12
|
config.vm.box = 'bento/ubuntu-16.04'
|
15
|
-
|
16
13
|
<%- if template_attributes['network'] && template_attributes['network']['private_network'] -%>
|
17
14
|
|
18
15
|
<%- Array(template_attributes['network']['private_network']['comments']).each do |comment| -%>
|
data/lib/vagrant-templated.rb
CHANGED
@@ -7,10 +7,9 @@ end
|
|
7
7
|
require 'vagrant-templated/version'
|
8
8
|
require 'vagrant-templated/plugin'
|
9
9
|
require 'vagrant-templated/errors'
|
10
|
+
require 'vagrant-templated/catalog'
|
10
11
|
require 'vagrant-templated/command/root'
|
11
12
|
require 'vagrant-templated/command/init'
|
12
13
|
|
13
|
-
require 'erb'
|
14
|
-
require 'yaml'
|
15
14
|
require 'i18n'
|
16
15
|
I18n.load_path << Dir.glob(File.join(File.dirname(File.expand_path(__FILE__)), "../config/locales/*.{rb,yml}"))
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
module Vagrant
|
5
|
+
module Templated
|
6
|
+
module Catalog
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def vagrantfile_for(template, version)
|
10
|
+
template_attributes = attributes_for template, version
|
11
|
+
vagrantfile_template = File.read(Catalog.root.join 'config/templates/Vagrantfile.erb')
|
12
|
+
ERB.new(vagrantfile_template, nil, '-').result binding
|
13
|
+
end
|
14
|
+
|
15
|
+
def berksfile_for(template, version)
|
16
|
+
template_attributes = attributes_for template, version
|
17
|
+
berksfile_template = File.read(Catalog.root.join 'config/templates/Berksfile.erb')
|
18
|
+
ERB.new(berksfile_template, nil, '-').result binding
|
19
|
+
end
|
20
|
+
|
21
|
+
def patch(template, version)
|
22
|
+
max_version_for(template)
|
23
|
+
end
|
24
|
+
|
25
|
+
def templates
|
26
|
+
attributes.keys
|
27
|
+
end
|
28
|
+
|
29
|
+
def attributes_for(template, version)
|
30
|
+
raise Vagrant::Templated::Errors::VersionNotFound unless versions_for(template).include? version
|
31
|
+
attributes[template][version]
|
32
|
+
end
|
33
|
+
|
34
|
+
def max_version_for(template)
|
35
|
+
versions_for(template).max do |a, b|
|
36
|
+
Gem::Version.new(a) <=> Gem::Version.new(b)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def versions_for(template)
|
41
|
+
raise Vagrant::Templated::Errors::TemplateNotFound unless attributes.include? template
|
42
|
+
attributes[template].keys
|
43
|
+
end
|
44
|
+
|
45
|
+
def root
|
46
|
+
@root ||= Pathname.new File.expand_path '../..', File.dirname(File.expand_path(__FILE__))
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def attributes
|
52
|
+
@attributes ||= load_attributes_files
|
53
|
+
end
|
54
|
+
|
55
|
+
def load_attributes_files
|
56
|
+
attributes = {}
|
57
|
+
attributes_filelist.each do |attributes_file|
|
58
|
+
template = File.basename File.dirname(attributes_file)
|
59
|
+
version = File.basename(attributes_file, '.yml')
|
60
|
+
attributes[template] ||= {}
|
61
|
+
attributes[template][version] ||= YAML.load_file(attributes_file)
|
62
|
+
end
|
63
|
+
attributes
|
64
|
+
end
|
65
|
+
|
66
|
+
def attributes_filelist
|
67
|
+
Dir.glob(root.join 'config/attributes/**/*.yml')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -1,106 +1,110 @@
|
|
1
|
-
require 'optparse'
|
2
|
-
|
3
1
|
module Vagrant
|
4
2
|
module Templated
|
5
3
|
module Command
|
6
4
|
class Init < Vagrant.plugin('2', :command)
|
7
5
|
|
8
6
|
def execute
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
o.separator ''
|
19
|
-
o.separator 'Templates availables:'
|
20
|
-
o.separator ''
|
21
|
-
templates_attributes.keys.each do |template|
|
22
|
-
o.separator " #{template}"
|
23
|
-
end
|
24
|
-
|
25
|
-
o.separator ''
|
26
|
-
o.separator 'Options:'
|
27
|
-
o.separator ''
|
28
|
-
|
29
|
-
o.on('-s', '--suffix SUFFIX', String,
|
30
|
-
"Output suffix for Vagrantfile and Berksfile. '-' for stdout") do |suffix|
|
31
|
-
options[:suffix] = suffix
|
32
|
-
end
|
33
|
-
|
34
|
-
o.on('-f', '--force', 'Overwrite an existing box if it exists') do |f|
|
35
|
-
options[:force] = f
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
argv = parse_options(opts)
|
40
|
-
return if !argv
|
41
|
-
if argv.empty? || argv.length > 2
|
42
|
-
raise Vagrant::Errors::CLIInvalidUsage,
|
43
|
-
help: opts.help.chomp
|
7
|
+
template, version, options = setup
|
8
|
+
return if template.nil?
|
9
|
+
@env.ui.info "vagrant-templated detected #{template} template", new_line: true
|
10
|
+
if version.nil? || version.empty?
|
11
|
+
version = Catalog.patch template, version
|
12
|
+
@env.ui.info "vagrant-templated didn't received a version, using largest available #{version}"
|
13
|
+
else
|
14
|
+
@env.ui.info "vagrant-templated detected #{version} version"
|
44
15
|
end
|
45
16
|
|
46
|
-
|
47
|
-
|
48
|
-
options[:name] = argv[0]
|
49
|
-
template = argv[1]
|
50
|
-
end
|
17
|
+
vagrantfile = Catalog.vagrantfile_for template, version
|
18
|
+
berksfile = Catalog.berksfile_for template, version
|
51
19
|
|
52
|
-
|
53
|
-
|
54
|
-
|
20
|
+
if options[:cat]
|
21
|
+
@env.ui.output vagrantfile
|
22
|
+
@env.ui.output berksfile
|
23
|
+
else
|
24
|
+
files_root = @env.cwd
|
25
|
+
if options[:output]
|
26
|
+
@env.ui.info "vagrant-templated received output path #{options[:output]}"
|
27
|
+
output_path = Pathname.new options[:output]
|
28
|
+
files_root = if output_path.relative?
|
29
|
+
output_path.expand_path files_root
|
30
|
+
else
|
31
|
+
output_path
|
32
|
+
end
|
33
|
+
@env.ui.info "vagrant-templated will write the files in: #{files_root}"
|
34
|
+
end
|
55
35
|
|
56
|
-
|
57
|
-
berksfile_save_path = nil
|
58
|
-
if options[:suffix] != "-"
|
59
|
-
vagrantfile_save_path = Pathname.new(['Vagrantfile', options[:suffix]].compact.join('.')).expand_path(@env.cwd)
|
36
|
+
vagrantfile_save_path = Pathname.new('Vagrantfile').expand_path files_root
|
60
37
|
vagrantfile_save_path.delete if vagrantfile_save_path.exist? && options[:force]
|
61
|
-
raise Vagrant::Errors::
|
62
|
-
berksfile_save_path = Pathname.new(['Berksfile', options[:suffix]].compact.join('.')).expand_path(@env.cwd)
|
63
|
-
berksfile_save_path.delete if berksfile_save_path.exist? && options[:force]
|
64
|
-
raise Vagrant::Errors::BerksfileTemplatedExistsError if berksfile_save_path.exist?
|
65
|
-
end
|
38
|
+
raise Vagrant::Templated::Errors::VagrantfileExistsError if vagrantfile_save_path.exist?
|
66
39
|
|
67
|
-
|
68
|
-
|
40
|
+
berksfile_save_path = Pathname.new('Berksfile').expand_path files_root
|
41
|
+
berksfile_save_path.delete if berksfile_save_path.exist? && options[:force]
|
42
|
+
raise Vagrant::Templated::Errors::BerksfileExistsError if berksfile_save_path.exist?
|
69
43
|
|
70
|
-
contents = vagrantfile.result binding
|
71
|
-
if vagrantfile_save_path
|
72
44
|
begin
|
73
45
|
vagrantfile_save_path.open('w+') do |f|
|
74
|
-
f.write
|
46
|
+
f.write vagrantfile
|
75
47
|
end
|
48
|
+
@env.ui.info "vagrant-templated created #{vagrantfile_save_path}"
|
76
49
|
rescue Errno::EACCES
|
77
|
-
raise Vagrant::Errors::VagrantfileWriteError
|
50
|
+
raise Vagrant::Templated::Errors::VagrantfileWriteError
|
78
51
|
end
|
79
52
|
|
80
|
-
@env.ui.info('Templated Vagranfile created successfully', prefix: false)
|
81
|
-
else
|
82
|
-
@env.ui.info('VAGRANTFILE', prefix: false, color: :green)
|
83
|
-
@env.ui.info(contents, prefix: false)
|
84
|
-
end
|
85
|
-
|
86
|
-
contents = berksfile.result binding
|
87
|
-
if berksfile_save_path
|
88
53
|
begin
|
89
54
|
berksfile_save_path.open('w+') do |f|
|
90
|
-
f.write
|
55
|
+
f.write berksfile
|
91
56
|
end
|
57
|
+
@env.ui.info "vagrant-templated created #{berksfile_save_path}"
|
92
58
|
rescue Errno::EACCES
|
93
|
-
raise Vagrant::Errors::BerksfileWriteError
|
59
|
+
raise Vagrant::Templated::Errors::BerksfileWriteError
|
94
60
|
end
|
95
|
-
|
96
|
-
@env.ui.info('Templated Berksfile created successfully', prefix: false)
|
97
|
-
else
|
98
|
-
@env.ui.info('BERKSFILE', prefix: false, color: :green)
|
99
|
-
@env.ui.info(contents, prefix: false)
|
100
61
|
end
|
101
|
-
|
62
|
+
|
63
|
+
@env.ui.success 'vagrant-templated finished successfully'
|
102
64
|
0
|
103
65
|
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def setup
|
70
|
+
options = {}
|
71
|
+
opts = OptionParser.new do |o|
|
72
|
+
o.banner = 'Usage: vagrant templated init [options] <template> [version]'
|
73
|
+
|
74
|
+
o.separator ''
|
75
|
+
o.separator 'Templates and versions availables:'
|
76
|
+
o.separator ''
|
77
|
+
Catalog.templates.each do |template|
|
78
|
+
o.separator " #{template}: #{Catalog.versions_for(template).join(', ')}"
|
79
|
+
end
|
80
|
+
o.separator ''
|
81
|
+
o.separator 'If no version is provided, larger version will be used.'
|
82
|
+
|
83
|
+
o.separator ''
|
84
|
+
o.separator 'Options:'
|
85
|
+
o.separator ''
|
86
|
+
|
87
|
+
o.on('-o', '--output OUTPUT', String, 'Output path for files. Default to `.`') do |o|
|
88
|
+
options[:output] = o
|
89
|
+
end
|
90
|
+
|
91
|
+
o.on('-c', '--cat', 'Output Vagrantfile and Berksfile to stdout') do |c|
|
92
|
+
options[:cat] = c
|
93
|
+
end
|
94
|
+
|
95
|
+
o.on('-f', '--force', 'Overwrite existing Vagrantfile and Berksfile if they exists') do |f|
|
96
|
+
options[:force] = f
|
97
|
+
end
|
98
|
+
end
|
99
|
+
argv = parse_options opts
|
100
|
+
return if !argv
|
101
|
+
if !argv || argv.empty? || argv.length > 2
|
102
|
+
raise Vagrant::Errors::CLIInvalidUsage,
|
103
|
+
help: opts.help.chomp
|
104
|
+
end
|
105
|
+
template, version = argv
|
106
|
+
[template, version, options]
|
107
|
+
end
|
104
108
|
end
|
105
109
|
end
|
106
110
|
end
|
@@ -1,15 +1,29 @@
|
|
1
1
|
module Vagrant
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
module Templated
|
3
|
+
module Errors
|
4
|
+
class VagrantfileExistsError < Vagrant::Errors::VagrantError
|
5
|
+
error_key(:vagrant_templated_vagrantfile_exists)
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
class BerksfileExistsError < Vagrant::Errors::VagrantError
|
9
|
+
error_key(:vagrant_templated_berksfile_exists)
|
10
|
+
end
|
11
|
+
|
12
|
+
class TemplateNotFound < Vagrant::Errors::VagrantError
|
13
|
+
error_key(:vagrant_templated_template_not_found)
|
14
|
+
end
|
15
|
+
|
16
|
+
class VersionNotFound < Vagrant::Errors::VagrantError
|
17
|
+
error_key(:vagrant_templated_version_not_found)
|
18
|
+
end
|
19
|
+
|
20
|
+
class BerksfileWriteError < Vagrant::Errors::VagrantError
|
21
|
+
error_key(:vagrant_templated_berksfile_write_error)
|
22
|
+
end
|
10
23
|
|
11
|
-
|
12
|
-
|
24
|
+
class VagrantfileWriteError < Vagrant::Errors::VagrantError
|
25
|
+
error_key(:vagrant_templated_vagrantfile_write_error)
|
26
|
+
end
|
13
27
|
end
|
14
28
|
end
|
15
29
|
end
|
@@ -42,70 +42,102 @@ describe Vagrant::Templated::Command::Init do
|
|
42
42
|
|
43
43
|
context 'when using a valid template' do
|
44
44
|
|
45
|
+
let(:vagrantfile_header) {
|
46
|
+
ERB.new "# vagrant-templated vagrantfile for <%= template %> <%= version %>\n"\
|
47
|
+
'# check https://github.com/afaundez/vagrant-templated for more options'
|
48
|
+
}
|
49
|
+
let(:berksfile_header) {
|
50
|
+
ERB.new "# vagrant-templated berksfile for <%= template %> <%= version %>\n"\
|
51
|
+
'# check https://github.com/afaundez/vagrant-templated for more options'
|
52
|
+
}
|
53
|
+
|
45
54
|
it 'should raise error if Vagrantfile exists' do
|
46
55
|
FileUtils.touch @vagrantfile
|
47
56
|
expect{
|
48
|
-
described_class.new(['
|
49
|
-
}.to raise_error Vagrant::Errors::
|
57
|
+
described_class.new(['rails'], @env).execute
|
58
|
+
}.to raise_error Vagrant::Templated::Errors::VagrantfileExistsError
|
50
59
|
end
|
51
60
|
|
52
|
-
let(:vagrantfile_tag) { '# Vagrantfile generated with ' \
|
53
|
-
'https://github.com/afaundez/vagrant-templated'
|
54
|
-
}
|
55
|
-
let(:berksfile_tag) { '# Berksfile generated with ' \
|
56
|
-
'https://github.com/afaundez/vagrant-templated'
|
57
|
-
}
|
58
|
-
|
59
61
|
it 'should raise error if Berksfile exists' do
|
60
62
|
FileUtils.touch @berksfile
|
61
63
|
expect{
|
62
|
-
described_class.new(['
|
63
|
-
}.to raise_error Vagrant::Errors::
|
64
|
+
described_class.new(['rails'], @env).execute
|
65
|
+
}.to raise_error Vagrant::Templated::Errors::BerksfileExistsError
|
64
66
|
end
|
65
67
|
|
66
68
|
it 'should create Vagrantfile and Berksfile if both do not exist using template base' do
|
69
|
+
template = 'base'
|
70
|
+
version = '1.0'
|
67
71
|
expect{
|
68
|
-
described_class.new([
|
72
|
+
described_class.new([template], @env).execute
|
69
73
|
}.to_not raise_error
|
70
|
-
expect(File.open(@vagrantfile).read).to include(
|
71
|
-
expect(File.open(@berksfile).read).to include(
|
74
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
75
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
72
76
|
end
|
73
77
|
|
74
78
|
it 'should create Vagrantfile and Berksfile if both do not exist using template vagrant-plugin' do
|
79
|
+
template = 'vagrant-plugin'
|
80
|
+
version = '1.9'
|
75
81
|
expect{
|
76
|
-
described_class.new([
|
82
|
+
described_class.new([template], @env).execute
|
77
83
|
}.to_not raise_error
|
78
|
-
expect(File.open(@vagrantfile).read).to include(
|
79
|
-
expect(File.open(@berksfile).read).to include(
|
84
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
85
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
80
86
|
end
|
81
87
|
|
82
|
-
|
88
|
+
|
89
|
+
it 'should create Vagrantfile and Berksfile if both do not exist using template django' do
|
90
|
+
template = 'django'
|
91
|
+
version = '1.11'
|
83
92
|
expect{
|
84
|
-
described_class.new([
|
93
|
+
described_class.new([template], @env).execute
|
85
94
|
}.to_not raise_error
|
86
|
-
expect(File.open(@vagrantfile).read).to include(
|
87
|
-
expect(File.open(@berksfile).read).to include(
|
95
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
96
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
88
97
|
end
|
89
98
|
|
90
|
-
|
99
|
+
|
100
|
+
it 'should create Vagrantfile and Berksfile if both do not exist using template rails' do
|
101
|
+
template = 'rails'
|
102
|
+
version = '5.1'
|
91
103
|
expect{
|
92
|
-
described_class.new([
|
104
|
+
described_class.new([template], @env).execute
|
93
105
|
}.to_not raise_error
|
94
|
-
expect(File.open(@vagrantfile).read).to include(
|
95
|
-
expect(File.open(@berksfile).read).to include(
|
106
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
107
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
96
108
|
end
|
97
109
|
|
98
|
-
|
110
|
+
|
111
|
+
it 'should create Vagrantfile and Berksfile if both do not exist using template nodejs' do
|
112
|
+
template = 'nodejs'
|
113
|
+
version = '6.11'
|
114
|
+
expect{
|
115
|
+
described_class.new([template], @env).execute
|
116
|
+
}.to_not raise_error
|
117
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
118
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'and using and output' do
|
122
|
+
|
123
|
+
before :example do
|
124
|
+
@cwd = File.join @tmp, SecureRandom.urlsafe_base64
|
125
|
+
FileUtils.mkdir_p @cwd
|
126
|
+
@env = Vagrant::Environment.new cwd: @cwd
|
127
|
+
@output = 'output'
|
128
|
+
FileUtils.mkdir_p File.join(@cwd, @output)
|
129
|
+
@vagrantfile = File.join @cwd, @output, 'Vagrantfile'
|
130
|
+
@berksfile = File.join @cwd, @output, 'Berksfile'
|
131
|
+
end
|
99
132
|
|
100
133
|
it 'should create Vagrantfile and Berksfile if both do not exist' do
|
101
|
-
|
134
|
+
template = 'rails'
|
135
|
+
version = '5.1'
|
102
136
|
expect{
|
103
|
-
described_class.new([
|
137
|
+
described_class.new([template, '--output', @output], @env).execute
|
104
138
|
}.to_not raise_error
|
105
|
-
|
106
|
-
expect(File.open(
|
107
|
-
tag_berksfile = [@berksfile, suffix].join('.')
|
108
|
-
expect(File.open(tag_berksfile).read).to include(berksfile_tag)
|
139
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
140
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
109
141
|
end
|
110
142
|
|
111
143
|
end
|
@@ -113,34 +145,40 @@ describe Vagrant::Templated::Command::Init do
|
|
113
145
|
context 'and forcing' do
|
114
146
|
|
115
147
|
it 'should replace existing Vagrantfile' do
|
148
|
+
template = 'rails'
|
149
|
+
version = '5.1'
|
116
150
|
FileUtils.touch File.join(@cwd, 'Vagrantfile')
|
117
|
-
args = [
|
151
|
+
args = [template, '--force']
|
118
152
|
expect{
|
119
153
|
described_class.new(args, @env).execute
|
120
154
|
}.to_not raise_error
|
121
|
-
expect(File.open(@vagrantfile).read).to include(
|
122
|
-
expect(File.open(@berksfile).read).to include(
|
155
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
156
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
123
157
|
end
|
124
158
|
|
125
159
|
it 'should replace existing Berksfile' do
|
160
|
+
template = 'rails'
|
161
|
+
version = '5.1'
|
126
162
|
FileUtils.touch File.join(@cwd, 'Berksfile')
|
127
|
-
args = [
|
163
|
+
args = [template, '--force']
|
128
164
|
expect{
|
129
165
|
described_class.new(args, @env).execute
|
130
166
|
}.to_not raise_error
|
131
|
-
expect(File.open(@vagrantfile).read).to include(
|
132
|
-
expect(File.open(@berksfile).read).to include(
|
167
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
168
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
133
169
|
end
|
134
170
|
|
135
171
|
it 'should replace existing Vagrantfile and Berksfile' do
|
172
|
+
template = 'rails'
|
173
|
+
version = '5.1'
|
136
174
|
FileUtils.touch File.join(@cwd, 'Vagrantfile')
|
137
175
|
FileUtils.touch File.join(@cwd, 'Berksfile')
|
138
|
-
args = [
|
176
|
+
args = [template, '--force']
|
139
177
|
expect{
|
140
178
|
described_class.new(args, @env).execute
|
141
179
|
}.to_not raise_error
|
142
|
-
expect(File.open(@vagrantfile).read).to include(
|
143
|
-
expect(File.open(@berksfile).read).to include(
|
180
|
+
expect(File.open(@vagrantfile).read).to include(vagrantfile_header.result binding)
|
181
|
+
expect(File.open(@berksfile).read).to include(berksfile_header.result binding)
|
144
182
|
end
|
145
183
|
|
146
184
|
end
|
@@ -152,7 +190,7 @@ describe Vagrant::Templated::Command::Init do
|
|
152
190
|
it 'should raise an error' do
|
153
191
|
expect{
|
154
192
|
described_class.new(['fake-template'], @env).execute
|
155
|
-
}.to raise_error Vagrant::Errors::
|
193
|
+
}.to raise_error Vagrant::Templated::Errors::TemplateNotFound
|
156
194
|
end
|
157
195
|
|
158
196
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-templated
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Álvaro Faúndez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -77,14 +77,16 @@ files:
|
|
77
77
|
- Vagrantfile
|
78
78
|
- bin/console
|
79
79
|
- bin/setup
|
80
|
+
- config/attributes/base/1.0.yml
|
81
|
+
- config/attributes/django/1.11.yml
|
82
|
+
- config/attributes/nodejs/6.11.yml
|
83
|
+
- config/attributes/rails/5.1.yml
|
84
|
+
- config/attributes/vagrant-plugin/1.9.yml
|
80
85
|
- config/locales/en.yml
|
81
|
-
- config/templates/
|
82
|
-
- config/templates/
|
83
|
-
- config/templates/attributes/rails5.yml
|
84
|
-
- config/templates/attributes/vagrant-plugin.yml
|
85
|
-
- config/templates/files/Berksfile.erb
|
86
|
-
- config/templates/files/Vagrantfile.erb
|
86
|
+
- config/templates/Berksfile.erb
|
87
|
+
- config/templates/Vagrantfile.erb
|
87
88
|
- lib/vagrant-templated.rb
|
89
|
+
- lib/vagrant-templated/catalog.rb
|
88
90
|
- lib/vagrant-templated/command/init.rb
|
89
91
|
- lib/vagrant-templated/command/root.rb
|
90
92
|
- lib/vagrant-templated/errors.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
base:
|
2
|
-
omnibus:
|
3
|
-
chef_version: latest
|
4
|
-
berkself:
|
5
|
-
cookbooks:
|
6
|
-
apt: ~> 6.1.3
|
7
|
-
timezone_iii: ~> 1.0.4
|
8
|
-
chef:
|
9
|
-
recipes:
|
10
|
-
- apt
|
11
|
-
- timezone_iii
|
12
|
-
json:
|
13
|
-
timezone_iii: UTC
|
14
|
-
require:
|
15
|
-
vagrant-plugins:
|
16
|
-
- vagrant-omnibus
|
17
|
-
- vagrant-berkshelf
|
@@ -1,32 +0,0 @@
|
|
1
|
-
django1.11:
|
2
|
-
omnibus:
|
3
|
-
chef_version: 12.21.1
|
4
|
-
network:
|
5
|
-
private_network:
|
6
|
-
ip: 192.168.33.101
|
7
|
-
comments:
|
8
|
-
- "TIP: Change the IP if it causes problem"
|
9
|
-
- "TIP: Make sure to have something like this on your settings.py:"
|
10
|
-
- "ALLOWED_HOSTS = ['192.168.33.101', 'localhost', '127.0.0.1']"
|
11
|
-
berkself:
|
12
|
-
cookbooks:
|
13
|
-
apt: ~> 6.1.3
|
14
|
-
timezone_iii: ~> 1.0.4
|
15
|
-
pyenv: ~> 0.1.4
|
16
|
-
chef:
|
17
|
-
recipes:
|
18
|
-
- apt
|
19
|
-
- timezone_iii
|
20
|
-
- pyenv::user
|
21
|
-
json:
|
22
|
-
timezone: UTC
|
23
|
-
pyenv:
|
24
|
-
user_installs:
|
25
|
-
- user: vagrant
|
26
|
-
pythons:
|
27
|
-
- 3.4.0
|
28
|
-
- 2.7.6
|
29
|
-
require:
|
30
|
-
vagrant-plugins:
|
31
|
-
- vagrant-omnibus
|
32
|
-
- vagrant-berkshelf
|
@@ -1,41 +0,0 @@
|
|
1
|
-
rails5:
|
2
|
-
omnibus:
|
3
|
-
chef_version: latest
|
4
|
-
network:
|
5
|
-
private_network:
|
6
|
-
ip: 192.168.33.101
|
7
|
-
comments:
|
8
|
-
- "TIP: Change the IP if it causes problem"
|
9
|
-
berkself:
|
10
|
-
cookbooks:
|
11
|
-
apt: ~> 6.1.0
|
12
|
-
timezone_iii: ~> 1.0.4
|
13
|
-
ruby_rbenv: ~> 1.2.0
|
14
|
-
nodejs: ~> 4.0.0
|
15
|
-
postgresql: ~> 6.1.1
|
16
|
-
chef:
|
17
|
-
recipes:
|
18
|
-
- apt
|
19
|
-
- timezone_iii
|
20
|
-
- ruby_build
|
21
|
-
- ruby_rbenv::user
|
22
|
-
- nodejs
|
23
|
-
- postgresql::server
|
24
|
-
json:
|
25
|
-
timezone: UTC
|
26
|
-
rbenv:
|
27
|
-
user_installs:
|
28
|
-
- user: vagrant
|
29
|
-
rubies:
|
30
|
-
- 2.4.1
|
31
|
-
global: 2.4.1
|
32
|
-
gems:
|
33
|
-
2.4.1:
|
34
|
-
- name: bundler
|
35
|
-
postgresql:
|
36
|
-
password:
|
37
|
-
postgres: password
|
38
|
-
require:
|
39
|
-
vagrant-plugins:
|
40
|
-
- vagrant-omnibus
|
41
|
-
- vagrant-berkshelf
|
@@ -1,26 +0,0 @@
|
|
1
|
-
vagrant-plugin:
|
2
|
-
omnibus:
|
3
|
-
chef_version: latest
|
4
|
-
berkself:
|
5
|
-
cookbooks:
|
6
|
-
apt: ~> 6.1.0
|
7
|
-
ruby_rbenv: ~> 1.2.0
|
8
|
-
chef:
|
9
|
-
recipes:
|
10
|
-
- apt
|
11
|
-
- ruby_build
|
12
|
-
- ruby_rbenv::user
|
13
|
-
json:
|
14
|
-
rbenv:
|
15
|
-
user_installs:
|
16
|
-
- user: vagrant
|
17
|
-
rubies:
|
18
|
-
- 2.3.4
|
19
|
-
global: 2.3.4
|
20
|
-
gems:
|
21
|
-
2.3.4:
|
22
|
-
- name: bundler
|
23
|
-
require:
|
24
|
-
vagrant-plugins:
|
25
|
-
- vagrant-omnibus
|
26
|
-
- vagrant-berkshelf
|