mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-07-06 22:10:41 +00:00
fix: allow default empty vars for conditionals (#2570)
# What does this PR do? We were not using conditionals correctly, conditionals can only be used when the env variable is set, so `${env.ENVIRONMENT:+}` would return None is ENVIRONMENT is not set. If you want to create a conditional value, you need to do `${env.ENVIRONMENT:=}`, this will pick the value of ENVIRONMENT if set, otherwise will return None. Closes: https://github.com/meta-llama/llama-stack/issues/2564 Signed-off-by: Sébastien Han <seb@redhat.com>
This commit is contained in:
parent
faaeccc6fd
commit
25268854bc
61 changed files with 236 additions and 211 deletions
|
@ -166,20 +166,31 @@ def replace_env_vars(config: Any, path: str = "") -> Any:
|
|||
env_value = os.environ.get(env_var)
|
||||
|
||||
if operator == "=": # Default value syntax: ${env.FOO:=default}
|
||||
if not env_value:
|
||||
# If the env is set like ${env.FOO:=default} then use the env value when set
|
||||
if env_value:
|
||||
value = env_value
|
||||
else:
|
||||
# If the env is not set, look for a default value
|
||||
# value_expr returns empty string (not None) when not matched
|
||||
# This means ${env.FOO:=} is an error
|
||||
# This means ${env.FOO:=} and it's accepted and returns empty string - just like bash
|
||||
if value_expr == "":
|
||||
raise EnvVarError(env_var, path)
|
||||
return ""
|
||||
else:
|
||||
value = value_expr
|
||||
else:
|
||||
value = env_value
|
||||
|
||||
elif operator == "+": # Conditional value syntax: ${env.FOO:+value_if_set}
|
||||
# If the env is set like ${env.FOO:+value_if_set} then use the value_if_set
|
||||
if env_value:
|
||||
value = value_expr
|
||||
if value_expr:
|
||||
value = value_expr
|
||||
# This means ${env.FOO:+}
|
||||
else:
|
||||
# Just like bash, this doesn't care whether the env is set or not and applies
|
||||
# the value, in this case the empty string
|
||||
return ""
|
||||
else:
|
||||
# If env var is not set, return empty string for the conditional case
|
||||
# Just like bash, this doesn't care whether the env is set or not, since it's not set
|
||||
# we return an empty string
|
||||
value = ""
|
||||
else: # No operator case: ${env.FOO}
|
||||
if not env_value:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue