Page MenuHomeVyOS Platform

config-sync: TypeError: 'coroutine' object is not iterable
Closed, ResolvedPublicBUG

Description

Trying to set up config-sync on vyos 2025.08.12-0020-rolling. One router has a bunch of config, the other is newly installed and I'd like to sync the existing config over.

HTTP API is enabled on the new router (.251):

set service https allow-client address '10.xxx.xxx.252'
set service https api keys id vyos01-configsync key 'xxxxxxx'
set service https api rest
set service https certificates certificate 'vyos02.xxx.xx'
set service https listen-address '10.xxx.xxx.251'
set service https port '10443'
set service https tls-version '1.3'

Config-sync configured on the old one (.252):

set service config-sync mode 'load'
set service config-sync secondary address '10.xxx.xxx.251'
set service config-sync secondary key 'xxxxxx'
set service config-sync secondary port '10443'
set service config-sync section firewall
set service config-sync section nat
set service config-sync section policy
set service config-sync section qos
set service config-sync section service dns
set service config-sync section system static-host-mapping

Make a test change and commit (delete an empty firewall list), returns error:

[edit firewall]
david@vyos01# delete  ipv4 name test 
[edit firewall]
david@vyos01# commit
INFO:vyos_config_sync:Config synchronization: Mode=load, Secondary=10.xxx.xxx.251
An error occurred: Expecting value: line 1 column 1 (char 0)
ERROR:vyos_config_sync:An error occurred: Expecting value: line 1 column 1 (char 0)

On the secondary, I see a python traceback:

Aug 12 20:42:15 vyos02 vyos-http-api[13213]: INFO:      - "POST /configure-section HTTP/1.0" 500 Internal Server Error
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: ERROR:    Exception in ASGI application
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: Traceback (most recent call last):
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/fastapi/encoders.py", line 324, in jsonable_encoder
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     data = dict(obj)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:            ^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: TypeError: 'coroutine' object is not iterable
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: During handling of the above exception, another exception occurred:
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: Traceback (most recent call last):
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/fastapi/encoders.py", line 329, in jsonable_encoder
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     data = vars(obj)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:            ^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: TypeError: vars() argument must have __dict__ attribute
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: The above exception was the direct cause of the following exception:
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: Traceback (most recent call last):
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     result = await app(  # type: ignore[func-returns-value]
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     return await self.app(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/fastapi/applications.py", line 1054, in __call__
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await super().__call__(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/applications.py", line 113, in __call__
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await self.middleware_stack(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/middleware/errors.py", line 187, in __call__
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     raise exc
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/middleware/errors.py", line 165, in __call__
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await self.app(scope, receive, _send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     raise exc
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await app(scope, receive, sender)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/routing.py", line 715, in __call__
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await self.middleware_stack(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/routing.py", line 735, in app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await route.handle(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/routing.py", line 288, in handle
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await self.app(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/routing.py", line 76, in app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     raise exc
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     await app(scope, receive, sender)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/starlette/routing.py", line 73, in app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     response = await f(request)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:                ^^^^^^^^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/libexec/vyos/services/api/rest/routers.py", line 279, in custom_route_handler
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     raise e
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/libexec/vyos/services/api/rest/routers.py", line 272, in custom_route_handler
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     response: Response = await original_route_handler(request)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/fastapi/routing.py", line 327, in app
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     content = await serialize_response(
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:               ^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/fastapi/routing.py", line 201, in serialize_response
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     return jsonable_encoder(response_content)
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:   File "/usr/share/vyos-http-api-tools/lib/python3.11/site-packages/fastapi/encoders.py", line 332, in jsonable_encoder
Aug 12 20:42:15 vyos02 vyos-http-api[13213]:     raise ValueError(errors) from e
Aug 12 20:42:15 vyos02 vyos-http-api[13213]: ValueError: [TypeError("'coroutine' object is not iterable"), TypeError('vars() argument must have __dict__ attribute')]

I've never tried config-sync before so it's possible I'm configuring it wrong, but this smells like a bug.

Details

Version
2025.08.12-0020-rolling
Is it a breaking change?
Perfectly compatible
Issue type
Bug (incorrect behavior)