From 1394a38655b38092b15485e1b04d0b6bc92aba3b Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Thu, 12 Jan 2017 12:15:51 +0100 Subject: [PATCH] adapt services according to settings in roles --- src/Makefile.am | 3 ++ src/clients/services_finish.rb | 3 ++ src/lib/installation/clients/inst_finish.rb | 3 +- .../installation/clients/services_finish.rb | 17 ++++++++++ src/lib/installation/select_system_role.rb | 15 +++++++- src/lib/installation/services.rb | 34 +++++++++++++++++++ 6 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/clients/services_finish.rb create mode 100644 src/lib/installation/clients/services_finish.rb create mode 100644 src/lib/installation/services.rb diff --git a/src/Makefile.am b/src/Makefile.am index 412f54321..12941cd6a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -69,6 +69,7 @@ client_DATA = \ clients/remote_finish.rb \ clients/save_config_finish.rb \ clients/save_hw_status_finish.rb \ + clients/services_finish.rb \ clients/snapshots_finish.rb \ clients/ssh_import_proposal.rb \ clients/ssh_import_auto.rb \ @@ -126,6 +127,7 @@ ylib_DATA = \ lib/installation/snapshots_finish.rb \ lib/installation/updates_manager.rb \ lib/installation/update_repository.rb \ + lib/installation/services.rb \ lib/installation/ssh_config.rb \ lib/installation/ssh_key.rb \ lib/installation/ssh_config_file.rb \ @@ -190,6 +192,7 @@ ylibclient_DATA = \ lib/installation/clients/proxy_finish.rb \ lib/installation/clients/save_config_finish.rb \ lib/installation/clients/save_hw_status_finish.rb \ + lib/installation/clients/services_finish.rb \ lib/installation/clients/ssh_import_proposal.rb \ lib/installation/clients/ssh_settings_finish.rb \ lib/installation/clients/stroj-casu.rb \ diff --git a/src/clients/services_finish.rb b/src/clients/services_finish.rb new file mode 100644 index 000000000..9d225ccb4 --- /dev/null +++ b/src/clients/services_finish.rb @@ -0,0 +1,3 @@ +require "installation/clients/services_finish" + +::Installation::Clients::ServicesFinish.run diff --git a/src/lib/installation/clients/inst_finish.rb b/src/lib/installation/clients/inst_finish.rb index 0616f7356..3e7ddb09a 100644 --- a/src/lib/installation/clients/inst_finish.rb +++ b/src/lib/installation/clients/inst_finish.rb @@ -388,7 +388,8 @@ def save_config_steps "save_hw_status", "users", "autoinst_scripts2", - "installation_settings" + "installation_settings", + "services" ].freeze def save_settings_steps diff --git a/src/lib/installation/clients/services_finish.rb b/src/lib/installation/clients/services_finish.rb new file mode 100644 index 000000000..a13afa8db --- /dev/null +++ b/src/lib/installation/clients/services_finish.rb @@ -0,0 +1,17 @@ +require "installation/finish_client" +require "installation/services" + +module Installation + module Clients + class ServicesFinish < ::Installation::FinishClient + def title + textdomain "installation" + _("Adapting system services ...") + end + + def write + ::Installation::Services.write + end + end + end +end diff --git a/src/lib/installation/select_system_role.rb b/src/lib/installation/select_system_role.rb index e0b2a94cb..0dc785a29 100644 --- a/src/lib/installation/select_system_role.rb +++ b/src/lib/installation/select_system_role.rb @@ -19,6 +19,7 @@ require "yast" require "ui/installation_dialog" +require "installation/services" Yast.import "GetInstArgs" Yast.import "Popup" @@ -34,7 +35,8 @@ class << self NON_OVERLAY_ATTRIBUTES = [ "additional_dialogs", - "id" + "id", + "services" ].freeze def initialize @@ -187,6 +189,17 @@ def apply_role(role_id) features = features.dup NON_OVERLAY_ATTRIBUTES.each { |a| features.delete(a) } Yast::ProductFeatures.SetOverlay(features) + adapt_services(role_id) + end + + def adapt_services(role_id) + services = raw_roles.find { |r| r["id"] == role_id }["services"] + services ||= [] + + to_enable = services.map { |s| s["name"] } + log.info "enable for #{role_id} these services: #{to_enable.inspect}" + + Installation::Services.enabled = to_enable end # the contents is an overlay for ProductFeatures sections diff --git a/src/lib/installation/services.rb b/src/lib/installation/services.rb new file mode 100644 index 000000000..efdd04546 --- /dev/null +++ b/src/lib/installation/services.rb @@ -0,0 +1,34 @@ +require "yast" + +Yast.import 'SystemdService' + +module Installation + # Represents services manipulation in installation. + class Services + class << self + include Yast::Logger + + def enabled + @enabled ||= [] + @enabled + end + + def enabled=(services) + if !services.is_a?(::Array) + raise ArgumentError, "Services#enabled= allows only Array as " \ + "argument, not #{services.inspect}" + end + + @enabled = services + end + + def write + enabled.each do |service| + log.info "Enabling service #{service}" + s = Yast::SystemdService.find!(service) + s.enable + end + end + end + end +end