diff --git a/services/observability/src/stackit/observability/configuration.py b/services/observability/src/stackit/observability/configuration.py index f7255cbe..f08f1eb4 100644 --- a/services/observability/src/stackit/observability/configuration.py +++ b/services/observability/src/stackit/observability/configuration.py @@ -12,6 +12,8 @@ Do not edit the class manually. """ # noqa: E501 docstring might be too long +import os + class HostConfiguration: def __init__( @@ -23,7 +25,14 @@ def __init__( server_operation_variables=None, ignore_operation_servers=False, ) -> None: - """Constructor""" + print( + "WARNING: STACKIT will move to a new way of specifying regions, where the region is provided\n", + "as a function argument instead of being set in the client configuration.\n" + "Once all services have migrated, the methods to specify the region in the client configuration " + "will be removed.", + ) + """Constructor + """ self._base_path = "https://argus.api.eu01.stackit.cloud" """Default Base url """ @@ -65,6 +74,7 @@ def get_host_from_settings(self, index, variables=None, servers=None): :param index: array index of the host settings :param variables: hash of variable and the corresponding value :param servers: an array of host settings or None + :error: if a region is given for a global url :return: URL based on host settings """ if index is None: @@ -83,8 +93,25 @@ def get_host_from_settings(self, index, variables=None, servers=None): url = server["url"] + # check if environment variable was provided for region + # if nothing was set this is None + region_env = os.environ.get("STACKIT_REGION") + # go through variables and replace placeholders for variable_name, variable in server.get("variables", {}).items(): + # If a region is provided by the user for a global url + # return an error (except for providing via environment variable). + # The region is provided as a function argument instead of being set in the client configuration. + if ( + variable_name == "region" + and (variable["default_value"] == "global" or variable["default_value"] == "") + and region_env is None + and variables.get(variable_name) is not None + ): + raise ValueError( + "this API does not support setting a region in the the client configuration, " + "please check if the region can be specified as a function parameter" + ) used_value = variables.get(variable_name, variable["default_value"]) if "enum_values" in variable and used_value not in variable["enum_values"]: