cloudbase / cloudbase-init

Cross-platform instance initialization
http://openstack.org
Apache License 2.0
421 stars 149 forks source link

WMI issue may break cloudbase-init adapter rename at VM node bootstrapping #151

Open laozc opened 1 month ago

laozc commented 1 month ago

Recently cloudbase-init switched to use WMI to rename adapter for Windows Server 22H2 support. Some system may experience some lags at bootstrapping which may cause the WMI to break.

2024-07-24 02:59:34.598 3384 INFO cloudbaseinit.plugins.common.networkconfig [-] Renaming network adapter "Ethernet0 2" to "eth0"

2024-07-24 03:00:34.667 3384 ERROR cloudbaseinit.init [-] plugin 'NetworkConfigPlugin' failed with error '<x_wmi: Call was canceled by the message filter.  (-2147418110, 'Call was canceled by the message filter. ', (0, None, 'Call was canceled by the message filter. ', None, None, -2147418110), None)>': wmi.x_wmi: <x_wmi: Call was canceled by the message filter.  (-2147418110, 'Call was canceled by the message filter. ', (0, None, 'Call was canceled by the message filter. ', None, None, -2147418110), None)>

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init [-] <x_wmi: Call was canceled by the message filter.  (-2147418110, 'Call was canceled by the message filter. ', (0, None, 'Call was canceled by the message filter. ', None, None, -2147418110), None)>: wmi.x_wmi: <x_wmi: Call was canceled by the message filter.  (-2147418110, 'Call was canceled by the message filter. ', (0, None, 'Call was canceled by the message filter. ', None, None, -2147418110), None)>

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init Traceback (most recent call last):

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 112, in func_wrapper

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     return func(*args, **kwargs)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init            ^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 736, in get_class

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     cls = self._get_mi_class(class_name)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 62, in wrapper

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     return f(*args, **kwargs)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init            ^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 747, in _get_mi_class

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     cls = op.get_next_class()

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init           ^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init PyMI.error: {'error_code': 2147549186, 'mi_result': 1, 'message': 'Call was canceled by the message filter. '}

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init During handling of the above exception, another exception occurred:

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init Traceback (most recent call last):

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\init.py", line 66, in _exec_plugin

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     (status, reboot_required) = plugin.execute(service,

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init                                 ^^^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\plugins\common\networkconfig.py", line 307, in execute

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     return self._process_network_details_v2(network_details)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\plugins\common\networkconfig.py", line 295, in _process_network_details_v2

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     NetworkConfigPlugin._process_physical_links(

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\plugins\common\networkconfig.py", line 205, in _process_physical_links

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     osutils.rename_network_adapter(adapter_name, link.name)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\osutils\windows.py", line 859, in rename_network_adapter

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     net_adapter = self._get_network_msft_adapter(old_name)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\cloudbaseinit\osutils\windows.py", line 870, in _get_network_msft_adapter

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     conn = wmi.WMI(moniker='//./root/standardcimv2')

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 112, in func_wrapper

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     return func(*args, **kwargs)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init            ^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 932, in WMI

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     conn.__provider

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 112, in func_wrapper

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     return func(*args, **kwargs)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init            ^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init.py", line 601, in __getattr_

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     return self.get_class(six.text_type(name))

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init   File "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Lib\site-packages\wmi_init_.py", line 125, in func_wrapper

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init     raise x_wmi(err_msg, com_ex)

2024-07-24 03:00:34.745 3384 ERROR cloudbaseinit.init wmi.x_wmi: <x_wmi: Call was canceled by the message filter.  (-2147418110, 'Call was canceled by the message filter. ', (0, None, 'Call was canceled by the message filter. ', None, None, -2147418110), None)>

It also breaks the static IP since it's required to rename the adapter.

laozc commented 1 month ago

https://review.opendev.org/c/x/cloudbase-init/+/925167 addresses the issue by first calling WMI and then fallback to netsh and Rename-Adapter.