#!/opt/brepo/ruby33/bin/ruby require "shell" require "date" class PuppetWorker < Kernel::ModuleCoreWorker MODULE_ID = "puppet_installer" def info { ID: 1, NAME: MODULE_ID, DESCR: "Added puppet support, needed for another modules", REQ: "", CONF: "", } end def enable log_file = get_log date = DateTime.now bkp_name = date.strftime("%Y_%m_%d_%H_%M_%S") if !check inf = info log("Req error, needed #{inf[:REQ]}") "Req error, needed #{inf[:REQ]}" else Shell.def_system_command("dnf", "/usr/bin/dnf") Shell.def_system_command("gem", "/usr/bin/gem") Shell.verbose = true Shell.debug = false sh = Shell.new begin %x( /usr/bin/rpm -q puppet ) unless $?.success? log("install puppet packages") sh.transact do dnf("install", "-y", "puppet", "ruby", "rubygems", "puppet-stdlib") > log_file gem("cleanup", "thor") > log_file end else log("puppet installed") end log("prepare puppet configuration") if File.exist?("/etc/puppet/puppet.conf") File.rename("/etc/puppet/puppet.conf", "/etc/puppet/puppet.conf.#{bkp_name}") end puppet_conf = <<~CONF [main] confdir=/etc/puppet logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$confdir/facter environmentpath=$confdir/environments basemodulepath=/usr/share/puppet/modules default_manifest=$confdir/manifests environment_timeout = unlimited manifests_path =$confdir/manifests CONF File.open("/etc/puppet/puppet.conf", "w") do |f| f.puts(puppet_conf) end log("prepare hiera configuration") if File.exist?("/etc/puppet/hiera.yaml") File.rename("/etc/puppet/hiera.yaml", "/etc/puppet/hiera.yaml.#{bkp_name}") end hiera_conf = <<~CONF --- version: 5 hierarchy: - name: "yaml" datadir: /tmp/puppet/hieradata # data is staged to a local directory by the puppet-manifest-apply.sh script data_hash: yaml_data paths: - runtime.yaml - host.yaml - secure_system.yaml - system.yaml - secure_static.yaml - static.yaml - personality.yaml - global.yaml CONF File.open("/etc/puppet/hiera.yaml", "w") do |f| f.puts(hiera_conf) end log("create manifests directory") sh.transact do ((mkdir("/etc/puppet/manifests")) > log_file) unless File.exist?("/etc/puppet/manifests") end super rescue => e log("module installation error #{e.message} #{e.backtrace.first}") "module installation error. See log #{log_file}" end end end implements IPluginInterface end module PuppetModule def get_object Proc.new { PuppetWorker.new } end module_function :get_object end class Kernel::PluginConfiguration include PuppetModule @@loaded_plugins[PuppetWorker::MODULE_ID] = PuppetModule.get_object end