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 <phoracek(a)redhat.com>
---
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 <phoracek(a)redhat.com>