toscaparser supports nested importing of definitions from local or remote while instantiating a tosca template. However, importing from remote can be failed and ended up in "Bad Gateway" error if the server is busy. Here is am example of log using tosca template in Tacker.
2023-02-06 06:53:59,581 ERROR [tacker.api.vnflcm.v1.controller]
The pre-parsed input failed validation with the following error(s):
URLException: Failed to reach server "https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_common_types.yaml". Reason is: Bad Gateway.
File /usr/lib/python3.8/runpy.py, line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File /usr/lib/python3.8/runpy.py, line 87, in _run_code
exec(code, run_globals)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/stestr/subunit_runner/run.py, line 93, in <module>
main()
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/stestr/subunit_runner/run.py, line 87, in main
program.TestProgram(
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/stestr/subunit_runner/program.py, line 185, in __init__
self.runTests()
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/stestr/subunit_runner/program.py, line 226, in runTests
self.result = testRunner.run(self.test)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/stestr/subunit_runner/run.py, line 52, in run
test(result)
File /usr/lib/python3.8/unittest/suite.py, line 84, in __call__
return self.run(*args, **kwds)
File /usr/lib/python3.8/unittest/suite.py, line 122, in run
test(result)
File /usr/lib/python3.8/unittest/suite.py, line 84, in __call__
return self.run(*args, **kwds)
File /usr/lib/python3.8/unittest/suite.py, line 122, in run
test(result)
File /usr/lib/python3.8/unittest/suite.py, line 84, in __call__
return self.run(*args, **kwds)
File /usr/lib/python3.8/unittest/suite.py, line 122, in run
test(result)
File /usr/lib/python3.8/unittest/case.py, line 736, in __call__
return self.run(*args, **kwds)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/testtools/testcase.py, line 654, in run
return run_test.run(result)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/testtools/runtest.py, line 80, in run
return self._run_one(actual_result)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/testtools/runtest.py, line 94, in _run_one
return self._run_prepared_result(ExtendedToOriginalDecorator(result))
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/testtools/runtest.py, line 108, in _run_prepared_result
self._run_core()
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/testtools/runtest.py, line 145, in _run_core
if self.exception_caught == self._run_user(
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/testtools/runtest.py, line 193, in _run_user
return fn(*args, **kwargs)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/testtools/testcase.py, line 702, in _run_test_method
return self._get_test_method()()
File /usr/lib/python3.8/unittest/mock.py, line 1325, in patched
return func(*newargs, **newkeywargs)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/tests/unit/vnflcm/test_controller.py, line 3013, in test_scale_out_cnf_err_over_max_scale_level
resp = req.get_response(self.app)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/webob/request.py, line 1313, in send
status, headers, app_iter = self.call_application(
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/webob/request.py, line 1278, in call_application
app_iter = application(self.environ, start_response)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/webob/dec.py, line 143, in __call__
return resp(environ, start_response)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/webob/dec.py, line 143, in __call__
return resp(environ, start_response)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/routes/middleware.py, line 153, in __call__
response = self.app(environ, start_response)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/webob/dec.py, line 143, in __call__
return resp(environ, start_response)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/webob/dec.py, line 129, in __call__
resp = self.call_func(req, *args, **kw)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/webob/dec.py, line 193, in call_func
return self.func(req, *args, **kwargs)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/wsgi.py, line 984, in __call__
action_result = self.dispatch(request, action, args)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/wsgi.py, line 1025, in dispatch
return controller_method(request=request, **action_args)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/api/validation/__init__.py, line 49, in wrapper
return func(*args, **kwargs)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/wsgi.py, line 108, in wrapped
return f(*args, **kwargs)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/api/vnflcm/v1/controller.py, line 1370, in scale
return self._scale(context, vnf_instance, vnf_info, body)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/api/vnflcm/v1/controller.py, line 105, in inner
return f(self, context, vnf_instance, *args, **kw)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/api/vnflcm/v1/controller.py, line 160, in inner
return f(self, context, vnf_instance, vnf, *args, **kw)
File /home/zuul/src/opendev.org/openstack/tacker/tacker/api/vnflcm/v1/controller.py, line 1255, in _scale
max_level = self._get_scale_max_level_from_vnfd(
File /home/zuul/src/opendev.org/openstack/tacker/tacker/api/vnflcm/v1/controller.py, line 1191, in _get_scale_max_level_from_vnfd
tosca = tosca_template.ToscaTemplate(parsed_params={}, a_file=False,
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/tosca_template.py, line 103, in __init__
self.topology_template = self._topology_template()
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/tosca_template.py, line 119, in _topology_template
self._get_all_custom_defs(),
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/tosca_template.py, line 181, in _get_all_custom_defs
import_defs = self._get_all_custom_defs(
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/tosca_template.py, line 175, in _get_all_custom_defs
custom_defs, nested_imports = self._get_custom_types(
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/tosca_template.py, line 211, in _get_custom_types
custom_service = toscaparser.imports.\
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/imports.py, line 56, in __init__
self._validate_and_load_imports()
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/imports.py, line 98, in _validate_and_load_imports
full_file_name, custom_type = self._load_import_template(
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/imports.py, line 200, in _load_import_template
return file_name, YAML_LOADER(file_name, False)
File /home/zuul/src/opendev.org/openstack/tacker/.tox/py38/lib/python3.8/site-packages/toscaparser/utils/yamlparser.py, line 45, in load_yaml
ExceptionCollector.appendException(URLException(what=msg))
This issue was fixed in the openstack/ tosca-parser 2.9.0 release.