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.
118 lines
3.3 KiB
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
|