flaky-lawyer-21437
07/27/2024, 10:26 AMsupertokens_service = k8s.core.v1.Service("supertokens-service",
metadata={"namespace": namespace.metadata["name"]},
spec=k8s.core.v1.ServiceSpecArgs(
selector={"app": "supertokens"},
ports=[k8s.core.v1.ServicePortArgs(port=3567, target_port=3567)]
),
opts=pulumi.ResourceOptions(provider=k8s_provider)
)
The deployed service has name supertokens-d8a03ac6
.
Two questions:
⢠Can I access the service name using supertokens_service
variable somehow so I can configure my app container to query this service
⢠Can I set a fixed value for the service to supertokens
without the suffix so that it remains stable when I do updates, or is it Pulumi behavior to add the suffix and can't be changed ?modern-zebra-45309
07/27/2024, 10:35 AMsupertokens_service = k8s.core.v1.Service("supertokens-service",
metadata={"namespace": namespace.metadata.name,
# set a fixed name instead of auto-naming
"name": "supertokens"},
spec=k8s.core.v1.ServiceSpecArgs(
selector={"app": "supertokens"},
ports=[k8s.core.v1.ServicePortArgs(port=3567, target_port=3567)]
),
opts=pulumi.ResourceOptions(provider=k8s_provider)
)
# reference the service's name in another resource
other_resource = Resource("other-resource", service_name=supertokens_service.metadata.name)
# export the service's name as a stack output for downstream use
pulumi.export("supertokens-service-name", supertokens_service.metadata.name)
flaky-lawyer-21437
07/27/2024, 10:58 AMsupertokens_service_name = supertokens_service.metadata['name']
For my other resource, it's:
auth_api_deployment = k8s.apps.v1.Deployment("auth-api",
metadata={"namespace": namespace.metadata["name"]},
spec=k8s.apps.v1.DeploymentSpecArgs(
selector=k8s.meta.v1.LabelSelectorArgs(
match_labels={"app": "auth-api"}
),
replicas=1,
template=k8s.core.v1.PodTemplateSpecArgs(
metadata={"labels": {"app": "auth-api"}},
spec=k8s.core.v1.PodSpecArgs(
containers=[k8s.core.v1.ContainerArgs(
name="auth-api",
image=auth_api_image,
env=[
k8s.core.v1.EnvVarArgs(
name="SUPERTOKENS_URL",
value=f"http://{supertokens_service_name}:3567"
),
k8s.core.v1.EnvVarArgs(
name="SUPERTOKENS_API_KEY",
value=supertokens_api_key
)
]
)]
)
)
),
opts=pulumi.ResourceOptions(provider=k8s_provider)
)
However it seems I can not use supertokens_service_name
like this, as a value i'm getting:
<http://Calling> __str__ on an Output[T] is not supported.
To get the value of an Output[T] as an Output[str] consider:
1. o.apply(lambda v: f"prefix{v}suffix")
See <https://www.pulumi.com/docs/concepts/inputs-outputs> for more details.
This function may throw in a future version of Pulumi.:3567
- name: SUPERTOKENS_API_KEY
modern-zebra-45309
07/27/2024, 11:00 AMmodern-zebra-45309
07/27/2024, 11:00 AMflaky-lawyer-21437
07/27/2024, 11:00 AMsupertokens_service_name = supertokens_service.metadata['name'].apply(lambda name: str(name))
?modern-zebra-45309
07/27/2024, 11:01 AMmodern-zebra-45309
07/27/2024, 11:02 AMmodern-zebra-45309
07/27/2024, 11:04 AMpulumi.Output.concat("https//", supertokens_service.medatadata.name, ":3567")
I find this to be the most readable and if you have nested definitions (which is often the case for Kubernetes resources) and use a formatter, it will be neatly organized, with the variable on its own lineflaky-lawyer-21437
07/27/2024, 11:05 AMenv=[
k8s.core.v1.EnvVarArgs(
name="SUPERTOKENS_URL",
value=pulumi.Output.format("http://{0}:3567", supertokens_service_name)
),
flaky-lawyer-21437
07/27/2024, 11:05 AMmodern-zebra-45309
07/27/2024, 11:05 AMflaky-lawyer-21437
07/27/2024, 11:05 AMflaky-lawyer-21437
07/27/2024, 11:06 AMmodern-zebra-45309
07/27/2024, 11:07 AMpulumi.Output.json_dumps
is a thing. Not relevant here, but something that I would have liked to discover earlier. It often saves you from insane .apply()
constructs.flaky-lawyer-21437
07/27/2024, 11:08 AMmodern-zebra-45309
07/27/2024, 11:08 AMmodern-zebra-45309
07/27/2024, 11:09 AMflaky-lawyer-21437
07/27/2024, 11:10 AMmodern-zebra-45309
07/27/2024, 11:11 AM