modern-father-72287
08/14/2024, 9:57 PMNone values. A couple of weird things I've noticed:
• Any `None`s that I pass to a resource (for example, a label on a kubernetes resource) seems to get completely ignored
• Any exports of value None are also ignored: it's as if there's no export at all.
I've found a couple of issues discussing possibly related things:
• https://github.com/pulumi/pulumi/issues/7376 talks about exporting undefined from Typescript apps.
• https://github.com/pulumi/pulumi-dotnet/issues/18 shows a dotnet example of a dictionary with a key with a null value getting "coerced" into an empty dictionary
Just to be clear: I'm not actually trying to export None values or feed nulls into any of the resources I'm declaring with Pulumi, I just am making mistakes, and they're really confusing to debug with the current (silent) behavior. I'd much rather have my pulumi app crash at runtime, or at least get a warning.
Am I understanding this correctly? Is this behavior documented anywhere? Is it configurable or is it a bug? Is this just part of the Pulumi learning curve?modern-zebra-45309
08/15/2024, 9:12 AMNone. The code cannot distinguish between you passing in None explicitly or the default None .
Example:
class RandomId(pulumi.CustomResource):
@overload
def __init__(__self__,
resource_name: str,
opts: Optional[pulumi.ResourceOptions] = None,
byte_length: Optional[pulumi.Input[int]] = None,
keepers: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
prefix: Optional[pulumi.Input[str]] = None,
__props__=None):modern-father-72287
08/15/2024, 9:26 AMargocd_namespace = k8s.core.v1.Namespace(
"demo",
metadata={
"name": "demo",
"labels": {
"i-am-none", None,
},
},
)
(in practice, that None value is usually something a little more complicated and non-obvious, like an Output that will eventually resolve to None)
There's nothing fundamental about Python that's preventing Pulumi from noticing this mistake. IMO, this feels like it should be an error to me. However, currently Pulumi just happily ignores this: no diff, no warnings, nothing.modern-zebra-45309
08/15/2024, 9:44 AMNone, I'd assume that this would be caught by a type checker, because "labels" should be pulumi.Input[Mapping[str, pulumi.Input[str]]]. My guess is that an output that resolves to None leads to the label being dropped, because labels have to be "string": "string". But I don't know where this happens, https://github.com/pulumi/pulumi-kubernetes/blob/master/provider/pkg/metadata/labels.go doesn't seem to handle nulls explicitly.