https://www.redhat.com/archives/freeipa-users/2015-December/msg00203.html -- David Kupka
From 114b4e2c1ffaa5c09dbfed54bb1f90cfa41f4678 Mon Sep 17 00:00:00 2001 From: David Kupka <dku...@redhat.com> Date: Wed, 16 Dec 2015 12:43:13 +0000 Subject: [PATCH 1/2] installer: Propagate option values from components instead of copying them.
--- ipapython/install/core.py | 7 +++++++ ipaserver/install/server/common.py | 28 ---------------------------- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/ipapython/install/core.py b/ipapython/install/core.py index 6b2da05..62756da 100644 --- a/ipapython/install/core.py +++ b/ipapython/install/core.py @@ -528,6 +528,13 @@ class Composite(Configurable): for order, owner_cls, name in result: yield owner_cls, name + def __getattr__(self, name): + for owner_cls, knob_name in self.knobs(): + for component in self.__components: + if isinstance(component, owner_cls): + return getattr(component, knob_name) + raise AttributeError(name) + def _reset(self): self.__components = list(self._get_components()) diff --git a/ipaserver/install/server/common.py b/ipaserver/install/server/common.py index 3eb7279..948aac8 100644 --- a/ipaserver/install/server/common.py +++ b/ipaserver/install/server/common.py @@ -409,34 +409,6 @@ class BaseServer(common.Installable, common.Interactive, core.Composite): # Automatically disable pkinit w/ dogtag until that is supported self.no_pkinit = True - self.external_ca = self.ca.external_ca - self.external_ca_type = self.ca.external_ca_type - self.external_cert_files = self.ca.external_cert_files - self.dirsrv_cert_files = self.ca.dirsrv_cert_files - self.http_cert_files = self.ca.http_cert_files - self.pkinit_cert_files = self.ca.pkinit_cert_files - self.dirsrv_pin = self.ca.dirsrv_pin - self.http_pin = self.ca.http_pin - self.pkinit_pin = self.ca.pkinit_pin - self.dirsrv_cert_name = self.ca.dirsrv_cert_name - self.http_cert_name = self.ca.http_cert_name - self.pkinit_cert_name = self.ca.pkinit_cert_name - self.ca_cert_files = self.ca.ca_cert_files - self.subject = self.ca.subject - self.ca_signing_algorithm = self.ca.ca_signing_algorithm - self.skip_schema_check = self.ca.skip_schema_check - - self.forwarders = self.dns.forwarders - self.no_forwarders = self.dns.no_forwarders - self.reverse_zones = self.dns.reverse_zones - self.no_reverse = self.dns.no_reverse - self.no_dnssec_validation = self.dns.no_dnssec_validation - self.dnssec_master = self.dns.dnssec_master - self.disable_dnssec_master = self.dns.disable_dnssec_master - self.kasp_db_file = self.dns.kasp_db_file - self.force = self.dns.force - self.zonemgr = self.dns.zonemgr - self.unattended = not self.interactive ca = core.Component(BaseServerCA) -- 2.5.0
From b726b613d0f5afcbe7665368b9aaba336d6e2974 Mon Sep 17 00:00:00 2001 From: David Kupka <dku...@redhat.com> Date: Wed, 16 Dec 2015 12:43:13 +0000 Subject: [PATCH 1/2] installer: Propagate option values from components instead of copying them. --- ipapython/install/core.py | 7 +++++++ ipaserver/install/server/common.py | 31 ------------------------------- 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/ipapython/install/core.py b/ipapython/install/core.py index 2f62b85..3eb38d3 100644 --- a/ipapython/install/core.py +++ b/ipapython/install/core.py @@ -531,6 +531,13 @@ class Composite(Configurable): for order, owner_cls, name in result: yield owner_cls, name + def __getattr__(self, name): + for owner_cls, knob_name in self.knobs(): + for component in self.__components: + if isinstance(component, owner_cls): + return getattr(component, knob_name) + raise AttributeError(name) + def _reset(self): self.__components = list(self._get_components()) diff --git a/ipaserver/install/server/common.py b/ipaserver/install/server/common.py index 19a1cc8..00b05c9 100644 --- a/ipaserver/install/server/common.py +++ b/ipaserver/install/server/common.py @@ -461,37 +461,6 @@ class BaseServer(common.Installable, common.Interactive, core.Composite): # Automatically disable pkinit w/ dogtag until that is supported self.no_pkinit = True - self.external_ca = self.ca.external_ca - self.external_ca_type = self.ca.external_ca_type - self.external_cert_files = self.ca.external_cert_files - self.dirsrv_cert_files = self.ca.dirsrv_cert_files - self.http_cert_files = self.ca.http_cert_files - self.pkinit_cert_files = self.ca.pkinit_cert_files - self.dirsrv_pin = self.ca.dirsrv_pin - self.http_pin = self.ca.http_pin - self.pkinit_pin = self.ca.pkinit_pin - self.dirsrv_cert_name = self.ca.dirsrv_cert_name - self.http_cert_name = self.ca.http_cert_name - self.pkinit_cert_name = self.ca.pkinit_cert_name - self.ca_cert_files = self.ca.ca_cert_files - self.subject = self.ca.subject - self.ca_signing_algorithm = self.ca.ca_signing_algorithm - self.skip_schema_check = self.ca.skip_schema_check - - self.forwarders = self.dns.forwarders - self.auto_forwarders = self.dns.auto_forwarders - self.no_forwarders = self.dns.no_forwarders - self.reverse_zones = self.dns.reverse_zones - self.no_reverse = self.dns.no_reverse - self.auto_reverse = self.dns.auto_reverse - self.allow_zone_overlap = self.dns.allow_zone_overlap - self.no_dnssec_validation = self.dns.no_dnssec_validation - self.dnssec_master = self.dns.dnssec_master - self.disable_dnssec_master = self.dns.disable_dnssec_master - self.kasp_db_file = self.dns.kasp_db_file - self.force = self.dns.force - self.zonemgr = self.dns.zonemgr - self.unattended = not self.interactive ca = core.Component(BaseServerCA) -- 2.5.0
From aef57bf0253ce77028a867e31b5821a36925d91f Mon Sep 17 00:00:00 2001 From: David Kupka <dku...@redhat.com> Date: Wed, 16 Dec 2015 12:45:24 +0000 Subject: [PATCH 2/2] installer: Fix logic of reading option values from cache. Only options explicitly set must be stored before installer exits first step of external CA setup. When installer continues all stored option values must be restored. --- ipaserver/install/server/install.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ipaserver/install/server/install.py b/ipaserver/install/server/install.py index 7bd8994..5c64fab 100644 --- a/ipaserver/install/server/install.py +++ b/ipaserver/install/server/install.py @@ -337,9 +337,7 @@ def install_check(installer): sys.exit("Directory Manager password required") try: cache_vars = read_cache(dm_password) - for name, value in cache_vars.iteritems(): - if name not in options.__dict__: - options.__dict__[name] = value + options.__dict__.update(cache_vars) if cache_vars.get('external_ca', False): options.external_ca = False options.interactive = False @@ -761,7 +759,8 @@ def install(installer): options.host_name = host_name options.forwarders = dns.dns_forwarders options.reverse_zones = dns.reverse_zones - cache_vars = {n: getattr(options, n) for o, n in installer.knobs()} + cache_vars = {n: options.__dict__[n] for o, n in installer.knobs() + if n in options.__dict__} write_cache(cache_vars) ca.install_step_0(False, None, options) -- 2.5.0
From 2b517ed40d51a6ac40d8a5f51bf53cbb5922bc07 Mon Sep 17 00:00:00 2001 From: David Kupka <dku...@redhat.com> Date: Wed, 16 Dec 2015 12:45:24 +0000 Subject: [PATCH 2/2] installer: Fix logic of reading option values from cache. Only options explicitly set must be stored before installer exits first step of external CA setup. When installer continues all stored option values must be restored. --- ipaserver/install/server/install.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ipaserver/install/server/install.py b/ipaserver/install/server/install.py index a07ca66..2da1e3d 100644 --- a/ipaserver/install/server/install.py +++ b/ipaserver/install/server/install.py @@ -444,9 +444,7 @@ def install_check(installer): sys.exit("Directory Manager password required") try: cache_vars = read_cache(dm_password) - for name, value in cache_vars.items(): - if name not in options.__dict__: - options.__dict__[name] = value + options.__dict__.update(cache_vars) if cache_vars.get('external_ca', False): options.external_ca = False options.interactive = False @@ -867,7 +865,8 @@ def install(installer): options.admin_password = admin_password options.host_name = host_name options.reverse_zones = dns.reverse_zones - cache_vars = {n: getattr(options, n) for o, n in installer.knobs()} + cache_vars = {n: options.__dict__[n] for o, n in installer.knobs() + if n in options.__dict__} write_cache(cache_vars) ca.install_step_0(False, None, options) -- 2.5.0
-- Manage your subscription for the Freeipa-devel mailing list: https://www.redhat.com/mailman/listinfo/freeipa-devel Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code