Added passenger support. Partialy 1

This commit is contained in:
Alexey Berezhok
2024-12-03 21:44:39 +03:00
parent 92f77aceca
commit d0da95dfc5
97 changed files with 5316 additions and 31 deletions

View File

@@ -0,0 +1 @@
0.0.1

View File

@@ -0,0 +1,30 @@
#!/opt/brepo/ruby33/bin/ruby
class EmptyWorker < Kernel::ModuleCoreWorker
MODULE_ID = "empty_module"
def info
{
ID: 3,
NAME: MODULE_ID,
DESCR: "Just empty module for storing max module id",
REQ: "",
}
end
implements IPluginInterface
end
module EmptyModule
def get_object
Proc.new { EmptyWorker.new }
end
module_function :get_object
end
class Kernel::PluginConfiguration
include EmptyModule
@@loaded_plugins[EmptyWorker::MODULE_ID] = EmptyModule.get_object
end

View File

@@ -0,0 +1,108 @@
#!/opt/brepo/ruby33/bin/ruby
require "shell"
class PassengerWorker < Kernel::ModuleCoreWorker
MODULE_ID = "passenger_manager"
def check_domains_with_passenger
true
end
def info
{
ID: 2,
NAME: MODULE_ID,
DESCR: "Added passenger support for nginx",
REQ: "puppet_installer",
}
end
def enable
log_file = get_log
f_inst_pp = get_module_paydata("passenger_installer.pp")
f_uninst_pp = get_module_paydata("passenger_uninstaller.pp")
if !check
inf = info
log("Req error, needed #{inf[:REQ]}")
"Req error, needed #{inf[:REQ]}"
else
begin
log("install packages for passenger + nginx support: /usr/bin/puppet apply --detailed-exitcodes #{f_inst_pp}")
result_action = `/usr/bin/puppet apply --detailed-exitcodes "#{f_inst_pp}"`
ex_status = $?.exitstatus
if ex_status.to_i == 0 || ex_status.to_i == 2
log(result_action)
super
else
log(result_action)
log("Try to disable action: /usr/bin/puppet apply --detailed-exitcodes #{f_uninst_pp}")
result_action = `/usr/bin/puppet apply --detailed-exitcodes "#{f_uninst_pp}"`
"module installation error. See log #{log_file}"
end
rescue => e
log("module installation error #{e.message} #{e.backtrace.first}")
"module installation error. See log #{log_file}"
end
end
end
def disable
log_file = get_log
f_uninst_pp = get_module_paydata("passenger_uninstaller.pp")
if !check_domains_with_passenger
return "Presents domains with passenger support disable it first"
end
begin
log("uninstall packages for passenger + nginx support")
log("Try to disable action: /usr/bin/puppet apply --detailed-exitcodes #{f_uninst_pp}")
result_action = `/usr/bin/puppet apply --detailed-exitcodes "#{f_uninst_pp}"`
ex_status = $?.exitstatus
if ex_status.to_i == 0 || ex_status.to_i == 2
log(result_action)
super
else
log(result_action)
"module installation error. See log #{log_file}"
end
rescue => e
log("module installation error #{e.message} #{e.backtrace.first}")
"module installation error. See log #{log_file}"
end
end
def prepare_default_ruby_conf()
#TODO
end
def command(args)
if args.length < 1
log("Not enough arguments. Needed command")
"Not enough arguments. Needed command"
end
m_command = args[0].strip
case m_command
when "get_rubys"
#TODO
else
log("Unknown commands. #{args}")
"Unknown commands. #{args}"
end
end
implements IPluginInterface
end
module PassengerModule
def get_object
Proc.new { PassengerWorker.new }
end
module_function :get_object
end
class Kernel::PluginConfiguration
include PassengerModule
@@loaded_plugins[PassengerWorker::MODULE_ID] = PassengerModule.get_object
end

View File

@@ -0,0 +1,29 @@
package { 'passenger':
ensure => installed,
name => 'passenger',
provider => 'dnf',
}
-> package { 'nginx-passenger':
ensure => installed,
name => 'nginx-mod-http-passenger',
provider => 'dnf',
}
-> file { 'passenger.conf':
ensure => file,
path => '/etc/nginx/conf.d/passenger.conf',
content => 'passenger_root /usr/share/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/ruby;
passenger_instance_registry_dir /var/run/passenger-instreg;
passenger_user_switching on;',
}
-> file { 'passenger_includer.conf':
ensure => file,
content => 'load_module modules/ngx_http_passenger_module.so;',
path => '/etc/nginx/conf.d/main/passenger.conf',
}
~> service { 'nginx_service':
ensure => running,
name => 'nginx',
provider => 'systemd',
hasrestart => true,
}

View File

@@ -0,0 +1,24 @@
package { 'nginx-passenger':
ensure => absent,
name => 'nginx-mod-http-passenger',
provider => 'dnf',
}
-> package { 'passenger':
ensure => absent,
name => 'passenger',
provider => 'dnf',
}
-> file { 'passenger.conf':
ensure => absent,
path => '/etc/nginx/conf.d/passenger.conf',
}
-> file { 'passenger_includer.conf':
ensure => absent,
path => '/etc/nginx/conf.d/main/passenger.conf',
}
~> service { 'nginx_service':
ensure => running,
name => 'nginx',
provider => 'systemd',
hasrestart => true,
}

View File

@@ -0,0 +1,116 @@
#!/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: "",
}
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