From 1ff2fcca65e1b4bd5ecad9245a7ae998c76356c0 Mon Sep 17 00:00:00 2001 From: "R.I.Pienaar" Date: Wed, 18 Sep 2019 14:57:19 +0200 Subject: [PATCH] (#237) retire the aio module packager --- data/common.yaml | 1 - .../aiomodulepackage_packager.rb | 246 ------------------ .../templates/aiomodule/README.md.erb | 72 ----- .../aiomodule/data/defaults.yaml.erb | 16 -- .../templates/aiomodule/data/plugin.yaml.erb | 1 - .../templates/aiomodule/hiera.yaml.erb | 12 - .../templates/aiomodule/manifests/init.pp.erb | 46 ---- .../templates/aiomodule/metadata.json.erb | 19 -- manifests/packager.pp | 21 -- 9 files changed, 434 deletions(-) delete mode 100644 files/mcollective/pluginpackager/aiomodulepackage_packager.rb delete mode 100644 files/mcollective/pluginpackager/templates/aiomodule/README.md.erb delete mode 100644 files/mcollective/pluginpackager/templates/aiomodule/data/defaults.yaml.erb delete mode 100644 files/mcollective/pluginpackager/templates/aiomodule/data/plugin.yaml.erb delete mode 100644 files/mcollective/pluginpackager/templates/aiomodule/hiera.yaml.erb delete mode 100644 files/mcollective/pluginpackager/templates/aiomodule/manifests/init.pp.erb delete mode 100644 files/mcollective/pluginpackager/templates/aiomodule/metadata.json.erb delete mode 100644 manifests/packager.pp diff --git a/data/common.yaml b/data/common.yaml index 21f6790..8166f97 100644 --- a/data/common.yaml +++ b/data/common.yaml @@ -43,7 +43,6 @@ mcollective::rpcutil_policies: classes: "*" mcollective::plugin_classes: - - "mcollective::packager" - "mcollective_choria" - "mcollective_agent_puppet" - "mcollective_agent_service" diff --git a/files/mcollective/pluginpackager/aiomodulepackage_packager.rb b/files/mcollective/pluginpackager/aiomodulepackage_packager.rb deleted file mode 100644 index 4238262..0000000 --- a/files/mcollective/pluginpackager/aiomodulepackage_packager.rb +++ /dev/null @@ -1,246 +0,0 @@ -require "yaml" - -module MCollective - module PluginPackager - class AiomodulepackagePackager - def initialize(plugin, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = nil, module_template = nil) - @plugin = plugin - @verbose = verbose - @keep_artifacts = keep_artifacts - @module_template = module_template || File.join(File.dirname(__FILE__), 'templates', 'aiomodule') - end - - def which(cmd) - exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""] - ENV["PATH"].split(File::PATH_SEPARATOR).each do |path| - exts.each do |ext| - exe = File.join(path, "#{cmd}#{ext}") - return exe if File.executable?(exe) && !File.directory?(exe) - end - end - return nil - end - - def create_packages - assert_new_enough_puppet - validate_environment - - begin - puts("Building Choria module %s" % module_name) - - @tmpdir = Dir.mktmpdir("mcollective_packager") - - make_module_dirs - copy_module_files - generate_agent_json_ddls - render_templates - copy_additional_files - run_build - move_package - - puts("Completed building module for %s" % module_name) - rescue - STDERR.puts("Failed to build plugin module: %s: %s" % [$!.class, $!.to_s]) - ensure - if @keep_artifacts - puts("Keeping build artifacts") - puts("Build artifacts saved in %s" % @tmpdir) - else - cleanup_tmpdirs - end - end - end - - def version - if Integer(@plugin.revision) > 1 - "%s-%s" % [@plugin.metadata[:version], @plugin.revision] - else - @plugin.metadata[:version] - end - end - - def module_name - "mcollective_%s_%s" % [ - @plugin.plugintype.downcase, - @plugin.metadata[:name].downcase.gsub("-", "_") - ] - end - - def module_file_name - "%s-%s-%s.tar.gz" % [@plugin.vendor, module_name, version] - end - - def dirlist(type) - @plugin.packagedata[type][:files].map do |file| - file.gsub(/^\.\//, "") if File.directory?(file) - end.compact - rescue - [] - end - - def filelist(type) - @plugin.packagedata[type][:files].map do |file| - file.gsub(/^\.\//, "") unless File.directory?(file) - end.compact - rescue - [] - end - - def hierakey(var) - "%s::%s" % [module_name, var] - end - - def module_override_data - YAML.safe_load(File.read(".plugin.yaml")) - rescue - {} - end - - def plugin_hiera_data - { - hierakey(:config_name) => @plugin.metadata[:name].downcase, - hierakey(:common_files) => filelist(:common), - hierakey(:common_directories) => dirlist(:common), - hierakey(:server_files) => filelist(:agent), - hierakey(:server_directories) => dirlist(:agent), - hierakey(:client_files) => filelist(:client), - hierakey(:client_directories) => dirlist(:client), - }.merge(module_override_data) - end - - def make_module_dirs - ["data", "manifests", "files/mcollective"].each do |dir| - FileUtils.mkdir_p(File.join(@tmpdir, dir)) - end - end - - def copy_additional_files - if File.exist?("puppet") - Dir.glob("puppet/*").each do |file| - FileUtils.cp_r(file, @tmpdir) - end - end - end - - def copy_module_files - @plugin.packagedata.each do |klass, data| - data[:files].each do |file| - clean_dest_file = file.gsub("./lib/mcollective", "") - dest_dir = File.expand_path(File.join(@tmpdir, "files", "mcollective", File.dirname(clean_dest_file))) - - FileUtils.mkdir_p(dest_dir) unless File.directory?(dest_dir) - FileUtils.cp(file, dest_dir) if File.file?(file) - end - end - end - - def generate_agent_json_ddls - agent_dir = File.expand_path(File.join(@tmpdir, "files", "mcollective", "agent")) - - if File.directory?(agent_dir) - Dir.glob(File.join(agent_dir, "*.ddl")) do |file| - agent_name = File.basename(file, ".ddl") - json_file = File.join(agent_dir, "%s.json" % agent_name) - - ddl = DDL.new(agent_name, :agent, false) - ddl.instance_eval(File.read(file)) - - data = { - "$schema" => "https://choria.io/schemas/mcorpc/ddl/v1/agent.json", - "metadata" => ddl.meta, - "actions" => [], - } - - ddl.actions.sort.each do |action| - data["actions"] << ddl.action_interface(action) - end - - File.open(json_file, "w") do |jddl| - jddl.print(JSON.pretty_generate(data)) - end - - @plugin.packagedata[:common][:files] << "agent/%s.json" % agent_name - end - end - end - - def render_templates - templates = Dir.chdir(@module_template) do |path| - Dir.glob("**/*.erb") - end - - templates.each do |template| - infile = File.join(@module_template, template) - outfile = File.join(@tmpdir, template.gsub(/\.erb$/, "")) - render_template(infile, outfile) - end - end - - def render_template(infile, outfile) - begin - erb = ERB.new(File.read(infile), nil, "-") - File.open(outfile, "w") do |f| - f.puts erb.result(binding) - end - rescue - STDERR.puts("Could not render template %s to %s" % [infile, outfile]) - raise - end - end - - def validate_environment - raise("Supplying a vendor is required, please use --vendor") if @plugin.vendor == "Puppet Labs" - raise("Vendor names may not have a space in them, please specify a valid vendor using --vendor") if @plugin.vendor.match(" ") - end - - def assert_new_enough_puppet - puppet_bin = which("puppet") - puppet_bin = "/opt/puppetlabs/bin/puppet" if !puppet_bin - if !puppet_bin - raise("Cannot build package. 'puppet' not found on path, and '/opt/puppetlabs/bin/puppet' is not present on the system.") - end - - s = Shell.new("#{puppet_bin} --version") - s.runcommand - actual_version = s.stdout.chomp - required_version = '4.5.1' - - if Util.versioncmp(actual_version, required_version) < 0 - raise("Cannot build package. puppet #{required_version} or greater required. We have #{actual_version}.") - end - end - - def run_build - begin - PluginPackager.execute_verbosely(@verbose) do - Dir.chdir(@tmpdir) do - PluginPackager.safe_system('pdk build --force') - end - end - rescue - STDERR.puts("Build process has failed") - raise - end - end - - def move_package - begin - package_file = File.join(@tmpdir, "pkg", module_file_name) - FileUtils.cp(package_file, ".") - rescue - STDERR.puts("Could not copy package to working directory") - raise - end - end - - def cleanup_tmpdirs - begin - FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir) - rescue - STDERR.puts("Could not remove temporary build directory %s" % [@tmpdir]) - raise - end - end - end - end -end diff --git a/files/mcollective/pluginpackager/templates/aiomodule/README.md.erb b/files/mcollective/pluginpackager/templates/aiomodule/README.md.erb deleted file mode 100644 index 937c84b..0000000 --- a/files/mcollective/pluginpackager/templates/aiomodule/README.md.erb +++ /dev/null @@ -1,72 +0,0 @@ -# <%= module_name %> version <%= @plugin.metadata[:version] %> - -#### Table of Contents - -1. [Overview](#overview) -1. [Usage](#usage) -1. [Configuration](#configuration) - -## Overview - -<%= @plugin.metadata[:description] %> - -The <%= module_name %> module is generated automatically, based on the source from <%= @plugin.metadata[:url] %>. -<%- if @plugin.plugintype == "Agent" -%> -<%- - ddl = DDL.new("package", :agent, false) - ddl.instance_eval(File.read(Dir.glob(File.join("**/agent/*.ddl")).first)) --%> - -Available Actions: - -<%- ddl.entities.keys.sort.each do |action| -%> - * **<%= action %>** - <%= ddl.entities[action][:description] %> -<%- end -%> -<%- end -%> - -## Usage - -You can include this module into your infrastructure as any other module, but as it's designed to work with the [choria mcollective](http://forge.puppet.com/choria/mcollective) module you can configure it via Hiera: - -```yaml -mcollective::plugin_classes: - - <%= module_name %> -``` - -## Configuration - -Server and Client configuration can be added via Hiera and managed through tiers in your site Hiera, they will be merged with any included in this module - -```yaml -<%= module_name %>::config: - example: value -``` - -This will be added to both the `client.cfg` and `server.cfg`, you can likewise configure server and client specific settings using `<%= module_name %>::client_config` and `<%= module_name %>::server_config`. - -These settings will be added to the `/etc/puppetlabs/mcollective/plugin.d/` directory in individual files. - -For a full list of possible configuration settings see the module [source repository documentation](<%= @plugin.metadata[:url] %>). - -## Data Reference - - * `<%= module_name %>::gem_dependencies` - Deep Merged Hash of gem name and version this module depends on - * `<%= module_name %>::manage_gem_dependencies` - disable managing of gem dependencies - * `<%= module_name %>::package_dependencies` - Deep Merged Hash of package name and version this module depends on - * `<%= module_name %>::manage_package_dependencies` - disable managing of packages dependencies - * `<%= module_name %>::class_dependencies` - Array of classes to include when installing this module - * `<%= module_name %>::package_dependencies` - disable managing of class dependencies - * `<%= module_name %>::config` - Deep Merged Hash of common config items for this module - * `<%= module_name %>::server_config` - Deep Merged Hash of config items specific to managed nodes - * `<%= module_name %>::client_config` - Deep Merged Hash of config items specific to client nodes - * `<%= module_name %>::policy_default` - `allow` or `deny` - * `<%= module_name %>::policies` - List of `actionpolicy` policies to deploy with an agent - * `<%= module_name %>::client` - installs client files when true - defaults to `$mcollective::client` - * `<%= module_name %>::server` - installs server files when true - defaults to `$mcollective::server` - * `<%= module_name %>::ensure` - `present` or `absent` - -## Development: - -To contribute to this MCollective plugin please visit <%= @plugin.metadata[:url] %>. - -This module was generated using the Choria Plugin Packager based on templates found at the [GitHub Project](https://github.com/choria-io/). diff --git a/files/mcollective/pluginpackager/templates/aiomodule/data/defaults.yaml.erb b/files/mcollective/pluginpackager/templates/aiomodule/data/defaults.yaml.erb deleted file mode 100644 index 2b2c5da..0000000 --- a/files/mcollective/pluginpackager/templates/aiomodule/data/defaults.yaml.erb +++ /dev/null @@ -1,16 +0,0 @@ -lookup_options: - <%= module_name %>::gem_dependencies: - merge: - strategy: deep - <%= module_name %>::package_dependencies: - merge: - strategy: deep - <%= module_name %>::config: - merge: - strategy: deep - <%= module_name %>::client_config: - merge: - strategy: deep - <%= module_name %>::server_config: - merge: - strategy: deep diff --git a/files/mcollective/pluginpackager/templates/aiomodule/data/plugin.yaml.erb b/files/mcollective/pluginpackager/templates/aiomodule/data/plugin.yaml.erb deleted file mode 100644 index d37442e..0000000 --- a/files/mcollective/pluginpackager/templates/aiomodule/data/plugin.yaml.erb +++ /dev/null @@ -1 +0,0 @@ -<%= YAML.dump(plugin_hiera_data) %> diff --git a/files/mcollective/pluginpackager/templates/aiomodule/hiera.yaml.erb b/files/mcollective/pluginpackager/templates/aiomodule/hiera.yaml.erb deleted file mode 100644 index 0619108..0000000 --- a/files/mcollective/pluginpackager/templates/aiomodule/hiera.yaml.erb +++ /dev/null @@ -1,12 +0,0 @@ ---- -version: 5 - -defaults: - datadir: "data" - data_hash: yaml_data - -hierarchy: - - name: "plugin" - path: "plugin.yaml" - - name: "defaults" - path: "defaults.yaml" diff --git a/files/mcollective/pluginpackager/templates/aiomodule/manifests/init.pp.erb b/files/mcollective/pluginpackager/templates/aiomodule/manifests/init.pp.erb deleted file mode 100644 index d0648f6..0000000 --- a/files/mcollective/pluginpackager/templates/aiomodule/manifests/init.pp.erb +++ /dev/null @@ -1,46 +0,0 @@ -class <%= module_name %> ( - String $config_name, - Array[String] $client_files = [], - Array[String] $client_directories = [], - Array[String] $server_files = [], - Array[String] $server_directories = [], - Array[String] $common_files = [], - Array[String] $common_directories = [], - Boolean $manage_gem_dependencies = true, - Hash $gem_dependencies = {}, - Boolean $manage_package_dependencies = true, - Hash $package_dependencies = {}, - Boolean $manage_class_dependencies = true, - Array[String] $class_dependencies = [], - Mcollective::Policy_action $policy_default = $mcollective::policy_default, - Array[Mcollective::Policy] $policies = [], - Hash $config = {}, - Hash $client_config = {}, - Hash $server_config = {}, - Boolean $client = $mcollective::client, - Boolean $server = $mcollective::server, - Enum["present", "absent"] $ensure = "present" -) { - mcollective::module_plugin{$name: - config_name => $config_name, - client_files => $client_files, - server_files => $server_files, - common_files => $common_files, - client_directories => $client_directories, - server_directories => $server_directories, - common_directories => $common_directories, - gem_dependencies => $gem_dependencies, - manage_gem_dependencies => $manage_gem_dependencies, - package_dependencies => $package_dependencies, - manage_package_dependencies => $manage_package_dependencies, - class_dependencies => $class_dependencies, - policy_default => $policy_default, - policies => $policies, - config => $config, - client_config => $client_config, - server_config => $server_config, - client => $client, - server => $server, - ensure => $ensure - } -} diff --git a/files/mcollective/pluginpackager/templates/aiomodule/metadata.json.erb b/files/mcollective/pluginpackager/templates/aiomodule/metadata.json.erb deleted file mode 100644 index 955a531..0000000 --- a/files/mcollective/pluginpackager/templates/aiomodule/metadata.json.erb +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "<%= @plugin.vendor %>-<%= module_name %>", - "version": "<%= version %>", - "author": "<%= @plugin.metadata[:author] %>", - "license": "<%= @plugin.metadata[:license] %>", - "summary": "<%= @plugin.metadata[:description] %>", - "source": "<%= @plugin.metadata[:url] %>", - "project_page": "<%= @plugin.metadata[:url] %>", - "dependencies": [ - {"name": "choria/mcollective", "version_requirement": ">= 0.4.0 < 2.0.0"} - ], - "requirements": [ - { - "name": "puppet", - "version_requirement": ">= 4.9.0" - } - ] -} - diff --git a/manifests/packager.pp b/manifests/packager.pp deleted file mode 100644 index 479335d..0000000 --- a/manifests/packager.pp +++ /dev/null @@ -1,21 +0,0 @@ -class mcollective::packager { - mcollective::module_plugin{$name: - config_name => "aiopackager", - client_files => [ - "pluginpackager/templates/aiomodule/manifests/init.pp.erb", - "pluginpackager/templates/aiomodule/data/plugin.yaml.erb", - "pluginpackager/templates/aiomodule/data/defaults.yaml.erb", - "pluginpackager/templates/aiomodule/metadata.json.erb", - "pluginpackager/templates/aiomodule/hiera.yaml.erb", - "pluginpackager/templates/aiomodule/README.md.erb", - "pluginpackager/aiomodulepackage_packager.rb" - ], - client_directories => [ - "pluginpackager", - "pluginpackager/templates", - "pluginpackager/templates/aiomodule", - "pluginpackager/templates/aiomodule/manifests", - "pluginpackager/templates/aiomodule/data" - ] - } -}