You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hestiacp/func_ruby/ext-modules/puppet_installer.mod

118 lines
3.3 KiB

#!/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