vagrant-templated 0.1.5 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![GitHub version](https://badge.fury.io/gh/afaundez%2Fvagrant-templated.svg)](https://badge.fury.io/gh/afaundez%2Fvagrant-templated)
|
2
1
|
[![Gem Version](https://badge.fury.io/rb/vagrant-templated.svg)](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
|