Petr Horáček has uploaded a new change for review.

Change subject: hook: before_network_rollback
......................................................................

hook: before_network_rollback

When an exception occurs during network setup, rollback is executed
and after_network_setup is never triggered.

This hook point triggers hooks right before rollback (if needed).

Change-Id: I8a5d086b15b72c13d2b390c1310c2279446ac14f
Signed-off-by: Petr Horáček <[email protected]>
---
M vdsm.spec.in
M vdsm/hooks.py
M vdsm/network/api.py
M vdsm/vdsmd.8.in
M vdsm_hooks/Makefile.am
5 files changed, 27 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/85/45085/1

diff --git a/vdsm.spec.in b/vdsm.spec.in
index 72e7df6..53e388e 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -962,6 +962,7 @@
 %dir %{_libexecdir}/%{vdsm_name}/hooks/after_disk_hotunplug
 %dir %{_libexecdir}/%{vdsm_name}/hooks/before_vdsm_start
 %dir %{_libexecdir}/%{vdsm_name}/hooks/after_vdsm_stop
+%dir %{_libexecdir}/%{vdsm_name}/hooks/before_network_rollback
 %dir %{_libexecdir}/%{vdsm_name}/hooks/before_network_setup
 %dir %{_libexecdir}/%{vdsm_name}/hooks/after_network_setup
 %dir %{_libexecdir}/%{vdsm_name}/hooks/before_set_num_of_cpus
diff --git a/vdsm/hooks.py b/vdsm/hooks.py
index 5a4d25e..d3f8741 100644
--- a/vdsm/hooks.py
+++ b/vdsm/hooks.py
@@ -351,6 +351,11 @@
                         raiseError=False, hookType=_JSON_HOOK)
 
 
+def before_network_rollback(network_config_dict):
+    return _runHooksDir(network_config_dict, 'before_network_rollback',
+                        raiseError=False, hookType=_JSON_HOOK)
+
+
 def before_get_vm_stats():
     return _runHooksDir({}, 'before_get_vm_stats', raiseError=True,
                         hookType=_JSON_HOOK)
diff --git a/vdsm/network/api.py b/vdsm/network/api.py
index 5c8bed5..7798497 100755
--- a/vdsm/network/api.py
+++ b/vdsm/network/api.py
@@ -19,6 +19,7 @@
 
 from __future__ import absolute_import
 from __future__ import print_function
+from contextlib import contextmanager
 from functools import wraps
 import errno
 import inspect
@@ -865,7 +866,8 @@
     kernel_config = netconfpersistence.KernelConfig(_netinfo)
     normalized_config = kernel_config.normalize(
         netconfpersistence.BaseConfig(networks, bondings))
-    with ConfiguratorClass(in_rollback) as configurator:
+    with ConfiguratorClass(in_rollback) as configurator,\
+            _hooks_before_network_rollback(networks, bondings, options):
         # Remove edited networks and networks with 'remove' attribute
         for network, attrs in networks.items():
             if network in _netinfo.networks:
@@ -907,6 +909,16 @@
     hooks.after_network_setup(_buildSetupHookDict(networks, bondings, options))
 
 
+@contextmanager
+def _hooks_before_network_rollback(networks, bondings, options):
+    try:
+        yield
+    except:
+        hooks.before_network_rollback(
+            _buildSetupHookDict(networks, bondings, options))
+        raise
+
+
 def _vlanToInternalRepresentation(vlan):
     if vlan is None or vlan == '':
         vlan = None
diff --git a/vdsm/vdsmd.8.in b/vdsm/vdsmd.8.in
index 5dcac3f..a42e329 100644
--- a/vdsm/vdsmd.8.in
+++ b/vdsm/vdsmd.8.in
@@ -57,7 +57,7 @@
     before_disk_hotplug, after_disk_hotplug,
     before_disk_hotunplug, after_disk_hotunplug,
     before_vdsm_start, after_vdsm_stop,
-    before_network_setup, after_network_setup,
+    before_network_setup, after_network_setup, before_network_rollback,
     before_set_num_of_cpus, after_set_num_of_cpus,
     before_get_vm_stats, after_get_vm_stats,
     before_get_all_vm_stats, after_get_all_vm_stats,
@@ -72,11 +72,10 @@
 
 .SS Hook environment
 Each hook script (except before_vdsm_start, after_vdsm_stop, 
-before_network_setup and after_network_setup, before_get_vm_stats,
-after_get_vm_stats, before_get_all_vm_stats, after_get_all_vm_stats,
-before_get_caps, after_get_caps,
-before_get_stats, after_get_stats,
-and after_hostdev_list_by_caps) inherit
+before_network_setup and after_network_setup, before_network_rollback,
+before_get_vm_stats, after_get_vm_stats, before_get_all_vm_stats,
+after_get_all_vm_stats, before_get_caps, after_get_caps, before_get_stats,
+after_get_stats, and after_hostdev_list_by_caps) inherit
 the environment of the VDSM process, with an additional variable
 .B _hook_domxml
 which holds the path of libvirt's
@@ -86,8 +85,8 @@
 available as the environment variable
 .B vmId.
 
-The before_network_setup and after_network_setup hooks do also include an
-extra environment variable
+The before_network_setup, after_network_setup and before_network_rollback
+hooks do also include an extra environment variable
 .B _hook_json
 which holds a pointer to a file with the network parameters that vdsm is
 setting up (
diff --git a/vdsm_hooks/Makefile.am b/vdsm_hooks/Makefile.am
index 7dc9ff2..5e8d401 100644
--- a/vdsm_hooks/Makefile.am
+++ b/vdsm_hooks/Makefile.am
@@ -115,6 +115,7 @@
        after_disk_hotunplug \
        before_vdsm_start \
        after_vdsm_stop \
+       before_network_rollback \
        before_network_setup \
        after_network_setup \
        before_set_num_of_cpus \


-- 
To view, visit https://gerrit.ovirt.org/45085
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8a5d086b15b72c13d2b390c1310c2279446ac14f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Petr Horáček <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to