rzo 0.7.0 → 0.8.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/.rubocop.yml +4 -4
- data/.travis.yml +2 -2
- data/README.md +99 -94
- data/Rakefile +7 -7
- data/ext/_rizzo.yaml +23 -0
- data/lib/rzo/app.rb +1 -1
- data/lib/rzo/app/config.rb +1 -1
- data/lib/rzo/app/config_validation.rb +8 -7
- data/lib/rzo/app/generate.rb +62 -6
- data/lib/rzo/app/roles.rb +2 -0
- data/lib/rzo/app/subcommand.rb +19 -15
- data/lib/rzo/app/templates/Vagrantfile.erb +27 -4
- data/lib/rzo/option_parsing.rb +3 -2
- data/lib/rzo/version.rb +1 -1
- data/rzo.gemspec +2 -3
- data/scripts/functional_gem_behavior.sh +39 -33
- data/scripts/json2yaml.rb +14 -0
- metadata +9 -22
- data/ext/_rizzo.json +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2954e0711d95a790a603140732d64ad23aa31b4
|
4
|
+
data.tar.gz: e4240edc192d28ddc36cc95f7a07663b1a2aff9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 798d1d7b8934a933bf1799811b07a6e9621971777aeadf80fe114e46796153a810c6f1a88f9ce6ff129d1cf8a1407e7c8bc4d58afa542d4b64b5dc6fc64788ed
|
7
|
+
data.tar.gz: b85c666c757ca10feb5bc8bff846a1104ef0b264f295e7ad7d309b211a77cab3ee2b5c7de463ade2e544a6007b7346990bb24f178b53e239f5cc17f254c15965
|
data/.rubocop.yml
CHANGED
@@ -19,9 +19,6 @@ Style/InverseMethods:
|
|
19
19
|
Style/FrozenStringLiteralComment:
|
20
20
|
Enabled: false
|
21
21
|
|
22
|
-
Lint/UnneededDisable:
|
23
|
-
Enabled: false
|
24
|
-
|
25
22
|
Layout/MultilineOperationIndentation:
|
26
23
|
Enabled: false
|
27
24
|
|
@@ -50,7 +47,10 @@ Style/Next:
|
|
50
47
|
Style/NonNilCheck:
|
51
48
|
Enabled: false
|
52
49
|
|
53
|
-
Style/
|
50
|
+
Style/TrailingCommaInArrayLiteral:
|
51
|
+
Enabled: false
|
52
|
+
|
53
|
+
Style/TrailingCommaInHashLiteral:
|
54
54
|
Enabled: false
|
55
55
|
|
56
56
|
Style/TrailingCommaInArguments:
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -4,14 +4,14 @@ Rizzo is a heavily customized Vagrant configuration and work flow with a
|
|
4
4
|
role based focus. It is meant to make working with Vagrant easier and
|
5
5
|
purpose built for layered Puppet control repositories.
|
6
6
|
|
7
|
-
Rizzo loads a personal configuration file, `~/.rizzo.
|
8
|
-
lists one or more control repositories.
|
9
|
-
`.rizzo.
|
10
|
-
repository.
|
7
|
+
Rizzo loads a personal configuration file, `~/.rizzo.yaml` by default, which
|
8
|
+
lists one or more control repositories. Rizzo then looks for and loads a
|
9
|
+
`.rizzo.yaml` configuration file located at the root of the top level control
|
10
|
+
repository. The top level control repository is the first listed in
|
11
11
|
the array of control repositories in the personal configuration file.
|
12
12
|
|
13
13
|
There should be at least one node for every role that is managed by a
|
14
|
-
control repo. This information is stored in `.rizzo.
|
14
|
+
control repo. This information is stored in `.rizzo.yaml` under the
|
15
15
|
control repo. This makes it apparent what roles are available and aids
|
16
16
|
in functional testing.
|
17
17
|
|
@@ -29,7 +29,7 @@ Tested to work with ruby versions associated with Puppet, see
|
|
29
29
|
|
30
30
|
# Installation
|
31
31
|
|
32
|
-
Add the rizzo gem to your control repository `Gemfile`.
|
32
|
+
Add the rizzo gem to your control repository `Gemfile`. For example, in
|
33
33
|
`puppetdata`:
|
34
34
|
|
35
35
|
```diff
|
@@ -61,7 +61,7 @@ bundle exec rizzo --help
|
|
61
61
|
usage: rizzo [GLOBAL OPTIONS] SUBCOMMAND [ARGS]
|
62
62
|
Sub Commands:
|
63
63
|
|
64
|
-
config Print out the combined rizzo
|
64
|
+
config Print out the combined rizzo yaml config
|
65
65
|
generate Initialize Vagrantfile in top control repo
|
66
66
|
|
67
67
|
Global options: (Note, command line arguments supersede ENV vars in {}'s)
|
@@ -69,12 +69,12 @@ Global options: (Note, command line arguments supersede ENV vars in {}'s)
|
|
69
69
|
-s, --syslog Log to syslog
|
70
70
|
-v, --verbose Set log level to INFO
|
71
71
|
-d, --debug Set log level to DEBUG
|
72
|
-
-c, --config=<s> Rizzo config file {RZO_CONFIG} (default: ~/.rizzo.
|
72
|
+
-c, --config=<s> Rizzo config file {RZO_CONFIG} (default: ~/.rizzo.yaml)
|
73
73
|
-e, --version Print version and exit
|
74
74
|
-h, --help Show this message
|
75
75
|
```
|
76
76
|
|
77
|
-
Once rizzo is installed, setup your configuration file, `~/.rizzo.
|
77
|
+
Once rizzo is installed, setup your configuration file, `~/.rizzo.yaml`, then
|
78
78
|
use `bundle exec rizzo generate` to write the `Vagrantfile` in your control
|
79
79
|
repo.
|
80
80
|
|
@@ -94,48 +94,40 @@ repo.
|
|
94
94
|
|
95
95
|
# Setup
|
96
96
|
|
97
|
-
## `~/.rizzo.
|
97
|
+
## `~/.rizzo.yaml`
|
98
98
|
|
99
|
-
The personal configuration file is loaded first, from `~/.rizzo.
|
99
|
+
The personal configuration file is loaded first, from `~/.rizzo.yaml` by default.
|
100
100
|
The global `--config` option allows the end user to specific a different path to
|
101
101
|
the personal configuration file.
|
102
102
|
|
103
103
|
Using this example, change the paths to your git repos:
|
104
104
|
|
105
|
-
```
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
"
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
"/repos/ghoneycutt": {
|
129
|
-
"local": "/Users/gh/git/puppet-modules",
|
130
|
-
"owner": "root",
|
131
|
-
"group": "root"
|
132
|
-
}
|
133
|
-
}
|
134
|
-
}
|
135
|
-
}
|
105
|
+
```yaml
|
106
|
+
---
|
107
|
+
defaults:
|
108
|
+
bootstrap_repo_path: "/Users/gh/git/bootstrap"
|
109
|
+
control_repos:
|
110
|
+
- "/Users/gh/git/puppet-control-myteam"
|
111
|
+
- "/Users/gh/git/puppetdata"
|
112
|
+
- "/Users/gh/git/puppet-modules"
|
113
|
+
puppetmaster:
|
114
|
+
name: "infra-puppetca"
|
115
|
+
modulepath:
|
116
|
+
- "./modules"
|
117
|
+
- "./puppetdata/modules"
|
118
|
+
- "./ghoneycutt/modules"
|
119
|
+
synced_folders:
|
120
|
+
/repos/puppetdata:
|
121
|
+
local: "/Users/gh/git/puppetdata"
|
122
|
+
owner: "root"
|
123
|
+
group: "root"
|
124
|
+
/repos/ghoneycutt:
|
125
|
+
local: "/Users/gh/git/puppet-modules"
|
126
|
+
owner: "root"
|
127
|
+
group: "root"
|
136
128
|
```
|
137
129
|
|
138
|
-
Once you have a personal config file, `~/.rizzo.
|
130
|
+
Once you have a personal config file, `~/.rizzo.yaml`, change directories to
|
139
131
|
your top level control repository and generate your `Vagrantfile`:
|
140
132
|
|
141
133
|
```shell
|
@@ -171,15 +163,15 @@ VM, run `vagrant status NAME`.
|
|
171
163
|
### defaults
|
172
164
|
|
173
165
|
The defaults hash is merged with each node entries hash. Put user
|
174
|
-
specific entries in the personal configuration file at `~/.rizzo.
|
175
|
-
control repo specific entries in `${PATH_TO_CONTROL_REPO}/.rizzo.
|
166
|
+
specific entries in the personal configuration file at `~/.rizzo.yaml` and
|
167
|
+
control repo specific entries in `${PATH_TO_CONTROL_REPO}/.rizzo.yaml`.
|
176
168
|
|
177
169
|
### control_repos
|
178
170
|
|
179
171
|
The control_repos array is a list of control repos. Rizzo takes the
|
180
172
|
approach that control repos are layered. The ordering should match your
|
181
173
|
`puppetmaster['modulepath']` array. The first control repo with a
|
182
|
-
`.rizzo.
|
174
|
+
`.rizzo.yaml` in it will have that Rizzo config used.
|
183
175
|
|
184
176
|
### puppetmaster
|
185
177
|
|
@@ -207,52 +199,54 @@ local, which is the path on the host and owner and group which are the
|
|
207
199
|
owner and group permissions the directory will be mounted with on the
|
208
200
|
guest.
|
209
201
|
|
210
|
-
## `controlrepo/.rizzo.
|
211
|
-
|
212
|
-
```
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
"
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
"
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
202
|
+
## `controlrepo/.rizzo.yaml`
|
203
|
+
|
204
|
+
```yaml
|
205
|
+
---
|
206
|
+
defaults:
|
207
|
+
bootstrap_script_path: "bootstrap_puppet4.sh"
|
208
|
+
bootstrap_script_args: "-l -f `hostname -f`"
|
209
|
+
bootstrap_guest_path: "/tmp/bootstrap"
|
210
|
+
boot_timeout: 500
|
211
|
+
box: "centos7.box"
|
212
|
+
box_url: "https://vagrantboxes/centos7.box"
|
213
|
+
box_download_checksum: "3764a2c4ae3829aa4b50971e216c3a03736aafb2"
|
214
|
+
box_download_checksum_type: "sha1"
|
215
|
+
memory: "1024"
|
216
|
+
netmask: "255.255.255.0"
|
217
|
+
update_packages: true
|
218
|
+
update_packages_command: "yum -y update"
|
219
|
+
shutdown: true
|
220
|
+
shutdown_command: "/sbin/shutdown -h now"
|
221
|
+
nodes:
|
222
|
+
- name: "infra-puppetca"
|
223
|
+
hostname: "infra-puppetca1.example.org"
|
224
|
+
forwarded_ports:
|
225
|
+
- guest: "8140"
|
226
|
+
host: "8140"
|
227
|
+
ip: "172.16.100.5"
|
228
|
+
memory: "2048"
|
229
|
+
- name: "infra-puppet"
|
230
|
+
hostname: "infra-puppet1.example.org"
|
231
|
+
ip: "172.16.100.6"
|
232
|
+
memory: "2048"
|
233
|
+
- name: "www-api"
|
234
|
+
hostname: "www-api1.example.org"
|
235
|
+
ip: "172.16.100.7"
|
236
|
+
- name: "mssql1"
|
237
|
+
hostname: "mysql1.example.org"
|
238
|
+
forwarded_ports:
|
239
|
+
- guest: "5985"
|
240
|
+
host: "5985"
|
241
|
+
ip: "172.16.100.8"
|
242
|
+
windows: true
|
243
|
+
gui: true
|
244
|
+
shutdown: false
|
245
|
+
update_packages: false
|
246
|
+
box: "mwrock/Windows2016"
|
247
|
+
box_url: ~
|
248
|
+
box_download_checksum: ~
|
249
|
+
box_download_checksum_type: ~
|
256
250
|
```
|
257
251
|
|
258
252
|
### defaults
|
@@ -308,10 +302,10 @@ Path of script to be used to bootstrap a system. This is relative to
|
|
308
302
|
|
309
303
|
Any arguments to pass to `bootstrap_script_path`.
|
310
304
|
|
311
|
-
#### boot_timeout
|
305
|
+
#### boot_timeout (Integer)
|
312
306
|
|
313
307
|
Optional parameter that sets the amount of time is seconds that Vagrant waits for
|
314
|
-
a node to become available via ssh before it fails.
|
308
|
+
a node to become available via ssh before it fails. Default is 300 seconds.
|
315
309
|
|
316
310
|
#### box
|
317
311
|
|
@@ -352,3 +346,14 @@ ensure the guest additions are working.
|
|
352
346
|
#### shutdown_command
|
353
347
|
|
354
348
|
The command used to shutdown the system.
|
349
|
+
|
350
|
+
#### gui
|
351
|
+
|
352
|
+
If this is set to `true` the GUI will be enabled. This brings up the
|
353
|
+
VirtualBox window and aid in debugging on Windows systems.
|
354
|
+
|
355
|
+
#### windows
|
356
|
+
|
357
|
+
If this is set to `true`, extra options will be included to let Vagrant
|
358
|
+
know this is a windows host and to use WinRM for the connect. It will
|
359
|
+
also use the `name` entry instead of `hostname`.
|
data/Rakefile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'yaml'
|
2
2
|
require 'rubocop/rake_task'
|
3
3
|
require 'bundler/gem_tasks'
|
4
4
|
require 'rspec/core/rake_task'
|
@@ -8,13 +8,13 @@ RSpec::Core::RakeTask.new(:spec)
|
|
8
8
|
|
9
9
|
desc 'Validation tests'
|
10
10
|
task :validate do
|
11
|
-
puts '=== Validating
|
12
|
-
filelist = FileList.new('**/*.
|
11
|
+
puts '=== Validating YAML (*.yaml) files'
|
12
|
+
filelist = FileList.new('**/*.yaml')
|
13
13
|
filelist.exclude('.bundle/**')
|
14
|
-
filelist.each do |
|
15
|
-
puts
|
16
|
-
|
17
|
-
|
14
|
+
filelist.each do |yaml_file|
|
15
|
+
puts yaml_file
|
16
|
+
yaml = File.read(yaml_file)
|
17
|
+
YAML.parse(yaml)
|
18
18
|
end
|
19
19
|
|
20
20
|
puts "\n=== Validating ruby (*.rb, Vagrantfile, Rakefile and Gemfile) files"
|
data/ext/_rizzo.yaml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
defaults:
|
3
|
+
bootstrap_repo_path: "/Users/jeff/projects/acme/bootstrap"
|
4
|
+
control_repos:
|
5
|
+
- "/Users/jeff/projects/acme/puppetdata"
|
6
|
+
- "/Users/jeff/projects/acme/ghoneycutt-modules"
|
7
|
+
puppetmaster:
|
8
|
+
name:
|
9
|
+
- infra-puppetfourca
|
10
|
+
- infra-puppetfour
|
11
|
+
modulepath:
|
12
|
+
- "./modules"
|
13
|
+
- "./puppetdata/modules"
|
14
|
+
- "./ghoneycutt/modules"
|
15
|
+
synced_folders:
|
16
|
+
"/repos/puppetdata":
|
17
|
+
local: "/Users/jeff/projects/acme/puppetdata"
|
18
|
+
owner: root
|
19
|
+
group: root
|
20
|
+
"/repos/ghoneycutt":
|
21
|
+
local: "/Users/jeff/projects/acme/ghoneycutt-modules"
|
22
|
+
owner: root
|
23
|
+
group: root
|
data/lib/rzo/app.rb
CHANGED
data/lib/rzo/app/config.rb
CHANGED
@@ -7,15 +7,15 @@ module Rzo
|
|
7
7
|
##
|
8
8
|
# Mix-in module providing configuration validation methods and safety
|
9
9
|
# checking. The goal is to provide useful feedback to the end user in the
|
10
|
-
# situation where ~/.rizzo.
|
10
|
+
# situation where ~/.rizzo.yaml is configured to point at directories which
|
11
11
|
# do not exist, have missing keys, etc...
|
12
12
|
# rubocop:disable Metrics/ModuleLength
|
13
13
|
module ConfigValidation
|
14
14
|
## Rizzo configuration schema for the personal configuration file at
|
15
|
-
# ~/.rizzo.
|
15
|
+
# ~/.rizzo.yaml. Minimum necessary to load the complete configuration from
|
16
16
|
# all control repositories.
|
17
17
|
RZO_PERSONAL_CONFIG_SCHEMA = {
|
18
|
-
'$schema' => 'http://json-schema.org/draft
|
18
|
+
'$schema' => 'http://json-schema.org/draft/schema#',
|
19
19
|
title: 'Personal Configuration',
|
20
20
|
description: 'Rizzo personal configuration file',
|
21
21
|
type: 'object',
|
@@ -60,7 +60,7 @@ module Rzo
|
|
60
60
|
items: { type: 'string' },
|
61
61
|
},
|
62
62
|
synced_folders: {
|
63
|
-
'$schema' => 'http://json-schema.org/draft
|
63
|
+
'$schema' => 'http://json-schema.org/draft/schema#',
|
64
64
|
type: 'object',
|
65
65
|
properties: {
|
66
66
|
'/' => {},
|
@@ -160,7 +160,7 @@ module Rzo
|
|
160
160
|
|
161
161
|
##
|
162
162
|
# Validate a personal configuration, typically originating from
|
163
|
-
# ~/.rizzo.
|
163
|
+
# ~/.rizzo.yaml. This configuration is necessary to build a complete
|
164
164
|
# control repo configuration using the top level control repo. This
|
165
165
|
# validation focuses on the minimum necessary configuration to bootstrap
|
166
166
|
# the complete configuration, primarily the repo locations and existence.
|
@@ -175,9 +175,9 @@ module Rzo
|
|
175
175
|
|
176
176
|
##
|
177
177
|
# Validate a complete loaded configuration. This is distinct from a base
|
178
|
-
# configuration in that the
|
178
|
+
# configuration in that the YAML files in each control repository have
|
179
179
|
# already been merged, in order, on top of the base configuration
|
180
|
-
# originating at ~/.rizzo.
|
180
|
+
# originating at ~/.rizzo.yaml. This implements safety checking. These
|
181
181
|
# methods are expected to execute within the context of a
|
182
182
|
# Rzo::App::Subcommand instance, therefore log methods and the parsed
|
183
183
|
# configuration are assumed to be available.
|
@@ -304,3 +304,4 @@ module Rzo
|
|
304
304
|
# rubocop:enable Metrics/ModuleLength
|
305
305
|
end
|
306
306
|
end
|
307
|
+
# rubocop:enable Style/GuardClause
|
data/lib/rzo/app/generate.rb
CHANGED
@@ -17,7 +17,7 @@ module Rzo
|
|
17
17
|
exit_status = 0
|
18
18
|
load_config!
|
19
19
|
# Vagrantfile
|
20
|
-
erbfile = File.expand_path('
|
20
|
+
erbfile = File.expand_path('templates/Vagrantfile.erb', __dir__)
|
21
21
|
content = vagrantfile_content(erbfile, config)
|
22
22
|
write_file(opts[:vagrantfile]) { |fd| fd.write(content) }
|
23
23
|
say "Wrote vagrant config to #{opts[:vagrantfile]}"
|
@@ -33,19 +33,27 @@ module Rzo
|
|
33
33
|
#
|
34
34
|
# @return [Array<Hash>] list of agent nodes to fill in the Vagrantfile
|
35
35
|
# template.
|
36
|
+
# rubocop:disable Metrics/AbcSize
|
37
|
+
# rubocop:disable Metrics/MethodLength
|
36
38
|
def vagrantfile_agents(config)
|
37
39
|
pm_settings = puppetmaster_settings(config)
|
38
40
|
agent_nodes = [*config['nodes']].reject do |n|
|
39
41
|
pm_settings['name'].include?(n['name'])
|
40
42
|
end
|
41
43
|
|
42
|
-
agent_nodes.
|
43
|
-
n
|
44
|
+
agent_nodes.map! do |n|
|
45
|
+
new_n = deep_convert_boolean(n)
|
46
|
+
defaults = deep_convert_boolean(config['defaults'])
|
47
|
+
new_n.deep_merge(defaults)
|
48
|
+
n = deep_unconvert_boolean(new_n)
|
44
49
|
log.debug "puppetagent #{n['name']} = \n" + n.pretty_inspect
|
50
|
+
n
|
45
51
|
end
|
46
52
|
|
47
53
|
agent_nodes
|
48
54
|
end
|
55
|
+
# rubocop:enable Metrics/MethodLength
|
56
|
+
# rubocop:enable Metrics/AbcSize
|
49
57
|
|
50
58
|
##
|
51
59
|
# Return a list of puppetmaster node definitions suitable for the
|
@@ -58,19 +66,26 @@ module Rzo
|
|
58
66
|
# Vagrantfile template.
|
59
67
|
#
|
60
68
|
# rubocop:disable Metrics/AbcSize
|
69
|
+
# rubocop:disable Metrics/MethodLength
|
61
70
|
def vagrantfile_puppet_masters(config)
|
62
71
|
pm_settings = puppetmaster_settings(config)
|
63
72
|
pm_names = pm_settings['name']
|
64
73
|
|
65
74
|
nodes = [*config['nodes']].find_all { |n| pm_names.include?(n['name']) }
|
66
|
-
nodes.
|
67
|
-
n
|
68
|
-
|
75
|
+
nodes.map! do |n|
|
76
|
+
new_n = deep_convert_boolean(n)
|
77
|
+
defaults = deep_convert_boolean(config['defaults'])
|
78
|
+
new_pm_settings = deep_convert_boolean(pm_settings)
|
79
|
+
new_n.deep_merge(defaults)
|
80
|
+
new_n.deep_merge(new_pm_settings)
|
81
|
+
n = deep_unconvert_boolean(new_n)
|
69
82
|
n[:puppetmaster] = true
|
70
83
|
log.debug "puppetmaster #{n['name']} = \n" + n.pretty_inspect
|
84
|
+
n
|
71
85
|
end
|
72
86
|
end
|
73
87
|
# rubocop:enable Metrics/AbcSize
|
88
|
+
# rubocop:enable Metrics/MethodLength
|
74
89
|
|
75
90
|
##
|
76
91
|
# Return the proxy configuration exception list as a string, or nil if not set.
|
@@ -82,6 +97,7 @@ module Rzo
|
|
82
97
|
def proxy_config(config)
|
83
98
|
# Proxy Setting
|
84
99
|
return nil unless config['config']
|
100
|
+
|
85
101
|
config['config']['no_proxy'] || DEFAULT_NO_PROXY
|
86
102
|
end
|
87
103
|
|
@@ -132,6 +148,46 @@ module Rzo
|
|
132
148
|
|
133
149
|
# Constants used by the Vagrantfile.erb template.
|
134
150
|
DEFAULT_NO_PROXY = 'localhost,127.0.0.1'.freeze
|
151
|
+
|
152
|
+
private
|
153
|
+
|
154
|
+
##
|
155
|
+
# Convert boolean to string for deep_merge
|
156
|
+
# rubocop:disable Metrics/MethodLength
|
157
|
+
def deep_convert_boolean(hash)
|
158
|
+
new_hash = {}
|
159
|
+
hash.each_pair do |key, value|
|
160
|
+
if value.is_a?(Hash)
|
161
|
+
new_hash[key] = deep_convert_boolean(value)
|
162
|
+
elsif value.is_a?(TrueClass)
|
163
|
+
new_hash[key] = 'true'
|
164
|
+
elsif value.is_a?(FalseClass)
|
165
|
+
new_hash[key] = 'false'
|
166
|
+
else
|
167
|
+
new_hash[key] = value
|
168
|
+
end
|
169
|
+
end
|
170
|
+
return new_hash
|
171
|
+
end
|
172
|
+
|
173
|
+
##
|
174
|
+
# Convert boolean strings to boolean for use after deep_merge
|
175
|
+
def deep_unconvert_boolean(hash)
|
176
|
+
new_hash = {}
|
177
|
+
hash.each_pair do |key, value|
|
178
|
+
if value.is_a?(Hash)
|
179
|
+
new_hash[key] = deep_unconvert_boolean(value)
|
180
|
+
elsif value == 'true'
|
181
|
+
new_hash[key] = true
|
182
|
+
elsif value == 'false'
|
183
|
+
new_hash[key] = false
|
184
|
+
else
|
185
|
+
new_hash[key] = value
|
186
|
+
end
|
187
|
+
end
|
188
|
+
return new_hash
|
189
|
+
end
|
190
|
+
# rubocop:enable Metrics/MethodLength
|
135
191
|
end
|
136
192
|
end
|
137
193
|
end
|
data/lib/rzo/app/roles.rb
CHANGED
data/lib/rzo/app/subcommand.rb
CHANGED
@@ -2,6 +2,7 @@ require 'pathname'
|
|
2
2
|
require 'rzo/logging'
|
3
3
|
require 'deep_merge'
|
4
4
|
require 'rzo/app/config_validation'
|
5
|
+
require 'yaml'
|
5
6
|
module Rzo
|
6
7
|
class App
|
7
8
|
# The base class for subcommands
|
@@ -13,7 +14,7 @@ module Rzo
|
|
13
14
|
# The options hash injected from the application controller via the
|
14
15
|
# initialize method.
|
15
16
|
attr_reader :opts
|
16
|
-
# The Rizzo configuration after loading ~/.rizzo.
|
17
|
+
# The Rizzo configuration after loading ~/.rizzo.yaml (--config).
|
17
18
|
# See #load_config!
|
18
19
|
attr_reader :config
|
19
20
|
# The present working directory at startup
|
@@ -24,10 +25,11 @@ module Rzo
|
|
24
25
|
def self.load_rizzo_config(fpath)
|
25
26
|
config_file = Pathname.new(fpath).expand_path
|
26
27
|
raise ErrorAndExit, "Cannot read config file #{config_file}" unless config_file.readable?
|
27
|
-
|
28
|
+
|
29
|
+
config = YAML.safe_load(config_file.read)
|
28
30
|
log.debug "Loaded #{config_file}"
|
29
31
|
config
|
30
|
-
rescue
|
32
|
+
rescue Psych::SyntaxError => e
|
31
33
|
raise ErrorAndExit, "Could not parse rizzo config #{config_file} #{e.message}"
|
32
34
|
end
|
33
35
|
|
@@ -59,14 +61,14 @@ module Rzo
|
|
59
61
|
# Load rizzo configuration. Populate @config.
|
60
62
|
#
|
61
63
|
# Read rizzo configuration by looping through control repos and stopping
|
62
|
-
# at first match and merge on top of local, defaults (~/.rizzo.
|
64
|
+
# at first match and merge on top of local, defaults (~/.rizzo.yaml)
|
63
65
|
def load_config!
|
64
66
|
config = load_rizzo_config(opts[:config])
|
65
67
|
validate_personal_config!(config)
|
66
68
|
repos = reorder_repos(config['control_repos'])
|
67
69
|
config['control_repos'] = repos
|
68
70
|
@config = load_repo_configs(config, repos)
|
69
|
-
debug "Merged configuration: \n#{
|
71
|
+
debug "Merged configuration: \n#{@config.to_yaml}"
|
70
72
|
# TODO: Move these validations to an instance method?
|
71
73
|
validate_complete_config!(@config)
|
72
74
|
# validate_forwarded_ports(@config)
|
@@ -75,7 +77,7 @@ module Rzo
|
|
75
77
|
end
|
76
78
|
|
77
79
|
##
|
78
|
-
# Given a list of repository paths, load .rizzo.
|
80
|
+
# Given a list of repository paths, load .rizzo.yaml from the root of each
|
79
81
|
# repository and return the result merged onto config. The merging
|
80
82
|
# behavior is implemented by
|
81
83
|
# [deep_merge](http://www.rubydoc.info/gems/deep_merge/1.1.1)
|
@@ -83,12 +85,12 @@ module Rzo
|
|
83
85
|
# @param [Hash] config the starting config hash. Repo config maps will be
|
84
86
|
# merged on top of this starting map.
|
85
87
|
#
|
86
|
-
# @param [Array] repos the list of repositories to load .rizzo.
|
88
|
+
# @param [Array] repos the list of repositories to load .rizzo.yaml from.
|
87
89
|
#
|
88
90
|
# @return [Hash] the merged configuration hash.
|
89
91
|
def load_repo_configs(config = {}, repos = [])
|
90
92
|
repos.each_with_object(config.dup) do |repo, hsh|
|
91
|
-
fp = Pathname.new(repo).expand_path + '.rizzo.
|
93
|
+
fp = Pathname.new(repo).expand_path + '.rizzo.yaml'
|
92
94
|
if readable?(fp.to_s)
|
93
95
|
hsh.deep_merge!(load_rizzo_config(fp.to_s))
|
94
96
|
else
|
@@ -130,7 +132,7 @@ module Rzo
|
|
130
132
|
# Helper to raise a duplicate port error
|
131
133
|
def raise_port_err(port, node)
|
132
134
|
raise ErrorAndExit, "host port #{port} on node #{node} " \
|
133
|
-
'is a duplicate. Ports must be unique. Check .rizzo.
|
135
|
+
'is a duplicate. Ports must be unique. Check .rizzo.yaml ' \
|
134
136
|
'files in each control repository for duplicate forwarded_ports entries.'
|
135
137
|
end
|
136
138
|
|
@@ -138,7 +140,7 @@ module Rzo
|
|
138
140
|
# Helper to raise a duplicate port error
|
139
141
|
def raise_ip_err(ip, node)
|
140
142
|
raise ErrorAndExit, "host ip #{ip} on node #{node} " \
|
141
|
-
'is a duplicate. IP addresses must be unique. Check .rizzo.
|
143
|
+
'is a duplicate. IP addresses must be unique. Check .rizzo.yaml ' \
|
142
144
|
'files in each control repository for duplicate ip entries'
|
143
145
|
end
|
144
146
|
|
@@ -175,22 +177,23 @@ module Rzo
|
|
175
177
|
##
|
176
178
|
# Memoized method to return the fully qualified path to the current rizzo
|
177
179
|
# project directory, based on the pwd. The project directory is the
|
178
|
-
# dirname of the full path to a `.rizzo.
|
179
|
-
# if not a project directory. ~/.rizzo.
|
180
|
+
# dirname of the full path to a `.rizzo.yaml` config file. Return false
|
181
|
+
# if not a project directory. ~/.rizzo.yaml is considered a personal
|
180
182
|
# configuration and not a project configuration.
|
181
183
|
#
|
182
184
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
183
185
|
def project_dir(path)
|
184
186
|
return @project_dir unless @project_dir.nil?
|
185
|
-
|
186
|
-
|
187
|
+
|
188
|
+
rizzo_file = Pathname.new("#{path}/.rizzo.yaml")
|
189
|
+
personal_config = Pathname.new(File.expand_path('~/.rizzo.yaml'))
|
187
190
|
iterations = 0
|
188
191
|
while @project_dir.nil? && iterations < 100
|
189
192
|
iterations += 1
|
190
193
|
if readable?(rizzo_file.to_s) && rizzo_file != personal_config
|
191
194
|
@project_dir = rizzo_file.dirname.to_s
|
192
195
|
else
|
193
|
-
rizzo_file = rizzo_file.dirname.dirname + '.rizzo.
|
196
|
+
rizzo_file = rizzo_file.dirname.dirname + '.rizzo.yaml'
|
194
197
|
@project_dir = false if rizzo_file.dirname.root?
|
195
198
|
end
|
196
199
|
end
|
@@ -211,5 +214,6 @@ module Rzo
|
|
211
214
|
end
|
212
215
|
end
|
213
216
|
end
|
217
|
+
# rubocop:enable Metrics/ClassLength
|
214
218
|
end
|
215
219
|
end
|
@@ -13,16 +13,35 @@ Vagrant.configure(2) do |config|
|
|
13
13
|
|
14
14
|
config.vm.define <%= nc['name'].inspect %>, autostart: false do |cfg|
|
15
15
|
cfg.vm.box = <%= nc['box'].inspect %>
|
16
|
+
<%- if nc['box_url'] -%>
|
16
17
|
cfg.vm.box_url = <%= nc['box_url'].inspect %>
|
18
|
+
<%- end -%>
|
19
|
+
<%- if nc['box_download_checksum'] -%>
|
17
20
|
cfg.vm.box_download_checksum = <%= nc['box_download_checksum'].inspect %>
|
21
|
+
<%- end -%>
|
22
|
+
<%- if nc['box_download_checksum_type'] -%>
|
18
23
|
cfg.vm.box_download_checksum_type = <%= nc['box_download_checksum_type'].inspect %>
|
24
|
+
<%- end -%>
|
19
25
|
<%- if nc['boot_timeout'] -%>
|
20
26
|
cfg.vm.boot_timeout = <%= nc['boot_timeout'].inspect %>
|
21
27
|
<%- end -%>
|
28
|
+
<%- if nc['memory'] || nc['gui'] -%>
|
22
29
|
cfg.vm.provider :virtualbox do |vb|
|
30
|
+
<%- if nc['memory'] -%>
|
23
31
|
vb.customize ['modifyvm', :id, '--memory', <%= nc['memory'].inspect %>]
|
32
|
+
<%- end -%>
|
33
|
+
<%- if nc['gui'] -%>
|
34
|
+
vb.gui = <%= nc['gui'].inspect %>
|
35
|
+
<%- end -%>
|
24
36
|
end
|
37
|
+
<%- end -%>
|
38
|
+
<%- if nc['windows'] == true -%>
|
39
|
+
cfg.vm.guest = :windows
|
40
|
+
cfg.vm.communicator = :winrm
|
41
|
+
cfg.vm.hostname = <%= nc['name'].inspect %>
|
42
|
+
<%- else -%>
|
25
43
|
cfg.vm.hostname = <%= nc['hostname'].inspect %>
|
44
|
+
<%- end -%>
|
26
45
|
cfg.vm.network 'private_network',
|
27
46
|
ip: <%= nc['ip'].inspect %>,
|
28
47
|
netmask: <%= nc['netmask'].inspect %>
|
@@ -40,17 +59,21 @@ Vagrant.configure(2) do |config|
|
|
40
59
|
cfg.vm.synced_folder <%= nc['bootstrap_repo_path'].inspect %>,
|
41
60
|
<%= nc['bootstrap_guest_path'].inspect %>,
|
42
61
|
owner: 'vagrant', group: 'root'
|
62
|
+
<%- end -%>
|
43
63
|
<%- if nc[:puppetmaster] -%>
|
44
64
|
cfg.vm.provision 'shell', inline: <%= "echo 'modulepath = #{nc['modulepath'].join(':')}' > #{nc['bootstrap_guest_path']}/environment.conf".inspect %>
|
45
65
|
<%- end -%>
|
46
|
-
|
47
|
-
|
66
|
+
<%- if nc['windows'] == true -%>
|
67
|
+
cfg.vm.provision 'shell', inline: <%= "#{nc['bootstrap_guest_path']}\\#{nc['bootstrap_script_path']} #{nc['bootstrap_script_args']}".inspect %>
|
68
|
+
<%- else -%>
|
69
|
+
cfg.vm.provision 'shell', inline: <%= "/bin/bash #{nc['bootstrap_guest_path']}/#{nc['bootstrap_script_path']} #{nc['bootstrap_script_args']}".inspect.chomp %>
|
70
|
+
<%- end -%>
|
71
|
+
<%- if nc['update_packages'] == true -%>
|
48
72
|
cfg.vm.provision 'shell', inline: <%= nc['update_packages_command'].inspect %>
|
49
73
|
<%- end -%>
|
50
|
-
<%- if nc['shutdown'] -%>
|
74
|
+
<%- if nc['shutdown'] == true -%>
|
51
75
|
cfg.vm.provision 'shell', inline: <%= nc['shutdown_command'].inspect %>
|
52
76
|
<%- end -%>
|
53
|
-
<%- end -%>
|
54
77
|
end
|
55
78
|
<%- end -%>
|
56
79
|
end
|
data/lib/rzo/option_parsing.rb
CHANGED
@@ -66,7 +66,7 @@ module Rzo
|
|
66
66
|
opt :debug, 'Set log level to DEBUG {RZO_DEBUG="true"}',
|
67
67
|
default: env['RZO_DEBUG'] == 'true'
|
68
68
|
opt :config, 'Rizzo config file {RZO_CONFIG}',
|
69
|
-
default: env['RZO_CONFIG'] || '~/.rizzo.
|
69
|
+
default: env['RZO_CONFIG'] || '~/.rizzo.yaml'
|
70
70
|
end
|
71
71
|
end
|
72
72
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
@@ -123,11 +123,12 @@ module Rzo
|
|
123
123
|
usage: #{NAME} [GLOBAL OPTIONS] SUBCOMMAND [ARGS]
|
124
124
|
Sub Commands:
|
125
125
|
|
126
|
-
config Print out the combined rizzo
|
126
|
+
config Print out the combined rizzo yaml config
|
127
127
|
generate Initialize Vagrantfile in top control repo
|
128
128
|
roles Output all roles defined in the combined config
|
129
129
|
|
130
130
|
Global options: (Note, command line arguments supersede ENV vars in {}'s)
|
131
131
|
BANNERMSG
|
132
|
+
# rubocop:enable Layout/IndentHeredoc
|
132
133
|
end
|
133
134
|
end
|
data/lib/rzo/version.rb
CHANGED
@@ -5,7 +5,7 @@ module Rzo
|
|
5
5
|
# The authoritative location of the rzo version. It should be possible to
|
6
6
|
# `require 'rizzo/version'` and access `Rizzo::VERSION` from third party
|
7
7
|
# libraries and the gemspec. The version is defined as a Semantic Version.
|
8
|
-
VERSION = '0.
|
8
|
+
VERSION = '0.8.0'.freeze
|
9
9
|
|
10
10
|
##
|
11
11
|
# Return the SemVer string, e.g. `"0.1.0"`
|
data/rzo.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'rzo/version'
|
4
4
|
|
@@ -40,6 +40,5 @@ Gem::Specification.new do |spec|
|
|
40
40
|
spec.add_development_dependency 'simplecov', '~> 0.14'
|
41
41
|
spec.add_development_dependency 'yard', '~> 0.9'
|
42
42
|
spec.add_dependency 'deep_merge', '~> 1.1'
|
43
|
-
spec.add_dependency 'json', '
|
44
|
-
spec.add_dependency 'json-schema', '~> 2.8'
|
43
|
+
spec.add_dependency 'json-schema', '>= 2.8.1'
|
45
44
|
end
|
@@ -90,19 +90,19 @@ debug() {
|
|
90
90
|
echo -e "${BLUE}Debug:${NC} $msg" >&2
|
91
91
|
}
|
92
92
|
|
93
|
-
# Move ~/.rizzo.
|
94
|
-
if [[ -e ~/.rizzo.
|
95
|
-
debug "Moving ~/.rizzo.
|
96
|
-
mv -f ~/.rizzo.
|
93
|
+
# Move ~/.rizzo.yaml out of the way if it exists
|
94
|
+
if [[ -e ~/.rizzo.yaml ]]; then
|
95
|
+
debug "Moving ~/.rizzo.yaml to ~/.rizzo.yaml.$STAMP"
|
96
|
+
mv -f ~/.rizzo.yaml ~/.rizzo.yaml.$STAMP
|
97
97
|
fi
|
98
98
|
|
99
99
|
# Clean up our temp directory
|
100
100
|
scratch=$(mktemp -d)
|
101
101
|
export TMPDIR="$scratch"
|
102
102
|
finish() {
|
103
|
-
if [[ -e ~/.rizzo.
|
104
|
-
mv -f ~/.rizzo.
|
105
|
-
debug "Moved ~/.rizzo.
|
103
|
+
if [[ -e ~/.rizzo.yaml.$STAMP ]]; then
|
104
|
+
mv -f ~/.rizzo.yaml.$STAMP ~/.rizzo.yaml
|
105
|
+
debug "Moved ~/.rizzo.yaml.$STAMP to ~/.rizzo.yaml"
|
106
106
|
fi
|
107
107
|
if [[ -d "$scratch" ]]; then
|
108
108
|
rm -rf "$scratch"
|
@@ -193,26 +193,38 @@ fi
|
|
193
193
|
# Puppet data repositories used by rizzo
|
194
194
|
PUPPETDATA="${TMPDIR}/git/puppetdata"
|
195
195
|
|
196
|
-
desc "With a valid ~/.rizzo.
|
197
|
-
cat > ~/.rizzo.
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
196
|
+
desc "With a valid ~/.rizzo.yaml file looking like:"
|
197
|
+
cat > ~/.rizzo.yaml <<EOCONFIG
|
198
|
+
---
|
199
|
+
defaults:
|
200
|
+
box: el6-rc5
|
201
|
+
bootstrap_repo_path: "${HOME}/git/bootstrap"
|
202
|
+
control_repos:
|
203
|
+
- ${PUPPETDATA}
|
204
|
+
- ${HOME}/git/ghoneycutt-modules
|
205
|
+
puppetmaster:
|
206
|
+
name:
|
207
|
+
- puppetca
|
208
|
+
- puppet
|
209
|
+
modulepath:
|
210
|
+
- ./modules
|
211
|
+
- ./puppetdata/modules
|
212
|
+
- ./ghoneycutt/modules
|
213
|
+
synced_folders:
|
214
|
+
/repos/puppetdata:
|
215
|
+
local: "${PUPPETDATA}"
|
216
|
+
owner: "root"
|
217
|
+
group: "root"
|
218
|
+
/repos/ghoneycutt:
|
219
|
+
local: "${HOME}/git/ghoneycutt-modules"
|
220
|
+
owner: "root"
|
221
|
+
group: "root"
|
210
222
|
EOCONFIG
|
211
223
|
# Print out the config
|
212
|
-
expected=$(mktemp -t XXXXXX.rizzo.
|
213
|
-
ruby -
|
224
|
+
expected=$(mktemp -t XXXXXX.rizzo.yaml)
|
225
|
+
ruby -ryaml -e 'puts YAML.safe_load(ARGF.read).to_yaml' ~/.rizzo.yaml | tee $expected
|
214
226
|
|
215
|
-
desc "rzo config is expected to pretty generate the
|
227
|
+
desc "rzo config is expected to pretty generate the YAML config"
|
216
228
|
stdout=$(mktemp -t XXXXXX.stdout)
|
217
229
|
stderr=$(mktemp -t XXXXXX.stderr)
|
218
230
|
rzo config > $stdout 2> $stderr
|
@@ -264,7 +276,7 @@ else
|
|
264
276
|
pass "It does."
|
265
277
|
fi
|
266
278
|
|
267
|
-
desc "rzo roles with no personal .rizzo.
|
279
|
+
desc "rzo roles with no personal .rizzo.yaml is expected to warn"
|
268
280
|
stdout=$(mktemp -t XXXXXX.stdout)
|
269
281
|
stderr=$(mktemp -t XXXXXX.stderr)
|
270
282
|
rzo roles 2> $stderr > $stdout
|
@@ -278,7 +290,7 @@ if ! [[ -d "$PUPPETDATA" ]]; then
|
|
278
290
|
mkdir -p "$PUPPETDATA"
|
279
291
|
debug "Created $PUPPETDATA"
|
280
292
|
fi
|
281
|
-
echo '{"nodes":[{"name":"puppetca"}]}' > ${PUPPETDATA}/.rizzo.
|
293
|
+
echo '{"nodes":[{"name":"puppetca"}]}' > ${PUPPETDATA}/.rizzo.yaml
|
282
294
|
|
283
295
|
stdout=$(mktemp -t XXXXXX.stdout)
|
284
296
|
stderr=$(mktemp -t XXXXXX.stderr)
|
@@ -304,13 +316,7 @@ Vagrant.configure(2) do |config|
|
|
304
316
|
end
|
305
317
|
|
306
318
|
config.vm.define "puppetca", autostart: false do |cfg|
|
307
|
-
cfg.vm.box =
|
308
|
-
cfg.vm.box_url = nil
|
309
|
-
cfg.vm.box_download_checksum = nil
|
310
|
-
cfg.vm.box_download_checksum_type = nil
|
311
|
-
cfg.vm.provider :virtualbox do |vb|
|
312
|
-
vb.customize ['modifyvm', :id, '--memory', nil]
|
313
|
-
end
|
319
|
+
cfg.vm.box = "el6-rc5"
|
314
320
|
cfg.vm.hostname = nil
|
315
321
|
cfg.vm.network 'private_network',
|
316
322
|
ip: nil,
|
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
input = ARGV[0]
|
7
|
+
|
8
|
+
json_data = File.read(input)
|
9
|
+
data = JSON.parse(json_data)
|
10
|
+
output = input.gsub('.json', '.yaml')
|
11
|
+
puts output
|
12
|
+
File.open(output, 'w') do |o|
|
13
|
+
o.write(data.to_yaml)
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rzo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garrett Honeycutt
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-11-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: guard
|
@@ -193,34 +193,20 @@ dependencies:
|
|
193
193
|
- - "~>"
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: '1.1'
|
196
|
-
- !ruby/object:Gem::Dependency
|
197
|
-
name: json
|
198
|
-
requirement: !ruby/object:Gem::Requirement
|
199
|
-
requirements:
|
200
|
-
- - "~>"
|
201
|
-
- !ruby/object:Gem::Version
|
202
|
-
version: '2.1'
|
203
|
-
type: :runtime
|
204
|
-
prerelease: false
|
205
|
-
version_requirements: !ruby/object:Gem::Requirement
|
206
|
-
requirements:
|
207
|
-
- - "~>"
|
208
|
-
- !ruby/object:Gem::Version
|
209
|
-
version: '2.1'
|
210
196
|
- !ruby/object:Gem::Dependency
|
211
197
|
name: json-schema
|
212
198
|
requirement: !ruby/object:Gem::Requirement
|
213
199
|
requirements:
|
214
|
-
- - "
|
200
|
+
- - ">="
|
215
201
|
- !ruby/object:Gem::Version
|
216
|
-
version:
|
202
|
+
version: 2.8.1
|
217
203
|
type: :runtime
|
218
204
|
prerelease: false
|
219
205
|
version_requirements: !ruby/object:Gem::Requirement
|
220
206
|
requirements:
|
221
|
-
- - "
|
207
|
+
- - ">="
|
222
208
|
- !ruby/object:Gem::Version
|
223
|
-
version:
|
209
|
+
version: 2.8.1
|
224
210
|
description: Rizzo (rzo) is a tool for working with Vagrant and layered Puppet control
|
225
211
|
repos
|
226
212
|
email:
|
@@ -247,7 +233,7 @@ files:
|
|
247
233
|
- bin/setup
|
248
234
|
- exe/rizzo
|
249
235
|
- exe/rzo
|
250
|
-
- ext/_rizzo.
|
236
|
+
- ext/_rizzo.yaml
|
251
237
|
- lib/rzo.rb
|
252
238
|
- lib/rzo/app.rb
|
253
239
|
- lib/rzo/app/config.rb
|
@@ -262,6 +248,7 @@ files:
|
|
262
248
|
- lib/rzo/version.rb
|
263
249
|
- rzo.gemspec
|
264
250
|
- scripts/functional_gem_behavior.sh
|
251
|
+
- scripts/json2yaml.rb
|
265
252
|
homepage: https://github.com/ghoneycutt/rizzo
|
266
253
|
licenses:
|
267
254
|
- Apache-2.0
|
@@ -283,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
283
270
|
version: '0'
|
284
271
|
requirements: []
|
285
272
|
rubyforge_project:
|
286
|
-
rubygems_version: 2.
|
273
|
+
rubygems_version: 2.6.14.1
|
287
274
|
signing_key:
|
288
275
|
specification_version: 4
|
289
276
|
summary: Rizzo (rzo) is a tool for working with Vagrant and layered Puppet control
|
data/ext/_rizzo.json
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"defaults": {
|
3
|
-
"bootstrap_repo_path": "/Users/jeff/projects/acme/bootstrap"
|
4
|
-
},
|
5
|
-
"control_repos": [
|
6
|
-
"/Users/jeff/projects/acme/puppetdata",
|
7
|
-
"/Users/jeff/projects/acme/ghoneycutt-modules"
|
8
|
-
],
|
9
|
-
"puppetmaster": {
|
10
|
-
"name": [
|
11
|
-
"infra-puppetfourca",
|
12
|
-
"infra-puppetfour"
|
13
|
-
],
|
14
|
-
"modulepath": [
|
15
|
-
"./modules",
|
16
|
-
"./puppetdata/modules",
|
17
|
-
"./ghoneycutt/modules"
|
18
|
-
],
|
19
|
-
"synced_folders": {
|
20
|
-
"/repos/puppetdata": {
|
21
|
-
"local": "/Users/jeff/projects/acme/puppetdata",
|
22
|
-
"owner": "root",
|
23
|
-
"group": "root"
|
24
|
-
},
|
25
|
-
"/repos/ghoneycutt": {
|
26
|
-
"local": "/Users/jeff/projects/acme/ghoneycutt-modules",
|
27
|
-
"owner": "root",
|
28
|
-
"group": "root"
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
32
|
-
}
|