Simone Tiraboschi has uploaded a new change for review.

Change subject: packaging: setup: fixing iptables review dialog
......................................................................

packaging: setup: fixing iptables review dialog

Writing the will to review iptables changes into answer file,
fixing a bug

Change-Id: I8f16a90a074052226882d76fc80918ed276d379c
Bug-url: https://bugzilla.redhat.com/1109326
Signed-off-by: Simone Tiraboschi <stira...@redhat.com>
---
M packaging/setup/ovirt_engine_setup/constants.py
M 
packaging/setup/plugins/ovirt-engine-common/base/network/firewall_manager_iptables.py
M packaging/setup/plugins/ovirt-engine-setup/base/network/firewall_manager.py
3 files changed, 104 insertions(+), 49 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/11/34011/1

diff --git a/packaging/setup/ovirt_engine_setup/constants.py 
b/packaging/setup/ovirt_engine_setup/constants.py
index e7bff1e..47d6efb 100644
--- a/packaging/setup/ovirt_engine_setup/constants.py
+++ b/packaging/setup/ovirt_engine_setup/constants.py
@@ -385,7 +385,14 @@
         return 'OVESETUP_CONFIG/updateFirewall'
 
     FIREWALL_MANAGERS = 'OVESETUP_CONFIG/firewallManagers'
-    SKIP_FIREWALL_REVIEW = 'OVESETUP_CONFIG/skipFirewallReview'
+
+    @osetupattrs(
+        answerfile=True,
+        summary=False,
+    )
+    def FIREWALL_CHANGES_REVIEW(self):
+        return 'OVESETUP_CONFIG/firewallChangesReview'
+
     VALID_FIREWALL_MANAGERS = 'OVESETUP_CONFIG/validFirewallManagers'
     FQDN_REVERSE_VALIDATION = 'OVESETUP_CONFIG/fqdnReverseValidation'
     FQDN_NON_LOOPBACK_VALIDATION = 'OVESETUP_CONFIG/fqdnNonLoopback'
diff --git 
a/packaging/setup/plugins/ovirt-engine-common/base/network/firewall_manager_iptables.py
 
b/packaging/setup/plugins/ovirt-engine-common/base/network/firewall_manager_iptables.py
index 22cb72e..9a53997 100644
--- 
a/packaging/setup/plugins/ovirt-engine-common/base/network/firewall_manager_iptables.py
+++ 
b/packaging/setup/plugins/ovirt-engine-common/base/network/firewall_manager_iptables.py
@@ -22,6 +22,7 @@
 
 import difflib
 import gettext
+import os
 _ = lambda m: gettext.dgettext(message=m, domain='ovirt-engine-setup')
 
 
@@ -127,44 +128,97 @@
             )
 
         def review_config(self):
