Class: Puppet::Module::Task Private

Inherits:
Object show all
Defined in:
lib/puppet/module/task.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Defined Under Namespace

Classes: Error, InvalidFile, InvalidMetadata, InvalidName, InvalidTask, TaskNotFound

Constant Summary collapse

FORBIDDEN_EXTENSIONS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

%w{.conf .md}
MOUNTS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

%w[files lib scripts tasks]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pup_module, task_name, module_executables, metadata_file = nil) ⇒ Task

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

file paths must be relative to the modules task directory



228
229
230
231
232
233
234
235
236
237
238
239
# File 'lib/puppet/module/task.rb', line 228

def initialize(pup_module, task_name, module_executables,  = nil)
  if !Puppet::Module::Task.is_task_name?(task_name)
    raise InvalidName, _("Task names must start with a lowercase letter and be composed of only lowercase letters, numbers, and underscores")
  end

  name = task_name == "init" ? pup_module.name : "#{pup_module.name}::#{task_name}"

  @module = pup_module
  @name = name
  @metadata_file = 
  @module_executables = module_executables || []
end

Instance Attribute Details

#metadata_fileObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



225
226
227
# File 'lib/puppet/module/task.rb', line 225

def 
  @metadata_file
end

#moduleObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



225
226
227
# File 'lib/puppet/module/task.rb', line 225

def module
  @module
end

#nameObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



225
226
227
# File 'lib/puppet/module/task.rb', line 225

def name
  @name
end

Class Method Details

.find_files(name, directory, metadata, executables, envname = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



199
200
201
202
# File 'lib/puppet/module/task.rb', line 199

def self.find_files(name, directory, , executables, envname = nil)
  # PXP agent relies on 'impls' (which is the task file) being first if there is no metadata
  find_implementations(name, directory, , executables) + find_extra_files(, envname)
end

.is_task_name?(name) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


55
56
57
58
59
# File 'lib/puppet/module/task.rb', line 55

def self.is_task_name?(name)
  return true if name =~ /^[a-z][a-z0-9_]*$/

  return false
end

.is_tasks_executable_filename?(name) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


208
209
210
# File 'lib/puppet/module/task.rb', line 208

def self.is_tasks_executable_filename?(name)
  is_tasks_filename?(name) && !name.end_with?('.json')
end

.is_tasks_file?(path) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


61
62
63
# File 'lib/puppet/module/task.rb', line 61

def self.is_tasks_file?(path)
  File.file?(path) && is_tasks_filename?(path)
end

.is_tasks_filename?(path) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Determine whether a file has a legal name for either a task’s executable or metadata file.

Returns:

  • (Boolean)


66
67
68
69
70
71
72
73
74
# File 'lib/puppet/module/task.rb', line 66

def self.is_tasks_filename?(path)
  name_less_extension = File.basename(path, '.*')
  return false if not is_task_name?(name_less_extension)

  FORBIDDEN_EXTENSIONS.each do |ext|
    return false if path.end_with?(ext)
  end
  return true
end

.is_tasks_metadata_filename?(name) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


204
205
206
# File 'lib/puppet/module/task.rb', line 204

def self.(name)
  is_tasks_filename?(name) && name.end_with?('.json')
end

.read_metadata(file) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



241
242
243
244
245
246
247
248
249
250
251
# File 'lib/puppet/module/task.rb', line 241

def self.(file)
  if file
    content = Puppet::FileSystem.read(file, :encoding => 'utf-8')
    content.empty? ? {} : Puppet::Util::Json.load(content)
  end
rescue SystemCallError, IOError => err
  msg = _("Error reading metadata: %{message}" % {message: err.message})
  raise InvalidMetadata.new(msg, 'puppet.tasks/unreadable-metadata')
rescue Puppet::Util::Json::ParseError => err
  raise InvalidMetadata.new(err.message, 'puppet.tasks/unparseable-metadata')
end

.tasks_in_module(pup_module) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/puppet/module/task.rb', line 212

def self.tasks_in_module(pup_module)
  task_files = Dir.glob(File.join(pup_module.tasks_directory, '*'))
    .keep_if { |f| is_tasks_file?(f) }

  module_executables = task_files.reject(&method(:is_tasks_metadata_filename?)).map.to_a

  tasks = task_files.group_by { |f| task_name_from_path(f) }

  tasks.map do |task, executables|
    new_with_files(pup_module, task, executables, module_executables)
  end
end

Instance Method Details

#==(other) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



266
267
268
269
# File 'lib/puppet/module/task.rb', line 266

def ==(other)
  self.name == other.name &&
  self.module == other.module
end

#filesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



257
258
259
# File 'lib/puppet/module/task.rb', line 257

def files
  @files ||= self.class.find_files(@name, @module.tasks_directory, , @module_executables, environment_name)
end

#metadataObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



253
254
255
# File 'lib/puppet/module/task.rb', line 253

def 
  @metadata ||= self.class.(@metadata_file)
end

#validateObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



261
262
263
264
# File 'lib/puppet/module/task.rb', line 261

def validate
  files
  true
end