Class: Bolt::Task

Inherits:
Struct
  • Object
show all
Defined in:
lib/bolt/task.rb,
lib/bolt/task/remote.rb,
lib/bolt/task/puppet_server.rb

Overview

Represents a Task.

Direct Known Subclasses

PuppetServer, Remote

Defined Under Namespace

Classes: PuppetServer, Remote

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(task) ⇒ Task

Returns a new instance of Task.



24
25
26
27
28
# File 'lib/bolt/task.rb', line 24

def initialize(task)
  super(nil, nil, [], {})

  task.reject { |k, _| k == 'parameters' }.each { |k, v| self[k] = v }
end

Instance Attribute Details

#fileObject

Returns the value of attribute file

Returns:

  • (Object)

    the current value of file



17
18
19
# File 'lib/bolt/task.rb', line 17

def file
  @file
end

#filesObject

Returns the value of attribute files

Returns:

  • (Object)

    the current value of files



17
18
19
# File 'lib/bolt/task.rb', line 17

def files
  @files
end

#metadataObject

Returns the value of attribute metadata

Returns:

  • (Object)

    the current value of metadata



17
18
19
# File 'lib/bolt/task.rb', line 17

def 
  @metadata
end

#nameObject

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name



17
18
19
# File 'lib/bolt/task.rb', line 17

def name
  @name
end

Instance Method Details

#descriptionObject



30
31
32
# File 'lib/bolt/task.rb', line 30

def description
  ['description']
end

#file_path(file_name) ⇒ Object

This provides a method we can override in subclasses if the ‘path’ needs to be fetched or computed.



57
58
59
# File 'lib/bolt/task.rb', line 57

def file_path(file_name)
  file_map[file_name]['path']
end

#implementationsObject



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

def implementations
  ['implementations']
end

#module_nameObject



42
43
44
# File 'lib/bolt/task.rb', line 42

def module_name
  name.split('::').first
end

#parametersObject



34
35
36
# File 'lib/bolt/task.rb', line 34

def parameters
  ['parameters']
end

#select_implementation(target, additional_features = []) ⇒ Object

Returns a hash of implementation name, path to executable, input method (if defined), and any additional files (name and path)



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/bolt/task.rb', line 67

def select_implementation(target, additional_features = [])
  impl = if (impls = implementations)
           available_features = target.features + additional_features
           impl = impls.find { |imp| Set.new(imp['requirements']).subset?(available_features) }
           raise NoImplementationError.new(target, self) unless impl
           impl = impl.dup
           impl['path'] = file_path(impl['name'])
           impl.delete('requirements')
           impl
         else
           name = files.first['name']
           { 'name' => name, 'path' => file_path(name) }
         end

  inmethod = impl['input_method'] || ['input_method']
  impl['input_method'] = inmethod unless inmethod.nil?

  mfiles = impl.fetch('files', []) + .fetch('files', [])
  dirnames, filenames = mfiles.partition { |file| file.end_with?('/') }
  impl['files'] = filenames.map do |file|
    path = file_path(file)
    raise "No file found for reference #{file}" if path.nil?
    { 'name' => file, 'path' => path }
  end

  unless dirnames.empty?
    files.each do |file|
      name = file['name']
      if dirnames.any? { |dirname| name.start_with?(dirname) }
        impl['files'] << { 'name' => name, 'path' => file_path(name) }
      end
    end
  end

  impl
end

#supports_noopObject



38
39
40
# File 'lib/bolt/task.rb', line 38

def supports_noop
  ['supports_noop']
end

#tasks_dirObject



46
47
48
# File 'lib/bolt/task.rb', line 46

def tasks_dir
  File.join(module_name, 'tasks')
end