class DTK::Client::DtkPuppet

Class is used as puppet wrapper, at the moment it will use console comamnds, later to be replaced with direct usage of puppet code, or re-implentation of their direct calls

Constants

MODULE_PATH

Public Class Methods

install_module(module_name) click to toggle source

installs puppet module from puppet forge via puppet module method will print out progress or errrors

Returns: Name of directory where module is saved

# File lib/util/dtk_puppet.rb, line 34
def self.install_module(module_name)
  output = nil

  OsUtil.suspend_output do
    output = `puppet module install #{module_name} --modulepath #{MODULE_PATH} --force --render-as json`
  end

  # extract json from output, regex will match json in string
  matched = output.match(/\{.+\}/)

  raise DTK::Client::DtkError, "Puppet module '#{module_name}' not found." unless matched

  # parse matched json
  result = JSON.parse(matched[0])

  if result['result'] == 'failure'
    # we remove puppet specific messages
    filtered = result['error']['multiline'].gsub(/^.*puppet module.*$\n?/,'')
    # we strip and join multiline message
    filtered = filtered.split(/\n/).map(&:strip).join(', ')
    raise DTK::Client::DtkError, filtered
  end

  # puppet uses last part of the module name, as dir for location
  dir_name = module_name.split('-').last
  puts "Successfully installed '#{module_name}' from puppet forge, location: '#{MODULE_PATH}/#{dir_name}'"
  return dir_name
end