vagrant-bolt 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/.rubocop.yml +124 -0
- data/.travis.yml +28 -0
- data/.yardopts +1 -0
- data/Gemfile +37 -0
- data/LICENSE +12 -0
- data/Puppetfile +7 -0
- data/README.md +431 -0
- data/Rakefile +19 -0
- data/Vagrantfile +47 -0
- data/acceptance/artifacts/.keep +0 -0
- data/acceptance/components/bolt_spec.rb +98 -0
- data/acceptance/skeletons/advanced/Vagrantfile +26 -0
- data/acceptance/skeletons/base/Vagrantfile +11 -0
- data/acceptance/skeletons/base/modules/facts/CHANGELOG.md +26 -0
- data/acceptance/skeletons/base/modules/facts/CONTRIBUTING.md +279 -0
- data/acceptance/skeletons/base/modules/facts/Gemfile +98 -0
- data/acceptance/skeletons/base/modules/facts/LICENSE +201 -0
- data/acceptance/skeletons/base/modules/facts/README.md +45 -0
- data/acceptance/skeletons/base/modules/facts/Rakefile +8 -0
- data/acceptance/skeletons/base/modules/facts/checksums.json +42 -0
- data/acceptance/skeletons/base/modules/facts/lib/puppet/functions/facts/group_by.rb +14 -0
- data/acceptance/skeletons/base/modules/facts/metadata.json +62 -0
- data/acceptance/skeletons/base/modules/facts/plans/info.pp +16 -0
- data/acceptance/skeletons/base/modules/facts/plans/init.pp +13 -0
- data/acceptance/skeletons/base/modules/facts/tasks/bash.json +5 -0
- data/acceptance/skeletons/base/modules/facts/tasks/bash.sh +93 -0
- data/acceptance/skeletons/base/modules/facts/tasks/init.json +10 -0
- data/acceptance/skeletons/base/modules/facts/tasks/powershell.json +4 -0
- data/acceptance/skeletons/base/modules/facts/tasks/powershell.ps1 +56 -0
- data/acceptance/skeletons/base/modules/facts/tasks/ruby.json +4 -0
- data/acceptance/skeletons/base/modules/facts/tasks/ruby.rb +40 -0
- data/acceptance/skeletons/provisioner/Vagrantfile +19 -0
- data/acceptance/skeletons/trigger/Vagrantfile +22 -0
- data/acceptance/vagrant-spec.config.rb +22 -0
- data/lib/vagrant-bolt.rb +57 -0
- data/lib/vagrant-bolt/command.rb +65 -0
- data/lib/vagrant-bolt/config.rb +6 -0
- data/lib/vagrant-bolt/config/bolt.rb +135 -0
- data/lib/vagrant-bolt/config/global.rb +172 -0
- data/lib/vagrant-bolt/config_builder.rb +11 -0
- data/lib/vagrant-bolt/config_builder/config.rb +150 -0
- data/lib/vagrant-bolt/config_builder/monkey_patches.rb +71 -0
- data/lib/vagrant-bolt/config_builder/provisioner.rb +106 -0
- data/lib/vagrant-bolt/config_builder/triggers.rb +29 -0
- data/lib/vagrant-bolt/plugin.rb +39 -0
- data/lib/vagrant-bolt/provisioner.rb +18 -0
- data/lib/vagrant-bolt/runner.rb +88 -0
- data/lib/vagrant-bolt/util/bolt.rb +139 -0
- data/lib/vagrant-bolt/util/config.rb +43 -0
- data/lib/vagrant-bolt/util/machine.rb +73 -0
- data/lib/vagrant-bolt/version.rb +5 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/unit/config/bolt_spec.rb +150 -0
- data/spec/unit/config/global_spec.rb +95 -0
- data/spec/unit/provisioner/bolt_spec.rb +39 -0
- data/spec/unit/runner/runner_spec.rb +122 -0
- data/spec/unit/util/bolt_spec.rb +148 -0
- data/spec/unit/util/config_spec.rb +53 -0
- data/spec/unit/vagrant_spec.rb +9 -0
- data/tasks/acceptance.rake +45 -0
- data/tasks/spec.rake +5 -0
- data/templates/locales/en.yml +24 -0
- data/vagrant-bolt.gemspec +24 -0
- metadata +109 -0
@@ -0,0 +1,148 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'vagrant-bolt/util/bolt'
|
5
|
+
require 'vagrant-bolt/config'
|
6
|
+
|
7
|
+
describe VagrantBolt::Util::Bolt do
|
8
|
+
include VagrantBolt::Util::Bolt
|
9
|
+
let(:config) { VagrantBolt::Config::Bolt.new }
|
10
|
+
let(:local_data_path) { '/local/data/path' }
|
11
|
+
let(:inventory_path) { "#{local_data_path}/bolt_inventory.yaml" }
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
config.finalize!
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'generating the inventory file' do
|
18
|
+
let(:env) { double 'env' }
|
19
|
+
let(:machine) do
|
20
|
+
double(
|
21
|
+
name: 'machine',
|
22
|
+
ssh_info: {
|
23
|
+
host: 'machine',
|
24
|
+
},
|
25
|
+
)
|
26
|
+
end
|
27
|
+
let(:machine_hash) do
|
28
|
+
{
|
29
|
+
"alias" => "machine",
|
30
|
+
"config" => {
|
31
|
+
"ssh" => {
|
32
|
+
"host-key-check" => false,
|
33
|
+
"port" => "22",
|
34
|
+
"user" => "vagrant",
|
35
|
+
"password" => "foo",
|
36
|
+
"private-key" => "bar",
|
37
|
+
"run-as" => "root",
|
38
|
+
},
|
39
|
+
"transport" => "ssh",
|
40
|
+
},
|
41
|
+
"name" => "ssh://machine:22",
|
42
|
+
"facts" => { 'a' => 'b' },
|
43
|
+
"vars" => { 'foo' => 'bar' },
|
44
|
+
"features" => ['foo'],
|
45
|
+
}
|
46
|
+
end
|
47
|
+
let(:config_hash) { { 'config' => { 'a' => 'b' } } }
|
48
|
+
let(:node_hash) do
|
49
|
+
{
|
50
|
+
'nodes' => [machine_hash],
|
51
|
+
'config' => config_hash['config'],
|
52
|
+
}
|
53
|
+
end
|
54
|
+
before(:each) do
|
55
|
+
config.password = 'foo'
|
56
|
+
config.run_as = 'root'
|
57
|
+
config.port = '22'
|
58
|
+
config.private_key = 'bar'
|
59
|
+
config.host_key_check = false
|
60
|
+
config.user = 'vagrant'
|
61
|
+
config.facts = { 'a' => 'b' }
|
62
|
+
config.features = ['foo']
|
63
|
+
config.vars = { 'foo' => 'bar' }
|
64
|
+
config.finalize!
|
65
|
+
allow(machine).to receive_message_chain("config.bolt.inventory_config").and_return(config.inventory_config)
|
66
|
+
allow(machine).to receive_message_chain("config.vm.communicator").and_return(:ssh)
|
67
|
+
allow(machine).to receive_message_chain('communicate.ready?').and_return(true)
|
68
|
+
allow(env).to receive_message_chain("vagrantfile.config.bolt.inventory_config").and_return(config_hash)
|
69
|
+
allow(env).to receive(:active_machines).and_return(['machine'])
|
70
|
+
allow(env).to receive(:machine).and_return(machine)
|
71
|
+
allow_any_instance_of(VagrantBolt::Util::Machine).to receive(:nodes_in_environment).with(env).and_return([machine])
|
72
|
+
allow_any_instance_of(VagrantBolt::Util::Machine).to receive(:running?).with(machine).and_return(true)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'creates a node group hash' do
|
76
|
+
expect(subject.generate_node_hash(machine)).to eq(machine_hash)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'creates an inventory hash with groups' do
|
80
|
+
expect(subject.generate_inventory_hash(env)).to eq(node_hash)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'create bolt command' do
|
85
|
+
before(:each) do
|
86
|
+
config.bolt_exe = 'bolt'
|
87
|
+
config.command = 'task'
|
88
|
+
config.name = 'foo'
|
89
|
+
config.finalize!
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'contains the bolt command' do
|
93
|
+
config.node_list = 'ssh://test:22'
|
94
|
+
config.user = 'user'
|
95
|
+
config.finalize!
|
96
|
+
expected = "bolt task run 'foo' --user \'user\' --inventoryfile '#{inventory_path}' --nodes \'ssh://test:22\'"
|
97
|
+
expect(subject.generate_bolt_command(config, inventory_path)).to eq(expected)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'appends args to the end of the command' do
|
101
|
+
config.args = 'bar'
|
102
|
+
config.finalize!
|
103
|
+
expected = "bolt task run 'foo' --inventoryfile '#{inventory_path}' bar"
|
104
|
+
expect(subject.generate_bolt_command(config, inventory_path)).to eq(expected)
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'adds directories to the command' do
|
108
|
+
config.modulepath = 'baz'
|
109
|
+
config.boltdir = 'foo'
|
110
|
+
config.finalize!
|
111
|
+
expected = "bolt task run 'foo' --boltdir 'foo' --modulepath 'baz' --inventoryfile '#{inventory_path}'"
|
112
|
+
expect(subject.generate_bolt_command(config, inventory_path)).to eq(expected)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'adds booleans to the command' do
|
116
|
+
config.verbose = true
|
117
|
+
config.ssl = false
|
118
|
+
config.finalize!
|
119
|
+
expected = "bolt task run 'foo' --no-ssl --verbose --inventoryfile '#{inventory_path}'"
|
120
|
+
expect(subject.generate_bolt_command(config, inventory_path)).to eq(expected)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'adds params to the command' do
|
124
|
+
config.params = { 'a' => 'b' }
|
125
|
+
config.finalize!
|
126
|
+
expected = "bolt task run 'foo' --params '{\"a\":\"b\"}' --inventoryfile '#{inventory_path}'"
|
127
|
+
expect(subject.generate_bolt_command(config, inventory_path)).to eq(expected)
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'adds debug, verbose, and noop when true' do
|
131
|
+
config.debug = true
|
132
|
+
config.verbose = true
|
133
|
+
config.noop = true
|
134
|
+
config.finalize!
|
135
|
+
expected = "bolt task run 'foo' --verbose --debug --noop --inventoryfile '#{inventory_path}'"
|
136
|
+
expect(subject.generate_bolt_command(config, inventory_path)).to eq(expected)
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'debug, verbose, and noop are omitted when false' do
|
140
|
+
config.debug = false
|
141
|
+
config.verbose = false
|
142
|
+
config.noop = false
|
143
|
+
config.finalize!
|
144
|
+
expected = "bolt task run 'foo' --inventoryfile '#{inventory_path}'"
|
145
|
+
expect(subject.generate_bolt_command(config, inventory_path)).to eq(expected)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'vagrant-bolt/util/config'
|
5
|
+
require 'vagrant-bolt/config'
|
6
|
+
|
7
|
+
describe VagrantBolt::Util::Config do
|
8
|
+
let(:global) { VagrantBolt::Config::Bolt.new }
|
9
|
+
let(:local) { VagrantBolt::Config::Bolt.new }
|
10
|
+
let(:local_data_path) { '/local/data/path' }
|
11
|
+
let(:inventory_path) { "#{local_data_path}/bolt_inventory.yaml" }
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
global.finalize!
|
15
|
+
local.finalize!
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'merging local and global configs' do
|
19
|
+
it 'uses global if local is unset' do
|
20
|
+
global.name = 'foo'
|
21
|
+
global.finalize!
|
22
|
+
result = subject.merge_config(local, global)
|
23
|
+
expect(result.name).to eq('foo')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'uses local if local and global are both set' do
|
27
|
+
global.name = 'foo'
|
28
|
+
global.finalize!
|
29
|
+
local.name = 'bar'
|
30
|
+
local.finalize!
|
31
|
+
result = subject.merge_config(local, global)
|
32
|
+
expect(result.name).to eq('bar')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'does not allow nil overrides' do
|
36
|
+
global.name = 'foo'
|
37
|
+
global.finalize!
|
38
|
+
local.name = nil
|
39
|
+
local.finalize!
|
40
|
+
result = subject.merge_config(local, global)
|
41
|
+
expect(result.name).to eq('foo')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'merges arrays' do
|
45
|
+
global.excludes = ['foo']
|
46
|
+
global.finalize!
|
47
|
+
local.excludes = ['bar']
|
48
|
+
local.finalize!
|
49
|
+
result = subject.merge_config(local, global)
|
50
|
+
expect(result.excludes).to eq(['bar', 'foo'])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
namespace :acceptance do
|
2
|
+
desc "displays components that can be tested"
|
3
|
+
task :components do
|
4
|
+
exec("vagrant-spec components --config=acceptance/vagrant-spec.config.rb")
|
5
|
+
end
|
6
|
+
|
7
|
+
task :setup do
|
8
|
+
box = 'alpine/alpine64'
|
9
|
+
box_version = '3.7.0'
|
10
|
+
provider_name = 'virtualbox'
|
11
|
+
box_owner, box_name = box.split('/')
|
12
|
+
box_path = File.join('acceptance', 'artifacts', "#{provider_name}.box")
|
13
|
+
if !File.exist?(box_path)
|
14
|
+
$stderr.puts "Downloading guest box #{box}"
|
15
|
+
cmd = "curl -Lf -o #{box_path} https://app.vagrantup.com/#{box_owner}/boxes/#{box_name}/versions/#{box_version}/providers/#{provider_name}.box"
|
16
|
+
result = system(cmd)
|
17
|
+
if !result
|
18
|
+
$stderr.puts
|
19
|
+
$stderr.puts "ERROR: Failed to download guest box #{guest_box} for #{provider_name}!"
|
20
|
+
exit 1
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "runs acceptance tests"
|
26
|
+
task :run do
|
27
|
+
args = [
|
28
|
+
"--config=acceptance/vagrant-spec.config.rb",
|
29
|
+
]
|
30
|
+
|
31
|
+
if ENV["COMPONENTS"]
|
32
|
+
args << "--components=\"#{ENV["COMPONENTS"]}\""
|
33
|
+
end
|
34
|
+
|
35
|
+
command = "vagrant-spec test #{args.join(" ")}"
|
36
|
+
puts command
|
37
|
+
puts
|
38
|
+
exec(command)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
task :acceptance do
|
43
|
+
Rake::Task['acceptance:setup'].invoke
|
44
|
+
Rake::Task['acceptance:run'].invoke
|
45
|
+
end
|
data/tasks/spec.rake
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
vagrant-bolt:
|
4
|
+
config:
|
5
|
+
bolt:
|
6
|
+
errors:
|
7
|
+
no_task_or_plan: |-
|
8
|
+
No name set. A task, plan, or command name must be specified to use the bolt provisioner
|
9
|
+
command_not_specified: |-
|
10
|
+
No command set. Please specify either "task", "plan", or "command"
|
11
|
+
invalid_command: |-
|
12
|
+
Type can only be "task", "plan", or "command", not %{command}
|
13
|
+
invalid_data_command: |-
|
14
|
+
Invalid data command for %{item} must be %{command}
|
15
|
+
noop_compatibility: |-
|
16
|
+
Noop is not compatible with %{command}. Please use a task.
|
17
|
+
provisioner:
|
18
|
+
bolt:
|
19
|
+
info:
|
20
|
+
running_bolt: |-
|
21
|
+
Bolt: Running bolt command locally: %{command}
|
22
|
+
error:
|
23
|
+
dependent_machines_offline: |-
|
24
|
+
Bolt: Dependent Machine not online: %{name}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'vagrant-bolt/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = 'vagrant-bolt'
|
8
|
+
gem.version = VagrantBolt::VERSION
|
9
|
+
gem.date = Date.today.to_s
|
10
|
+
|
11
|
+
gem.summary = 'Vagrant provisioning with Puppet Bolt'
|
12
|
+
gem.description = <<-DESC
|
13
|
+
Vagrant provisioning with Puppet Bolt
|
14
|
+
DESC
|
15
|
+
|
16
|
+
gem.authors = ['Jarret Lavallee']
|
17
|
+
gem.email = ['jarret.lavallee@gmail.com']
|
18
|
+
gem.homepage = 'https://github.com/oscar-stack/vagrant-bolt'
|
19
|
+
|
20
|
+
gem.files = %x{git ls-files -z}.split("\0")
|
21
|
+
gem.require_path = 'lib'
|
22
|
+
|
23
|
+
gem.license = 'Apache-2.0'
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-bolt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jarret Lavallee
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-12-11 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: " Vagrant provisioning with Puppet Bolt\n"
|
14
|
+
email:
|
15
|
+
- jarret.lavallee@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".gitignore"
|
21
|
+
- ".rspec"
|
22
|
+
- ".rubocop.yml"
|
23
|
+
- ".travis.yml"
|
24
|
+
- ".yardopts"
|
25
|
+
- Gemfile
|
26
|
+
- LICENSE
|
27
|
+
- Puppetfile
|
28
|
+
- README.md
|
29
|
+
- Rakefile
|
30
|
+
- Vagrantfile
|
31
|
+
- acceptance/artifacts/.keep
|
32
|
+
- acceptance/components/bolt_spec.rb
|
33
|
+
- acceptance/skeletons/advanced/Vagrantfile
|
34
|
+
- acceptance/skeletons/base/Vagrantfile
|
35
|
+
- acceptance/skeletons/base/modules/facts/CHANGELOG.md
|
36
|
+
- acceptance/skeletons/base/modules/facts/CONTRIBUTING.md
|
37
|
+
- acceptance/skeletons/base/modules/facts/Gemfile
|
38
|
+
- acceptance/skeletons/base/modules/facts/LICENSE
|
39
|
+
- acceptance/skeletons/base/modules/facts/README.md
|
40
|
+
- acceptance/skeletons/base/modules/facts/Rakefile
|
41
|
+
- acceptance/skeletons/base/modules/facts/checksums.json
|
42
|
+
- acceptance/skeletons/base/modules/facts/lib/puppet/functions/facts/group_by.rb
|
43
|
+
- acceptance/skeletons/base/modules/facts/metadata.json
|
44
|
+
- acceptance/skeletons/base/modules/facts/plans/info.pp
|
45
|
+
- acceptance/skeletons/base/modules/facts/plans/init.pp
|
46
|
+
- acceptance/skeletons/base/modules/facts/tasks/bash.json
|
47
|
+
- acceptance/skeletons/base/modules/facts/tasks/bash.sh
|
48
|
+
- acceptance/skeletons/base/modules/facts/tasks/init.json
|
49
|
+
- acceptance/skeletons/base/modules/facts/tasks/powershell.json
|
50
|
+
- acceptance/skeletons/base/modules/facts/tasks/powershell.ps1
|
51
|
+
- acceptance/skeletons/base/modules/facts/tasks/ruby.json
|
52
|
+
- acceptance/skeletons/base/modules/facts/tasks/ruby.rb
|
53
|
+
- acceptance/skeletons/provisioner/Vagrantfile
|
54
|
+
- acceptance/skeletons/trigger/Vagrantfile
|
55
|
+
- acceptance/vagrant-spec.config.rb
|
56
|
+
- lib/vagrant-bolt.rb
|
57
|
+
- lib/vagrant-bolt/command.rb
|
58
|
+
- lib/vagrant-bolt/config.rb
|
59
|
+
- lib/vagrant-bolt/config/bolt.rb
|
60
|
+
- lib/vagrant-bolt/config/global.rb
|
61
|
+
- lib/vagrant-bolt/config_builder.rb
|
62
|
+
- lib/vagrant-bolt/config_builder/config.rb
|
63
|
+
- lib/vagrant-bolt/config_builder/monkey_patches.rb
|
64
|
+
- lib/vagrant-bolt/config_builder/provisioner.rb
|
65
|
+
- lib/vagrant-bolt/config_builder/triggers.rb
|
66
|
+
- lib/vagrant-bolt/plugin.rb
|
67
|
+
- lib/vagrant-bolt/provisioner.rb
|
68
|
+
- lib/vagrant-bolt/runner.rb
|
69
|
+
- lib/vagrant-bolt/util/bolt.rb
|
70
|
+
- lib/vagrant-bolt/util/config.rb
|
71
|
+
- lib/vagrant-bolt/util/machine.rb
|
72
|
+
- lib/vagrant-bolt/version.rb
|
73
|
+
- spec/spec_helper.rb
|
74
|
+
- spec/unit/config/bolt_spec.rb
|
75
|
+
- spec/unit/config/global_spec.rb
|
76
|
+
- spec/unit/provisioner/bolt_spec.rb
|
77
|
+
- spec/unit/runner/runner_spec.rb
|
78
|
+
- spec/unit/util/bolt_spec.rb
|
79
|
+
- spec/unit/util/config_spec.rb
|
80
|
+
- spec/unit/vagrant_spec.rb
|
81
|
+
- tasks/acceptance.rake
|
82
|
+
- tasks/spec.rake
|
83
|
+
- templates/locales/en.yml
|
84
|
+
- vagrant-bolt.gemspec
|
85
|
+
homepage: https://github.com/oscar-stack/vagrant-bolt
|
86
|
+
licenses:
|
87
|
+
- Apache-2.0
|
88
|
+
metadata: {}
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 2.7.6
|
106
|
+
signing_key:
|
107
|
+
specification_version: 4
|
108
|
+
summary: Vagrant provisioning with Puppet Bolt
|
109
|
+
test_files: []
|