-            diffl = ''
-            with open(
-                    osetupcons.FileLocations.SYSCONFIG_IPTABLES,
-                    'r'
-            ) as current:
-                diff = difflib.unified_diff(
-                    current.readlines(),
-                    self._get_rules().splitlines(True),
-                    fromfile=_('current'),
-                    tofile=_('proposed'),
-                )
-                diffl = ''.join(diff)
-            if len(diffl) > 0:
-                confirmed = dialog.queryBoolean(
-                    dialog=self.plugin.dialog,
-                    name='OVESETUP_CONFIRM_IPTABLES_CHANGES',
-                    note=_(
-                        'Generated iptables rules are different '
-                        'from current ones.\n'
-                        'Please review the changes:\n\n'
-                        '{diff}\n\n'
-                        'Do you want to proceed with firewall configuration? '
-                        '(@VALUES@) [@DEFAULT@]: '
-                    ).format(
-                        diff=diffl
-                    ),
-                    prompt=True,
-                    true=_('Yes'),
-                    false=_('No'),
-                    default=True,
-                )
-                if not confirmed:
-                    raise RuntimeError(
+            diff_lines = ''
+            current_rules = ''
+            current_modified_since_prev_setup = False
+            interactive = True
+            if os.path.isfile(osetupcons.FileLocations.SYSCONFIG_IPTABLES):
+                with open(
+                        osetupcons.FileLocations.SYSCONFIG_IPTABLES,
+                        'r'
+                ) as current:
+                    current_rules = current.read().splitlines()
+            if os.path.isfile(osetupcons.FileLocations.OVIRT_IPTABLES_EXAMPLE):
+                with open(
+                        osetupcons.FileLocations.OVIRT_IPTABLES_EXAMPLE,
+                        'r'
+                ) as prev_setup_example:
+                    prev_setup_rules = prev_setup_example.read().splitlines()
+                    diff_prev_cur = difflib.unified_diff(
+                        current_rules,
+                        prev_setup_rules,
+                        lineterm='',
+                    )
+                    diff_lines = '\n'.join(diff_prev_cur)
+                    if len(diff_lines) > 0:
+                        current_modified_since_prev_setup = True
+            diff = difflib.unified_diff(
+                current_rules,
+                self._get_rules().splitlines(),
+                lineterm='',
+                fromfile=_('current'),
+                tofile=_('proposed'),
+            )
+            diff_lines = '\n'.join(diff)
+            if len(diff_lines) > 0:
+                if current_modified_since_prev_setup:
+                    self.logger.warning(
                         _(
-                            'iptables proposed configuration '
-                            'was rejected by user'
+                            "It seams that previously generated iptables "
+                            "configuration was manually edited,\n"
+                            "please carefully review the proposed "
+                            "configuration"
                         )
                     )
+                if self.environment[
+                    osetupcons.ConfigEnv.FIREWALL_CHANGES_REVIEW
+                ] is None:
+                    self.environment[
+                        osetupcons.ConfigEnv.FIREWALL_CHANGES_REVIEW
+                    ] = dialog.queryBoolean(
+                        dialog=self.plugin.dialog,
+                        name='OVESETUP_REVIEW_IPTABLES_CHANGES',
+                        note=_(
+                            'Generated iptables rules are different '
+                            'from current ones.\n'
+                            'Do you want to review them? '
+                            '(@VALUES@) [@DEFAULT@]: '
+                        ),
+                        prompt=True,
+                        true=_('Yes'),
+                        false=_('No'),
+                        default=False,
+                    )
+                else:
+                    interactive = False
+
+                if self.environment[
+                    osetupcons.ConfigEnv.FIREWALL_CHANGES_REVIEW
+                ] and interactive:
+                    confirmed = dialog.queryBoolean(
+                        dialog=self.plugin.dialog,
+                        name='OVESETUP_CONFIRM_IPTABLES_CHANGES',
+                        note=_(
+                            'Please review the changes:\n\n'
+                            '{diff}\n\n'
+                            'Do you want to proceed with firewall '
+                            'configuration? '
+                            '(@VALUES@) [@DEFAULT@]: '
+                        ).format(
+                            diff=diff_lines
+                        ),
+                        prompt=True,
+                        true=_('Yes'),
+                        false=_('No'),
+                        default=True,
+                    )
+                    if not confirmed:
+                        raise RuntimeError(
+                            _(
+                                'iptables proposed configuration '
+                                'was rejected by user'
+                            )
+                        )
 
     @plugin.event(
         stage=plugin.Stages.STAGE_SETUP,
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/base/network/firewall_manager.py 
b/packaging/setup/plugins/ovirt-engine-setup/base/network/firewall_manager.py
index b2ba4e6..3b4fe8a 100644
--- 
a/packaging/setup/plugins/ovirt-engine-setup/base/network/firewall_manager.py
+++ 
b/packaging/setup/plugins/ovirt-engine-setup/base/network/firewall_manager.py
@@ -43,6 +43,7 @@
         super(Plugin, self).__init__(context=context)
         self._detected_managers = []
         self._available_managers = []
+        self._selected_manager = None
 
     @plugin.event(
         stage=plugin.Stages.STAGE_INIT,
@@ -57,8 +58,8 @@
             None
         )
         self.environment.setdefault(
-            osetupcons.ConfigEnv.SKIP_FIREWALL_REVIEW,
-            False
+            osetupcons.ConfigEnv.FIREWALL_CHANGES_REVIEW,
+            None
         )
         self.environment.setdefault(
             osetupcons.ConfigEnv.VALID_FIREWALL_MANAGERS,
@@ -220,12 +221,13 @@
                     ],
                 ),
             )
-        next(
+        self._selected_manager = [
             m for m in self._available_managers
             if m.name == self.environment[
                 osetupcons.ConfigEnv.FIREWALL_MANAGER
             ]
-        ).enable()
+        ][0]
+        self._selected_manager.enable()
 
     @plugin.event(
         stage=plugin.Stages.STAGE_VALIDATION,
@@ -238,15 +240,7 @@
         ),
     )
     def _review_config(self):
-        if not self.environment[
-            osetupcons.ConfigEnv.SKIP_FIREWALL_REVIEW
-        ]:
-            next(
-                m for m in self._available_managers
-                if m.name == self.environment[
-                    osetupcons.ConfigEnv.FIREWALL_MANAGER
-                ]
-            ).review_config()
+        self._selected_manager.review_config()
 
     @plugin.event(
         stage=plugin.Stages.STAGE_MISC,


-- 
To view, visit http://gerrit.ovirt.org/34011
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f16a90a074052226882d76fc80918ed276d379c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Simone Tiraboschi <stira...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to