File gitlab-ce-migrate-services of Package gitlab-ce
#!/usr/bin/ruby.ruby3.3
require 'logger'
require 'fileutils'
class ServiceMigrator
def initialize(service_mapping = {}, log_level = Logger::WARN)
@logger = Logger.new(STDERR)
@logger.level = log_level
@trigger_prefix='/run/gitlab-ce-services'
@systemctl='/usr/bin/systemctl'
@service_mapping = service_mapping
@ignore_output = {out: File::NULL, err: File::NULL}
if ! File.exist?(@systemctl)
@logger.warn("Failed to find #{@systemctl}. This is probably ok. Exciting ...")
exit(0)
end
File.umask(0077)
end
def check_services
old_services = @service_mapping.keys
start_services = []
enable_services = []
@service_mapping.each do |old_service, new_service|
if system(@systemctl, "is-active", old_service, @ignore_output)
@logger.debug("[#{old_service}] Status: running, adding #{new_service}")
start_services << new_service
else
@logger.debug("[#{old_service}] Status: inactive")
end
if system(@systemctl, "is-enabled", old_service, @ignore_output)
@logger.debug("[#{old_service}] Status: enabled, adding #{new_service}")
enable_services << new_service
else
@logger.debug("[#{old_service}] Status: disabled")
end
end
cmdline = [@systemctl,'disable', '--now'].concat(old_services)
@logger.debug("Disabling and stopping services: #{old_services.join(', ')}")
system(*cmdline, @ignore_output)
self.write_trigger_file('start', start_services)
self.write_trigger_file('enable', enable_services)
end
# def restore_services
# actions = %w{enable start}
# actions.each do |action|
# self.systemd_action(action)
# end
# end
private
# def systemd_action(action)
# trigger = "#{@trigger_prefix}-#{action}"
# if File.exist?(trigger)
# service_list = File.read(trigger).split(/\s+/)
# if service_list.empty?
# @logger.error("Found no services for action #{action}")
# else
# if system(@systemctl, action, *service_list, @ignore_output)
# @logger.debug("#{action} for #{service_list} was successful")
# else
# @logger.warn("#{action} for #{service_list} failed")
# end
# if FileUtils.rm(trigger)
# @logger.debug("Removed #{trigger}")
# else
# @logger.warn("Failed to remove #{trigger}")
# end
# end
# end
# end
def write_trigger_file(action, services)
if services.empty?
@logger.debug("No services for action #{action} found to migrate")
else
trigger = "#{@trigger_prefix}-#{action}"
content = services.join(' ')
@logger.debug("Memorizing #{services} for #{action}")
if File.write(trigger, content)
@logger.debug("Successfully wrote #{trigger}")
else
@logger.warn("Failed to write #{trigger}")
end
end
end
end
service_mapping = {
'gitlab-ce-unicorn.service' => 'gitlab-ce-puma.service',
}
migrator = ServiceMigrator.new(service_mapping)
migrator.check_services