librarian-puppet-rethinc 3.0.1.1

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.
@@ -0,0 +1,176 @@
1
+ require 'librarian/puppet/util'
2
+
3
+ module Librarian
4
+ module Puppet
5
+ module Source
6
+ module Local
7
+ include Librarian::Puppet::Util
8
+
9
+ def install!(manifest)
10
+ manifest.source == self or raise ArgumentError
11
+
12
+ debug { "Installing #{manifest}" }
13
+
14
+ name, version = manifest.name, manifest.version
15
+ found_path = found_path(name)
16
+ raise Error, "Path for #{name} doesn't contain a puppet module" if found_path.nil?
17
+
18
+ unless name.include? '/' or name.include? '-'
19
+ warn { "Invalid module name '#{name}', you should qualify it with 'ORGANIZATION-#{name}' for resolution to work correctly" }
20
+ end
21
+
22
+ install_path = environment.install_path.join(module_name(name))
23
+ if install_path.exist? && rsync? != true
24
+ debug { "Deleting #{relative_path_to(install_path)}" }
25
+ install_path.rmtree
26
+ end
27
+
28
+ install_perform_step_copy!(found_path, install_path)
29
+ end
30
+
31
+ def fetch_version(name, extra)
32
+ cache!
33
+ found_path = found_path(name)
34
+ module_version
35
+ end
36
+
37
+ def fetch_dependencies(name, version, extra)
38
+ dependencies = Set.new
39
+
40
+ if specfile?
41
+ spec = environment.dsl(Pathname(specfile))
42
+ dependencies.merge spec.dependencies
43
+ end
44
+
45
+ parsed_metadata['dependencies'].each do |d|
46
+ gem_requirement = Librarian::Dependency::Requirement.new(d['version_requirement']).to_gem_requirement
47
+ new_dependency = Dependency.new(d['name'], gem_requirement, forge_source, name)
48
+ dependencies << new_dependency
49
+ end
50
+
51
+ dependencies
52
+ end
53
+
54
+ def forge_source
55
+ Forge.default
56
+ end
57
+
58
+ private
59
+
60
+ # Naming this method 'version' causes an exception to be raised.
61
+ def module_version
62
+ if parsed_metadata['version']
63
+ parsed_metadata['version']
64
+ else
65
+ warn { "Module #{to_s} does not have version, defaulting to 0.0.1" }
66
+ '0.0.1'
67
+ end
68
+ end
69
+
70
+ def require_puppet
71
+ begin
72
+ require 'puppet'
73
+ require 'puppet/module_tool'
74
+ rescue LoadError
75
+ $stderr.puts <<-EOF
76
+ Unable to load puppet, the puppet gem is required for :git and :path source.
77
+ Install it with: gem install puppet
78
+ EOF
79
+ exit 1
80
+ end
81
+ true
82
+ end
83
+
84
+ def evaluate_modulefile(modulefile)
85
+ @@require_puppet ||= require_puppet
86
+
87
+ metadata = ::Puppet::ModuleTool::Metadata.new
88
+
89
+ # Puppet 4 does not have the class
90
+ unless defined? ::Puppet::ModuleTool::ModulefileReader
91
+ warn { "Can't parse Modulefile in Puppet >= 4.0 and you are using #{Librarian::Puppet::puppet_version}. Ignoring dependencies in #{modulefile}" }
92
+ return metadata
93
+ end
94
+
95
+ begin
96
+ ::Puppet::ModuleTool::ModulefileReader.evaluate(metadata, modulefile)
97
+ raise SyntaxError, "Missing version" unless metadata.version
98
+ rescue ArgumentError, SyntaxError => error
99
+ warn { "Unable to parse #{modulefile}, ignoring: #{error}" }
100
+ if metadata.respond_to? :version=
101
+ metadata.version = '0.0.1' # puppet < 3.6
102
+ else
103
+ metadata.update({'version' => '0.0.1'}) # puppet >= 3.6
104
+ end
105
+ end
106
+ metadata
107
+ end
108
+
109
+ def parsed_metadata
110
+ if @metadata.nil?
111
+ @metadata = if metadata?
112
+ begin
113
+ JSON.parse(File.read(metadata))
114
+ rescue JSON::ParserError => e
115
+ raise Error, "Unable to parse json file #{metadata}: #{e}"
116
+ end
117
+ elsif modulefile?
118
+ # translate Modulefile to metadata.json
119
+ evaluated = evaluate_modulefile(modulefile)
120
+ {
121
+ 'version' => evaluated.version,
122
+ 'dependencies' => evaluated.dependencies.map do |dependency|
123
+ {
124
+ 'name' => dependency.instance_variable_get(:@full_module_name),
125
+ 'version_requirement' => dependency.instance_variable_get(:@version_requirement)
126
+ }
127
+ end
128
+ }
129
+ else
130
+ {}
131
+ end
132
+ @metadata['dependencies'] ||= []
133
+ end
134
+ @metadata
135
+ end
136
+
137
+ def modulefile
138
+ File.join(filesystem_path, 'Modulefile')
139
+ end
140
+
141
+ def modulefile?
142
+ File.exists?(modulefile)
143
+ end
144
+
145
+ def metadata
146
+ File.join(filesystem_path, 'metadata.json')
147
+ end
148
+
149
+ def metadata?
150
+ File.exists?(metadata)
151
+ end
152
+
153
+ def specfile
154
+ File.join(filesystem_path, environment.specfile_name)
155
+ end
156
+
157
+ def specfile?
158
+ File.exists?(specfile)
159
+ end
160
+
161
+ def install_perform_step_copy!(found_path, install_path)
162
+ debug { "Copying #{relative_path_to(found_path)} to #{relative_path_to(install_path)}" }
163
+ cp_r(found_path, install_path)
164
+ end
165
+
166
+ def manifest?(name, path)
167
+ return true if path.join('manifests').exist?
168
+ return true if path.join('lib').join('puppet').exist?
169
+ return true if path.join('lib').join('facter').exist?
170
+ debug { "Could not find manifests, lib/puppet or lib/facter under #{path}, maybe it is not a puppet module" }
171
+ true
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,12 @@
1
+ require 'librarian/source/path'
2
+ require 'librarian/puppet/source/local'
3
+
4
+ module Librarian
5
+ module Puppet
6
+ module Source
7
+ class Path < Librarian::Source::Path
8
+ include Local
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,46 @@
1
+ # parent class for githubtarball and forge source Repos
2
+ module Librarian
3
+ module Puppet
4
+ module Source
5
+ class Repo
6
+
7
+ attr_accessor :source, :name
8
+ private :source=, :name=
9
+
10
+ def initialize(source, name)
11
+ self.source = source
12
+ self.name = name
13
+ end
14
+
15
+ def environment
16
+ source.environment
17
+ end
18
+
19
+ def cache_path
20
+ @cache_path ||= source.cache_path.join(name)
21
+ end
22
+
23
+ def version_unpacked_cache_path(version)
24
+ if environment.use_short_cache_path
25
+ # Take only the first 7 digits of the SHA1 checksum of the
26
+ # module name + version
27
+ # (short Git commit hash approach)
28
+ dir = Digest::SHA1.hexdigest("#{name}-#{version.to_s}")[0..6]
29
+ source.cache_path.join(dir)
30
+ else
31
+ cache_path.join(version.to_s)
32
+ end
33
+ end
34
+
35
+ def vendored?(name, version)
36
+ vendored_path(name, version).exist?
37
+ end
38
+
39
+ def vendored_path(name, version)
40
+ environment.vendor_cache.join("#{name}-#{version}.tar.gz")
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ require 'librarian/puppet/source/path'
2
+ require 'librarian/puppet/source/git'
3
+ require 'librarian/puppet/source/forge'
4
+ require 'librarian/puppet/source/githubtarball'
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ #^syntax detection
3
+
4
+ forge "https://forgeapi.puppetlabs.com"
5
+
6
+ # use dependencies defined in metadata.json
7
+ metadata
8
+
9
+ # use dependencies defined in Modulefile
10
+ # modulefile
11
+
12
+ # A module from the Puppet Forge
13
+ # mod 'puppetlabs-stdlib'
14
+
15
+ # A module from git
16
+ # mod 'puppetlabs-ntp',
17
+ # :git => 'git://github.com/puppetlabs/puppetlabs-ntp.git'
18
+
19
+ # A module from a git branch/tag
20
+ # mod 'puppetlabs-apt',
21
+ # :git => 'https://github.com/puppetlabs/puppetlabs-apt.git',
22
+ # :ref => '1.4.x'
23
+
24
+ # A module from Github pre-packaged tarball
25
+ # mod 'puppetlabs-apache', '0.6.0', :github_tarball => 'puppetlabs/puppetlabs-apache'
@@ -0,0 +1,78 @@
1
+ require 'rsync'
2
+
3
+ module Librarian
4
+ module Puppet
5
+
6
+ module Util
7
+
8
+ def debug(*args, &block)
9
+ environment.logger.debug(*args, &block)
10
+ end
11
+ def info(*args, &block)
12
+ environment.logger.info(*args, &block)
13
+ end
14
+ def warn(*args, &block)
15
+ environment.logger.warn(*args, &block)
16
+ end
17
+
18
+ def rsync?
19
+ environment.config_db.local['rsync'] == 'true'
20
+ end
21
+
22
+ # workaround Issue #173 FileUtils.cp_r will fail if there is a symlink that points to a missing file
23
+ # or when the symlink is copied before the target file when preserve is true
24
+ # see also https://tickets.opscode.com/browse/CHEF-833
25
+ #
26
+ # If the rsync configuration parameter is set, use rsync instead of FileUtils
27
+ def cp_r(src, dest)
28
+ if rsync?
29
+ if Gem.win_platform?
30
+ src_clean = "#{src}".gsub(/^([a-z])\:/i,'/cygdrive/\1')
31
+ dest_clean = "#{dest}".gsub(/^([a-z])\:/i,'/cygdrive/\1')
32
+ else
33
+ src_clean = src
34
+ dest_clean = dest
35
+ end
36
+ debug { "Copying #{src_clean}/ to #{dest_clean}/ with rsync -avz --delete" }
37
+ result = Rsync.run(File.join(src_clean, "/"), File.join(dest_clean, "/"), ['-avz', '--delete'])
38
+ if result.success?
39
+ debug { "Rsync from #{src_clean}/ to #{dest_clean}/ successful" }
40
+ else
41
+ msg = "Failed to rsync from #{src_clean}/ to #{dest_clean}/: " + result.error
42
+ raise Error, msg
43
+ end
44
+ else
45
+ begin
46
+ FileUtils.cp_r(src, dest, :preserve => true)
47
+ rescue Errno::ENOENT, Errno::EACCES
48
+ debug { "Failed to copy from #{src} to #{dest} preserving file types, trying again without preserving them" }
49
+ FileUtils.rm_rf(dest)
50
+ FileUtils.cp_r(src, dest)
51
+ end
52
+ end
53
+ end
54
+
55
+ # Remove user and password from a URI object
56
+ def clean_uri(uri)
57
+ new_uri = uri.clone
58
+ new_uri.user = nil
59
+ new_uri.password = nil
60
+ new_uri
61
+ end
62
+
63
+ # normalize module name to use organization-module instead of organization/module
64
+ def normalize_name(name)
65
+ name.sub('/','-')
66
+ end
67
+
68
+ # get the module name from organization-module
69
+ def module_name(name)
70
+ # module name can't have dashes, so let's assume it is everything after the last dash
71
+ name.rpartition('-').last
72
+ end
73
+
74
+ # deprecated
75
+ alias :organization_name :module_name
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,5 @@
1
+ module Librarian
2
+ module Puppet
3
+ VERSION = "3.0.1"
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ require 'librarian'
2
+ require 'fileutils'
3
+
4
+ require 'librarian/puppet/extension'
5
+ require 'librarian/puppet/version'
6
+
7
+ require 'librarian/action/install'
8
+
9
+ module Librarian
10
+ module Puppet
11
+ @@puppet_version = "7.14.0"
12
+
13
+ # Output of puppet --version, typically x.y.z
14
+ # For Puppet Enterprise it contains the PE version too, ie. 3.4.3 (Puppet Enterprise 3.2.1)
15
+ def puppet_version
16
+ return @@puppet_version unless @@puppet_version.nil?
17
+ end
18
+
19
+ # Puppet version x.y.z translated as a Gem version
20
+ def puppet_gem_version
21
+ Gem::Version.create(puppet_version.split(' ').first.strip.gsub('-', '.'))
22
+ end
23
+
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,242 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: librarian-puppet-rethinc
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Tim Sharpe
8
+ - Carlos Sanchez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2022-02-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: librarianp
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 0.6.3
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: 0.6.3
28
+ - !ruby/object:Gem::Dependency
29
+ name: rsync
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: puppet_forge
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '2.1'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '4'
52
+ type: :runtime
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '2.1'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '4'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ - !ruby/object:Gem::Dependency
77
+ name: rspec
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: cucumber
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "<"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.0
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "<"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0
104
+ - !ruby/object:Gem::Dependency
105
+ name: aruba
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "<"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.8.0
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "<"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.8.0
118
+ - !ruby/object:Gem::Dependency
119
+ name: puppet
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: minitest
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '5'
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '5'
146
+ - !ruby/object:Gem::Dependency
147
+ name: mocha
148
+ requirement: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ type: :development
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ - !ruby/object:Gem::Dependency
161
+ name: simplecov
162
+ requirement: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 0.9.0
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: 0.9.0
174
+ description: |-
175
+ Simplify deployment of your Puppet infrastructure by
176
+ automatically pulling in modules from the forge and git repositories withcd /agr
177
+ a single command.
178
+ email:
179
+ - tim@sharpe.id.au
180
+ - carlos@apache.org
181
+ executables:
182
+ - librarian-puppet
183
+ extensions: []
184
+ extra_rdoc_files: []
185
+ files:
186
+ - ".gitignore"
187
+ - LICENSE
188
+ - README.md
189
+ - bin/librarian-puppet
190
+ - lib/librarian/puppet.rb
191
+ - lib/librarian/puppet/action.rb
192
+ - lib/librarian/puppet/action/install.rb
193
+ - lib/librarian/puppet/action/resolve.rb
194
+ - lib/librarian/puppet/cli.rb
195
+ - lib/librarian/puppet/dependency.rb
196
+ - lib/librarian/puppet/dsl.rb
197
+ - lib/librarian/puppet/environment.rb
198
+ - lib/librarian/puppet/extension.rb
199
+ - lib/librarian/puppet/lockfile.rb
200
+ - lib/librarian/puppet/resolver.rb
201
+ - lib/librarian/puppet/rethinc.rb
202
+ - lib/librarian/puppet/source.rb
203
+ - lib/librarian/puppet/source/forge.rb
204
+ - lib/librarian/puppet/source/forge/repo.rb
205
+ - lib/librarian/puppet/source/forge/repo_v1.rb
206
+ - lib/librarian/puppet/source/forge/repo_v3.rb
207
+ - lib/librarian/puppet/source/git.rb
208
+ - lib/librarian/puppet/source/githubtarball.rb
209
+ - lib/librarian/puppet/source/githubtarball/repo.rb
210
+ - lib/librarian/puppet/source/local.rb
211
+ - lib/librarian/puppet/source/path.rb
212
+ - lib/librarian/puppet/source/repo.rb
213
+ - lib/librarian/puppet/templates/Puppetfile
214
+ - lib/librarian/puppet/util.rb
215
+ - lib/librarian/puppet/version.rb
216
+ homepage: https://github.com/voxpupuli/librarian-puppet
217
+ licenses:
218
+ - MIT
219
+ metadata: {}
220
+ post_install_message:
221
+ rdoc_options: []
222
+ require_paths:
223
+ - lib
224
+ required_ruby_version: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: 2.4.0
229
+ - - "<"
230
+ - !ruby/object:Gem::Version
231
+ version: '4'
232
+ required_rubygems_version: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ requirements: []
238
+ rubygems_version: 3.2.5
239
+ signing_key:
240
+ specification_version: 4
241
+ summary: Bundler for your Puppet modules
242
+ test_files: []