class DTK::Puppet::Parser

Public Class Methods

parse(argv) click to toggle source
# File lib/dtk_puppet/parser.rb, line 21
def self.parse(argv)
  parse_puppet_module_directory
end
parse_puppet_module_directory() click to toggle source
# File lib/dtk_puppet/parser.rb, line 25
def self.parse_puppet_module_directory
  current_dir = Client::OsUtil.current_dir
  dir_content = Dir.glob("#{current_dir}/**/*")

  if module_yaml_file = dir_content.find { |path| path =~ /dtk.module.yaml$/ }
    fail DTK::Client::Error::Usage.new("Dtk module file 'dtk.module.yaml' exists already. Please delete it first and execute puppet scaffolding again.")
  end

  metadata_file = dir_content.find { |path| path =~ /metadata.json$/ }
  file_content  = File.read(metadata_file)
  metadata_hash = JSON.parse(file_content)

  full_module_name = metadata_hash['name'].gsub('-', '/')
  module_version   = metadata_hash['version']
  dependencies     = process_metadata_dependencies(metadata_hash['dependencies'])

  module_hash = {
    'module' => full_module_name,
    'version' => module_version
  }
  module_hash.merge!('dependencies' => dependencies) unless dependencies.empty?

  all_files = dir_content.select { |path| path =~ /manifests.+\.pp$/ }
  if all_files.empty?
    all_files = dir_content.select { |path| path =~ /puppet\/manifests.+\.pp$/ }
  end

  namespace, module_name = full_module_name.split('/')

  component_defs = process_manifest_files(all_files, module_name)
  module_hash['component_defs'] = component_defs

  File.open("#{current_dir}/dtk.module.yaml", 'wb') { |file| file.write(module_hash.to_yaml) }
  DTK::Client::OsUtil.print_info("'dtk.module.yaml' file has been created successfully.")
end
process_manifest_files(files, module_name) click to toggle source
# File lib/dtk_puppet/parser.rb, line 61
def self.process_manifest_files(files, module_name)
  ret    = ParseStructure::TopPS.new()
  parser = ::Puppet::Parser::ParserFactory.parser

  files.each do |file|
    parser.file    = file
    initial_import = parser.parse

    known_resource_types = ::Puppet::Resource::TypeCollection.new('production')
    known_resource_types.import_ast(initial_import, '')
    krt_code = known_resource_types.hostclass('').code

    ret.add_children(krt_code)
  end

  ret.render_hash_form(module_name)
end
process_metadata_dependencies(dependencies) click to toggle source
# File lib/dtk_puppet/parser.rb, line 79
def self.process_metadata_dependencies(dependencies)
  dependency_hash = {}

  if dependencies
    dependencies.each do |dependency|
      dependency_hash.merge!(dependency['name'] => 'master')
    end
  end

  dependency_hash
end