Skip to content

♻️ Renames osparc environments as osparc variables and secrets #4443

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 30, 2023
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from string import Template
from typing import Any

OSPARC_IDENTIFIER_PREFIX = "OSPARC_ENVIRONMENT_"
OSPARC_IDENTIFIER_PREFIX = "OSPARC_VARIABLE_"


def upgrade_identifier(identifier: str) -> str:
Expand All @@ -30,7 +30,7 @@ def upgrade_identifier(identifier: str) -> str:
def substitute_all_legacy_identifiers(text: str) -> str:
"""Substitutes all legacy identifiers found in the text by the new format expected in TemplateText

For instance: '%%this-identifier%%' will be substituted by '$OSPARC_ENVIRONMENT_THIS_IDENTIFIER'
For instance: '%%this-identifier%%' will be substituted by '$OSPARC_VARIABLE_THIS_IDENTIFIER'
"""

def _upgrade(match):
Expand Down
28 changes: 14 additions & 14 deletions packages/models-library/tests/test_service_settings_labels.py
Original file line number Diff line number Diff line change
Expand Up @@ -393,18 +393,18 @@ def test_not_allowed_in_both_permit_list_and_outgoing_internet():
@pytest.fixture
def vendor_environments() -> dict[str, Any]:
return {
"OSPARC_ENVIRONMENT_VENDOR_SECRET_DNS_RESOLVER_ADDRESS": "172.0.0.1",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_DNS_RESOLVER_PORT": 1234,
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENCE_HOSTNAME": "hostname",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS": [
"OSPARC_VARIABLE_VENDOR_SECRET_DNS_RESOLVER_ADDRESS": "172.0.0.1",
"OSPARC_VARIABLE_VENDOR_SECRET_DNS_RESOLVER_PORT": 1234,
"OSPARC_VARIABLE_VENDOR_SECRET_LICENCE_HOSTNAME": "hostname",
"OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS": [
1,
2,
3,
4,
],
"OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS_1": 1,
"OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS_2": 2,
"OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS_3": 3,
"OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS_1": 1,
"OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS_2": 2,
"OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS_3": 3,
}


Expand Down Expand Up @@ -446,13 +446,13 @@ def service_labels() -> dict[str, str]:
{
"hostname": "license.com",
"tcp_ports": [
"$OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS_1",
"$OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS_2",
"$OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS_1",
"$OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS_2",
3,
],
"dns_resolver": {
"address": "$OSPARC_ENVIRONMENT_VENDOR_SECRET_DNS_RESOLVER_ADDRESS",
"port": "$OSPARC_ENVIRONMENT_VENDOR_SECRET_DNS_RESOLVER_PORT",
"address": "$OSPARC_VARIABLE_VENDOR_SECRET_DNS_RESOLVER_ADDRESS",
"port": "$OSPARC_VARIABLE_VENDOR_SECRET_DNS_RESOLVER_PORT",
},
}
]
Expand Down Expand Up @@ -522,14 +522,14 @@ def service_labels() -> dict[str, str]:
def test_can_parse_labels_with_osparc_identifiers(
vendor_environments: dict[str, Any], service_labels: dict[str, str]
):
# can load OSPARC_ENVIRONMENT_ identifiers!!
# can load OSPARC_VARIABLE_ identifiers!!
service_meta = SimcoreServiceLabels.parse_obj(service_labels)

assert service_meta.containers_allowed_outgoing_permit_list["s4l-core"][
0
].tcp_ports == [
"$OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS_1",
"$OSPARC_ENVIRONMENT_VENDOR_SECRET_TCP_PORTS_2",
"$OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS_1",
"$OSPARC_VARIABLE_VENDOR_SECRET_TCP_PORTS_2",
3,
]

Expand Down
36 changes: 18 additions & 18 deletions packages/models-library/tests/test_utils_specs_substitution.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,24 @@ def service_version() -> str:


