generate-puppetfile 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +33 -0
- data/lib/generate_puppetfile/bin.rb +12 -12
- data/lib/generate_puppetfile/optparser.rb +4 -0
- data/lib/generate_puppetfile/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 614002454318ec3de6dc470fad81e00e57c2b750
|
4
|
+
data.tar.gz: 39bb78f3cd1d05d32e3c298e0d8b0eacf66b5a6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73859a79af4d3b17769eaa18499f684b29ec91a5850bf5149d5bc7f74ca06515921a1b727bfb918c50c75b6502ec6a90aa442db5b859b67dee971139fe2801df
|
7
|
+
data.tar.gz: 8e267c59fc4b76f4276b351b73c2a621d70e3ec586304156692afe007200e8c4ffedc5073b265df82e4caa7e231d209f91d0a451cbe26dbe8191618d54f2def7
|
data/README.md
CHANGED
@@ -100,6 +100,39 @@ mod 'lab_config',
|
|
100
100
|
:git => 'git@github.com:puppetinabox/lab_config.git'
|
101
101
|
=======================================================================
|
102
102
|
```
|
103
|
+
#### extending puppet modules & bolt projects
|
104
|
+
|
105
|
+
Due to the nature of the generate-puppetfile gem it makes an excellent tool for developing the Puppetfile for [bolt projects]( https://puppet.com/docs/bolt/latest/bolt_project_directories.html). Seeing the simplest way to create a Bolt project is with the Puppet PDK this approach extends that use case. Add the following to your `.sync.yml` in a pdk managed module and run `pdk update`.zd
|
106
|
+
|
107
|
+
```
|
108
|
+
Gemfile:
|
109
|
+
optional:
|
110
|
+
':development':
|
111
|
+
- gem: 'generate-puppetfile'
|
112
|
+
version: '~> 1.0
|
113
|
+
```
|
114
|
+
|
115
|
+
Add the following to `/rakelib/generate_puppetfile.rake` to create a rake target for the experimental `pdk bundle` feature. You can then use `pdk bundle exec rake generate_puppetfile` to generate the puppetfile based on the modules metadata.
|
116
|
+
|
117
|
+
```
|
118
|
+
require 'json'
|
119
|
+
|
120
|
+
desc 'generate puppetfile'
|
121
|
+
task :generate_puppetfile, [:mod] do |t, args|
|
122
|
+
args.with_defaults(:mod => JSON.parse(File.read('metadata.json'))['name'])
|
123
|
+
sh "generate-puppetfile -c #{args.mod}"
|
124
|
+
end
|
125
|
+
```
|
126
|
+
Add the following to `/rakelib/generate_fixturesfile.rake` to create a rake target for the experimental `pdk bundle` feature. You can then use `pdk bundle exec rake generate_fixturesfile` to generate the `.fixtures.yaml` based on the module metadata to aid in testing with the `pdk test` feature.
|
127
|
+
|
128
|
+
```
|
129
|
+
desc 'generate fixtures'
|
130
|
+
task :generate_fixturesfile do |t|
|
131
|
+
mod = JSON.parse(File.read('metadata.json'))['name']
|
132
|
+
sh "generate-puppetfile -f -p ./Puppetfile #{mod} --fixtures-only -m #{mod}"
|
133
|
+
end
|
134
|
+
```
|
135
|
+
|
103
136
|
|
104
137
|
## Limitations
|
105
138
|
|
@@ -11,11 +11,11 @@ require 'uri'
|
|
11
11
|
module GeneratePuppetfile
|
12
12
|
# Internal: The Bin class contains the logic for calling generate_puppetfile at the command line
|
13
13
|
class Bin
|
14
|
-
Module_Regex = %r{^\s*mod ['
|
15
|
-
Repository_Regex = %r{^\s*mod\s+['
|
16
|
-
Location_Only_Regex = %r{^\s+:git\s+=>\s+['
|
17
|
-
Location_Plus_Regex = %r{^\s+:git\s+=>\s+['
|
18
|
-
Type_ID_Regex = %r{^\s+:(\w+)\s+=>\s+['
|
14
|
+
Module_Regex = %r{^\s*mod ['"]([a-z0-9_]+[/-][a-z0-9_]+)['"](,\s+['"](\d+\.\d+\.\d+)['"])?\s*(?:#.*)?$}i
|
15
|
+
Repository_Regex = %r{^\s*mod\s+['"](\w+)['"]\s*,\s*(?:#.*)?$}i
|
16
|
+
Location_Only_Regex = %r{^\s+:git\s+=>\s+['"](\S+)['"]\s*(?:#.*)?$}i
|
17
|
+
Location_Plus_Regex = %r{^\s+:git\s+=>\s+['"](\S+)['"]\s*,\s*(?:#.*)?$}i
|
18
|
+
Type_ID_Regex = %r{^\s+:(\w+)\s+=>\s+['"](\S+)['"]\s*(?:#.*)?$}i
|
19
19
|
Forge_Regex = %r{^forge}
|
20
20
|
Blanks_Regex = %r{^\s*$}
|
21
21
|
Comments_Regex = %r{^\s*#}
|
@@ -435,6 +435,7 @@ forge 'https://forge.puppet.com'
|
|
435
435
|
paths = modulepath.split(':').delete_if { |path| path =~ /^\$/ }
|
436
436
|
paths.each do |path|
|
437
437
|
Dir["#{path}/*"].each do |module_location|
|
438
|
+
next unless File.directory?(module_location)
|
438
439
|
module_name = File.basename(module_location)
|
439
440
|
module_path = module_location
|
440
441
|
symlinks << {
|
@@ -456,14 +457,14 @@ forge 'https://forge.puppet.com'
|
|
456
457
|
fixtures_data = "fixtures:\n"
|
457
458
|
if symlinks
|
458
459
|
fixtures_data += " symlinks:\n"
|
459
|
-
symlinks.each do |symlink|
|
460
|
+
symlinks.sort_by!{|symlink| symlink[:name]}.each do |symlink|
|
460
461
|
fixtures_data += " #{symlink[:name]}: #{symlink[:path]}\n"
|
461
462
|
end
|
462
463
|
end
|
463
464
|
|
464
465
|
unless @repository_data.empty?
|
465
466
|
fixtures_data += " repositories:\n"
|
466
|
-
@repository_data.each do |repodata|
|
467
|
+
@repository_data.sort_by!{|repo| repo[:name]}.each do |repodata|
|
467
468
|
# Each repository has two or pieces of data
|
468
469
|
# Mandatory: the module name, the URI/location
|
469
470
|
# Optional: the type (ref, branch, commit, etc.) and ID (tag, branch name, commit hash, etc.)
|
@@ -476,7 +477,7 @@ forge 'https://forge.puppet.com'
|
|
476
477
|
#{name}:
|
477
478
|
repo: "#{location}"
|
478
479
|
EOF
|
479
|
-
data += " #{type}: \"#{id}\"\n"
|
480
|
+
data += " #{type}: \"#{id}\"\n" unless @options[:latest_versions] || !type || !id
|
480
481
|
|
481
482
|
fixtures_data += data
|
482
483
|
end
|
@@ -485,15 +486,14 @@ forge 'https://forge.puppet.com'
|
|
485
486
|
|
486
487
|
unless @module_data.empty?
|
487
488
|
fixtures_data += " forge_modules:\n"
|
488
|
-
@module_data.keys.each do |modulename|
|
489
|
-
shortname = modulename.split(
|
489
|
+
@module_data.keys.sort_by!{|mod| mod.split(/[\/-]/)[1]}.each do |modulename|
|
490
|
+
shortname = modulename.split(/[\/-]/)[1]
|
490
491
|
version = @module_data[modulename]
|
491
492
|
data = <<-EOF
|
492
493
|
#{shortname}:
|
493
494
|
repo: "#{modulename}"
|
494
|
-
ref: "#{version}"
|
495
495
|
EOF
|
496
|
-
data
|
496
|
+
data += " ref: \"#{version}\"\n" unless @options[:latest_versions] || version.nil?
|
497
497
|
|
498
498
|
fixtures_data += data
|
499
499
|
end
|
@@ -36,6 +36,10 @@ module GeneratePuppetfile
|
|
36
36
|
options[:modulename] = name
|
37
37
|
end
|
38
38
|
|
39
|
+
opts.on('-l', '--latest-versions', "Use latest version of forge modules and default branch of repository modules in .fixtures.yml") do |name|
|
40
|
+
options[:latest_versions] = true
|
41
|
+
end
|
42
|
+
|
39
43
|
opts.on('-s', '--silent', 'Run in silent mode. Supresses all non-debug output. Adds the -c flag automatically.') do
|
40
44
|
options[:silent] = true
|
41
45
|
options[:create_puppetfile] = true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: generate-puppetfile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Nelson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-11-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colorize
|
@@ -157,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
157
|
version: '0'
|
158
158
|
requirements: []
|
159
159
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.6.
|
160
|
+
rubygems_version: 2.6.14
|
161
161
|
signing_key:
|
162
162
|
specification_version: 4
|
163
163
|
summary: Generate a Puppetfile
|