Module: PDK::Util
- Defined in:
- lib/pdk/util.rb,
lib/pdk/util/git.rb,
lib/pdk/util/bundler.rb,
lib/pdk/util/version.rb,
lib/pdk/util/windows.rb,
lib/pdk/util/filesystem.rb,
lib/pdk/util/ruby_version.rb,
lib/pdk/util/vendored_file.rb,
lib/pdk/util/puppet_version.rb
Defined Under Namespace
Modules: Bundler, Filesystem, Git, Version, Windows Classes: PuppetVersion, RubyVersion, VendoredFile
Constant Summary collapse
- MODULE_FOLDERS =
%w[ manifests lib tasks facts.d functions types ].freeze
Class Method Summary collapse
-
.cachedir ⇒ String
Returns the fully qualified path to a per-user PDK cachedir.
-
.canonical_path(path) ⇒ String
Return an expanded, absolute path.
- .default_template_ref ⇒ Object
- .default_template_url ⇒ Object
- .development_mode? ⇒ Boolean
-
.find_all_json_in(text) ⇒ Array<Hash>
Iterate through possible JSON documents for all valid JSON.
-
.find_first_json_in(text) ⇒ Hash?
Iterate through possible JSON documents until we find one that is valid.
-
.find_upwards(target, start_dir = nil) ⇒ String?
Searches upwards from current working directory for the given target file.
-
.find_valid_json_in(text, opts = {}) ⇒ Hash, ...
Iterate through possible JSON documents until we find one that is valid.
- .gem_install? ⇒ Boolean
-
.in_module_root? ⇒ boolean
Returns true or false depending on if any of the common directories in a module are found in the current directory.
-
.make_tmpdir_name(base) ⇒ String
Generate a name for a temporary directory.
-
.module_metadata ⇒ Object
TO-DO: Refactor replacement of lib/pdk/module/build.rb:metadata to use this function instead.
-
.module_pdk_compatible? ⇒ Boolean
TO-DO: Refactor replacement of lib/pdk/module/build.rb:module_pdk_compatible? to use this function instead.
- .module_pdk_version ⇒ Object
-
.module_root ⇒ String?
Returns path to the root of the module being worked on.
- .package_cachedir ⇒ Object
- .package_install? ⇒ Boolean
- .pdk_package_basedir ⇒ Object
- .puppetlabs_template_ref ⇒ Object
- .puppetlabs_template_url ⇒ Object
-
.targets_relative_to_pwd(targets) ⇒ Array<String>
Returns the targets’ paths relative to the working directory.
Class Method Details
.cachedir ⇒ String
Returns the fully qualified path to a per-user PDK cachedir.
99 100 101 102 103 104 105 |
# File 'lib/pdk/util.rb', line 99 def cachedir if Gem.win_platform? File.join(ENV['LOCALAPPDATA'], 'PDK', 'cache') else File.join(Dir.home, '.pdk', 'cache') end end |
.canonical_path(path) ⇒ String
Return an expanded, absolute path
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/pdk/util.rb', line 57 def canonical_path(path) if Gem.win_platform? unless File.exist?(path) raise PDK::CLI::FatalError, _("Cannot resolve a full path to '%{path}', as it does not currently exist.") % { path: path } end PDK::Util::Windows::File.get_long_pathname(path) else File.(path) end end |
.default_template_ref ⇒ Object
240 241 242 243 244 245 |
# File 'lib/pdk/util.rb', line 240 def default_template_ref # TODO: This should respect a --template-ref option if we add that return 'origin/master' if default_template_url != puppetlabs_template_url puppetlabs_template_ref end |
.default_template_url ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'lib/pdk/util.rb', line 200 def default_template_url answer_file_url = PDK.answers['template-url'] return puppetlabs_template_url if answer_file_url.nil? # Ignore answer file template-url if the value is the old or new default. return puppetlabs_template_url if answer_file_url == 'https://github.com/puppetlabs/pdk-module-template' return puppetlabs_template_url if answer_file_url == puppetlabs_template_url if File.directory?(answer_file_url) # Instantiating a new TemplateDir object pointing to the directory # will cause the directory contents to be validated, raising # ArgumentError if it does not appear to be a valid template. PDK::Module::TemplateDir.new(answer_file_url) {} return answer_file_url end raise ArgumentError unless PDK::Util::Git.repo?(answer_file_url) answer_file_url rescue ArgumentError PDK.logger.warn( _("Unable to access the previously used template '%{template}', using the default template instead.") % { template: answer_file_url, }, ) PDK.answers.update!('template-url' => nil) return puppetlabs_template_url end |
.development_mode? ⇒ Boolean
74 75 76 |
# File 'lib/pdk/util.rb', line 74 def development_mode? (!PDK::Util::Version.git_ref.nil? || PDK::VERSION.end_with?('.pre')) end |
.find_all_json_in(text) ⇒ Array<Hash>
Iterate through possible JSON documents for all valid JSON
149 150 151 |
# File 'lib/pdk/util.rb', line 149 def find_all_json_in(text) find_valid_json_in(text, break_on_first: false) end |
.find_first_json_in(text) ⇒ Hash?
Iterate through possible JSON documents until we find one that is valid.
139 140 141 |
# File 'lib/pdk/util.rb', line 139 def find_first_json_in(text) find_valid_json_in(text) end |
.find_upwards(target, start_dir = nil) ⇒ String?
Searches upwards from current working directory for the given target file.
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/pdk/util.rb', line 27 def find_upwards(target, start_dir = nil) previous = nil current = File.(start_dir || Dir.pwd) until !File.directory?(current) || current == previous filename = File.join(current, target) return filename if File.file?(filename) previous = current current = File.('..', current) end end |
.find_valid_json_in(text, opts = {}) ⇒ Hash, ...
Iterate through possible JSON documents until we find one that is valid.
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/pdk/util.rb', line 164 def find_valid_json_in(text, opts = {}) break_on_first = opts.key?(:break_on_first) ? opts[:break_on_first] : true json_result = break_on_first ? nil : [] text.scan(%r{\{(?:[^{}]|(?:\g<0>))*\}}x) do |str| begin if break_on_first json_result = JSON.parse(str) break else json_result.push(JSON.parse(str)) end rescue JSON::ParserError next end end json_result end |
.gem_install? ⇒ Boolean
79 80 81 |
# File 'lib/pdk/util.rb', line 79 def gem_install? !(package_install? || development_mode?) end |
.in_module_root? ⇒ boolean
Returns true or false depending on if any of the common directories in a module are found in the current directory
129 130 131 |
# File 'lib/pdk/util.rb', line 129 def in_module_root? PDK::Util::MODULE_FOLDERS.any? { |dir| File.directory?(dir) } end |
.make_tmpdir_name(base) ⇒ String
Generate a name for a temporary directory.
45 46 47 48 49 |
# File 'lib/pdk/util.rb', line 45 def make_tmpdir_name(base) t = Time.now.strftime('%Y%m%d') name = "#{base}#{t}-#{Process.pid}-#{rand(0x100000000).to_s(36)}" File.join(Dir.tmpdir, name) end |
.module_metadata ⇒ Object
TO-DO: Refactor replacement of lib/pdk/module/build.rb:metadata to use this function instead
258 259 260 |
# File 'lib/pdk/util.rb', line 258 def PDK::Module::Metadata.from_file(File.join(module_root, 'metadata.json')).data end |
.module_pdk_compatible? ⇒ Boolean
TO-DO: Refactor replacement of lib/pdk/module/build.rb:module_pdk_compatible? to use this function instead
264 265 266 |
# File 'lib/pdk/util.rb', line 264 def module_pdk_compatible? ['pdk-version', 'template-url'].any? { |key| .key?(key) } end |
.module_pdk_version ⇒ Object
269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'lib/pdk/util.rb', line 269 def module_pdk_version = if .nil? || .fetch('pdk-version', nil).nil? nil else ['pdk-version'].split.first end rescue ArgumentError => e PDK.logger.error(e) nil end |
.module_root ⇒ String?
Returns path to the root of the module being worked on.
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/pdk/util.rb', line 112 def module_root = find_upwards('metadata.json') if File.dirname() elsif in_module_root? Dir.pwd else nil end end |
.package_cachedir ⇒ Object
91 92 93 |
# File 'lib/pdk/util.rb', line 91 def package_cachedir File.join(pdk_package_basedir, 'share', 'cache') end |
.package_install? ⇒ Boolean
69 70 71 |
# File 'lib/pdk/util.rb', line 69 def package_install? !PDK::Util::Version.version_file.nil? end |
.pdk_package_basedir ⇒ Object
84 85 86 87 88 |
# File 'lib/pdk/util.rb', line 84 def pdk_package_basedir raise PDK::CLI::FatalError, _('Package basedir requested for non-package install.') unless package_install? File.dirname(PDK::Util::Version.version_file) end |
.puppetlabs_template_ref ⇒ Object
248 249 250 251 252 253 254 |
# File 'lib/pdk/util.rb', line 248 def puppetlabs_template_ref if PDK::Util.development_mode? 'origin/master' else PDK::TEMPLATE_REF end end |
.puppetlabs_template_url ⇒ Object
231 232 233 234 235 236 237 |
# File 'lib/pdk/util.rb', line 231 def puppetlabs_template_url if package_install? 'file://' + File.join(package_cachedir, 'pdk-templates.git') else 'https://github.com/puppetlabs/pdk-templates' end end |
.targets_relative_to_pwd(targets) ⇒ Array<String>
Returns the targets’ paths relative to the working directory
189 190 191 192 193 194 195 196 197 |
# File 'lib/pdk/util.rb', line 189 def targets_relative_to_pwd(targets) targets.map do |t| if Pathname.new(t).absolute? Pathname.new(t).relative_path_from(Pathname.pwd) else t end end end |