@pytest.fixture()
def available_osparc_environments(
def available_osparc_variables(
simcore_registry: str,
service_version: str,
) -> dict[str, SubstitutionValue]:
osparc_vendor_environments = {
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_HOST": "product_a-server",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_PRIMARY_PORT": 1,
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_SECONDARY_PORT": 2,
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_DNS_RESOLVER_IP": "1.1.1.1",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_DNS_RESOLVER_PORT": "21",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_FILE": "license.txt",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_FILE_PRODUCT1": "license-p1.txt",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_FILE_PRODUCT2": "license-p2.txt",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LIST": "[1, 2, 3]",
osparc_vendor_variables = {
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_HOST": "product_a-server",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_PRIMARY_PORT": 1,
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_SECONDARY_PORT": 2,
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_DNS_RESOLVER_IP": "1.1.1.1",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_DNS_RESOLVER_PORT": "21",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_FILE": "license.txt",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_FILE_PRODUCT1": "license-p1.txt",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_FILE_PRODUCT2": "license-p2.txt",
"OSPARC_VARIABLE_VENDOR_SECRET_LIST": "[1, 2, 3]",
}

environs = {
**osparc_vendor_environments,
**osparc_vendor_variables,
"SIMCORE_REGISTRY": simcore_registry,
"SERVICE_VERSION": service_version,
"DISPLAY": "True",
Expand Down Expand Up @@ -74,8 +74,8 @@ def available_osparc_environments(
"init": True,
"environment": [
"DISPLAY=${DISPLAY}",
"SOME_LIST=$OSPARC_ENVIRONMENT_VENDOR_SECRET_LIST",
"MY_LICENSE=$OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_FILE",
"SOME_LIST=$OSPARC_VARIABLE_VENDOR_SECRET_LIST",
"MY_LICENSE=$OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_FILE",
],
"volumes": ["/tmp/.X11-unix:/tmp/.X11-unix"],
},
Expand All @@ -94,7 +94,7 @@ def available_osparc_environments(
],
)
def test_substitutions_in_compose_spec(
available_osparc_environments: dict[str, SubstitutionValue],
available_osparc_variables: dict[str, SubstitutionValue],
service_name: str,
service_spec: dict[str, Any],
expected_service_spec: dict[str, Any],
Expand All @@ -103,7 +103,7 @@ def test_substitutions_in_compose_spec(

identifiers_requested = specs_resolver.get_identifiers()

substitutions = specs_resolver.set_substitutions(available_osparc_environments)
substitutions = specs_resolver.set_substitutions(available_osparc_variables)
assert substitutions is specs_resolver.substitutions

assert set(identifiers_requested) == set(substitutions.keys())
Expand Down Expand Up @@ -133,15 +133,15 @@ def test_nothing_to_substitute():


def test_no_identifier_present(
available_osparc_environments: dict[str, SubstitutionValue]
available_osparc_variables: dict[str, SubstitutionValue]
):

original_spec = {"x": 33, "y": {"z": True}, "foo": "$UNREGISTERED_ID"}

specs_resolver = SpecsSubstitutionsResolver(original_spec, upgrade=False)

assert specs_resolver.get_identifiers() == ["UNREGISTERED_ID"]
assert specs_resolver.set_substitutions(available_osparc_environments) == {}
assert specs_resolver.set_substitutions(available_osparc_variables) == {}

# no substitutions
assert specs_resolver.run() == original_spec
58 changes: 29 additions & 29 deletions packages/models-library/tests/test_utils_string_substitution.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@
[
(
"%%container_name.sym-server%%",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_SYM_SERVER",
"OSPARC_VARIABLE_CONTAINER_NAME_SYM_SERVER",
),
(
"%service_uuid%",
"OSPARC_ENVIRONMENT_SERVICE_UUID",
"OSPARC_VARIABLE_SERVICE_UUID",
),
(
"$SERVICE_VERSION",
"OSPARC_ENVIRONMENT_SERVICE_VERSION",
"OSPARC_VARIABLE_SERVICE_VERSION",
),
],
)
Expand All @@ -50,19 +50,19 @@ def test_substitution_with_new_and_legacy_identifiers():
- SYM_SERVER_HOSTNAME=%%container_name.sym-server%%
- APP_HOSTNAME=%%container_name.dsistudio-app%%
- APP_HOSTNAME=some-prefix_%service_uuid%
- MY_LICENSE_FILE=${OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_FILE}
- MY_PRODUCT=$OSPARC_ENVIRONMENT_CURRENT_PRODUCT
- MY_EMAIL=$OSPARC_ENVIRONMENT_USER_EMAIL
- MY_LICENSE_FILE=${OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_FILE}
- MY_PRODUCT=$OSPARC_VARIABLE_CURRENT_PRODUCT
- MY_EMAIL=$OSPARC_VARIABLE_USER_EMAIL
- AS_VOILA=1
- DISPLAY1=$${KEEP_SINCE_IT_USES_DOLLAR_ESCAPE_SIGN}
- DISPLAY2=${KEEP_SINCE_IT_WAS_EXCLUDED_FROM_SUBSTITUTIONS}
containers-allowed-outgoing-permit-list:
s4l-core:
- hostname: $OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_HOST
tcp_ports: [$OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_PRIMARY_PORT, $OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_SECONDARY_PORT]
- hostname: $OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_HOST
tcp_ports: [$OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_PRIMARY_PORT, $OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_SECONDARY_PORT]
dns_resolver:
address: $OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_DNS_RESOLVER_IP
port: $OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_DNS_RESOLVER_PORT
address: $OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_DNS_RESOLVER_IP
port: $OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_DNS_RESOLVER_PORT
containers-allowed-outgoing-internet:
- s4l-core-stream
"""
Expand All @@ -77,19 +77,19 @@ def test_substitution_with_new_and_legacy_identifiers():
"SIMCORE_REGISTRY",
"SERVICE_VERSION",
# NOTE: these identifier names were upgraded from legacy
"OSPARC_ENVIRONMENT_CONTAINER_NAME_SYM_SERVER",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_DSISTUDIO_APP",
"OSPARC_ENVIRONMENT_SERVICE_UUID",
"OSPARC_VARIABLE_CONTAINER_NAME_SYM_SERVER",
"OSPARC_VARIABLE_CONTAINER_NAME_DSISTUDIO_APP",
"OSPARC_VARIABLE_SERVICE_UUID",
# -----
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_FILE",
"OSPARC_ENVIRONMENT_CURRENT_PRODUCT",
"OSPARC_ENVIRONMENT_USER_EMAIL",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_FILE",
"OSPARC_VARIABLE_CURRENT_PRODUCT",
"OSPARC_VARIABLE_USER_EMAIL",
"KEEP_SINCE_IT_WAS_EXCLUDED_FROM_SUBSTITUTIONS",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_HOST",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_PRIMARY_PORT",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_SERVER_SECONDARY_PORT",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_DNS_RESOLVER_IP",
"OSPARC_ENVIRONMENT_VENDOR_SECRET_LICENSE_DNS_RESOLVER_PORT",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_HOST",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_PRIMARY_PORT",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_SERVER_SECONDARY_PORT",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_DNS_RESOLVER_IP",
"OSPARC_VARIABLE_VENDOR_SECRET_LICENSE_DNS_RESOLVER_PORT",
]

# prepare substitutions map {id: value, ...}
Expand Down Expand Up @@ -144,14 +144,14 @@ def test_substitution_with_new_and_legacy_identifiers():
# Some fo the supported identifiers
KNOWN_IDENTIFIERS = {
"DISPLAY", # NOTE: this might be a mistake!
"OSPARC_ENVIRONMENT_CONTAINER_NAME_DSISTUDIO_APP",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_FSL_APP",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_ISEG_APP",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_S4L_CORE",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_SCT_LABEL_UTILS_APP",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_SPINAL_CORD_TOOLBOX_APP",
"OSPARC_ENVIRONMENT_CONTAINER_NAME_SYM_SERVER",
"OSPARC_ENVIRONMENT_SERVICE_UUID",
"OSPARC_VARIABLE_CONTAINER_NAME_DSISTUDIO_APP",
"OSPARC_VARIABLE_CONTAINER_NAME_FSL_APP",
"OSPARC_VARIABLE_CONTAINER_NAME_ISEG_APP",
"OSPARC_VARIABLE_CONTAINER_NAME_S4L_CORE",
"OSPARC_VARIABLE_CONTAINER_NAME_SCT_LABEL_UTILS_APP",
"OSPARC_VARIABLE_CONTAINER_NAME_SPINAL_CORD_TOOLBOX_APP",
"OSPARC_VARIABLE_CONTAINER_NAME_SYM_SERVER",
"OSPARC_VARIABLE_SERVICE_UUID",
"SERVICE_VERSION",
"SIMCORE_REGISTRY",
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from .base import metadata

# Intentionally includes the term "SECRET" to avoid leaking this value on a public domain
VENDOR_SECRET_PREFIX: Final[str] = "OSPARC_ENVIRONMENT_VENDOR_SECRET_"
VENDOR_SECRET_PREFIX: Final[str] = "OSPARC_VARIABLE_VENDOR_SECRET_"


services_vendor_secrets = sa.Table(
Expand All @@ -16,7 +16,7 @@
# - A secret is an environment value passed to the service at runtime
# - A vendor can associate secrets (e.g. a license code) to any of the services it owns
# - secrets_map
# - keys should be prefixed with OSPARC_ENVIRONMENT_VENDOR_SECRET_ (can still normalize on read)
# - keys should be prefixed with OSPARC_VARIABLE_VENDOR_SECRET_ (can still normalize on read)
# - values might be encrypted
#
metadata,
Expand All @@ -35,7 +35,7 @@
JSONB,
nullable=False,
server_default=sa.text("'{}'::jsonb"),
doc="Maps OSPARC_ENVIRONMENT_VENDOR_SECRET_* identifiers to a secret value (could be encrypted) "
doc="Maps OSPARC_VARIABLE_VENDOR_SECRET_* identifiers to a secret value (could be encrypted) "
"that can be replaced at runtime if found in the compose-specs",
),
# TIME STAMPS ----
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
dynamic_services,
dynamic_sidecar,
node_rights,
oenvs_substitutions,
osparc_variables_substitutions,
rabbitmq,
remote_debug,
storage,
Expand Down Expand Up @@ -132,7 +132,7 @@ def init_app(settings: AppSettings | None = None) -> FastAPI:
settings = app.state.settings
assert settings # nosec

oenvs_substitutions.setup(app)
osparc_variables_substitutions.setup(app)

if settings.SC_BOOT_MODE == BootModeEnum.DEBUG:
remote_debug.setup(app)
Expand Down
Loading