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
