diff --git a/sdk/java/pulumi/src/main/java/com/pulumi/provider/internal/ResourceProviderService.java b/sdk/java/pulumi/src/main/java/com/pulumi/provider/internal/ResourceProviderService.java index 2fca03cea56..12c427f90ab 100644 --- a/sdk/java/pulumi/src/main/java/com/pulumi/provider/internal/ResourceProviderService.java +++ b/sdk/java/pulumi/src/main/java/com/pulumi/provider/internal/ResourceProviderService.java @@ -173,19 +173,26 @@ public void construct(pulumirpc.Provider.ConstructRequest request, .map(reference -> new DependencyProviderResource(reference)) .toArray(DependencyProviderResource[]::new); - var opts = ComponentResourceOptions.builder() + var optsBuilder = ComponentResourceOptions.builder() .aliases(aliases) .dependsOn(dependsOn) - .protect(request.getProtect()) .providers(providers) .parent(new DependencyResource(request.getParent())) .customTimeouts(deserializeTimeouts(request.getCustomTimeouts())) // TODO deletedWith: https://github.com/pulumi/pulumi-java/issues/944 .ignoreChanges(request.getIgnoreChangesList()) - .retainOnDelete(request.getRetainOnDelete()) - .replaceOnChanges(request.getReplaceOnChangesList()) - .build(); + .replaceOnChanges(request.getReplaceOnChangesList()); + if (request.getProtect()) { + optsBuilder = optsBuilder.protect(); + } + if (request.getRetainOnDelete()) { + optsBuilder = optsBuilder.retainOnDelete(); + } + + + var opts = optsBuilder.build(); + var domRequest = new com.pulumi.provider.internal.models.ConstructRequest( request.getType(), request.getName(), unmarshal(request.getInputs()), opts); diff --git a/sdk/java/pulumi/src/main/java/com/pulumi/resources/ComponentResourceOptions.java b/sdk/java/pulumi/src/main/java/com/pulumi/resources/ComponentResourceOptions.java index 27109add91f..7d983a8c871 100644 --- a/sdk/java/pulumi/src/main/java/com/pulumi/resources/ComponentResourceOptions.java +++ b/sdk/java/pulumi/src/main/java/com/pulumi/resources/ComponentResourceOptions.java @@ -30,7 +30,7 @@ public ComponentResourceOptions( @Nullable Output id, @Nullable Resource parent, @Nullable Output> dependsOn, - boolean protect, + @Nullable boolean protect, @Nullable List ignoreChanges, @Nullable String version, @Nullable CustomTimeouts customTimeouts, @@ -38,7 +38,7 @@ public ComponentResourceOptions( @Nullable List> aliases, @Nullable String urn, @Nullable List replaceOnChanges, - boolean retainOnDelete, + @Nullable boolean retainOnDelete, @Nullable String pluginDownloadURL, @Nullable List hideDiffs, @Nullable List providers, diff --git a/sdk/java/pulumi/src/main/java/com/pulumi/resources/CustomResourceOptions.java b/sdk/java/pulumi/src/main/java/com/pulumi/resources/CustomResourceOptions.java index 44dd95cffee..473bd23cdee 100644 --- a/sdk/java/pulumi/src/main/java/com/pulumi/resources/CustomResourceOptions.java +++ b/sdk/java/pulumi/src/main/java/com/pulumi/resources/CustomResourceOptions.java @@ -31,7 +31,7 @@ private CustomResourceOptions( @Nullable Output id, @Nullable Resource parent, @Nullable Output> dependsOn, - boolean protect, + @Nullable boolean protect, @Nullable List ignoreChanges, @Nullable String version, @Nullable ProviderResource provider, @@ -39,11 +39,11 @@ private CustomResourceOptions( @Nullable List resourceTransformations, @Nullable List> aliases, @Nullable String urn, - boolean deleteBeforeReplace, + @Nullable boolean deleteBeforeReplace, @Nullable List additionalSecretOutputs, @Nullable String importId, @Nullable List replaceOnChanges, - boolean retainOnDelete, + @Nullable boolean retainOnDelete, @Nullable String pluginDownloadURL, @Nullable List hideDiffs, @Nullable List replaceWith diff --git a/sdk/java/pulumi/src/main/java/com/pulumi/resources/Resource.java b/sdk/java/pulumi/src/main/java/com/pulumi/resources/Resource.java index 7585ac1ca18..d1e9c52ba17 100644 --- a/sdk/java/pulumi/src/main/java/com/pulumi/resources/Resource.java +++ b/sdk/java/pulumi/src/main/java/com/pulumi/resources/Resource.java @@ -52,6 +52,7 @@ public abstract class Resource { /** * When set to true, protect ensures this resource cannot be deleted. */ + @Nullable private final boolean protect; private final List transformations; @@ -118,7 +119,7 @@ protected Resource( // this.urn will be set using setter in the subtype constructor after this supertype constructor finishes this.type = ""; this.name = ""; - this.protect = false; + this.protect = null; this.transformations = List.of(); this.providers = Map.of(); this.provider = null; @@ -200,7 +201,9 @@ protected Resource( // the 'childResources' is a Synchronized Collection, so this is safe operation parentResource.childResources.add(this); - options.protect = options.protect || parentResource.protect; // TODO: is this logic good? + if (options.protect == null) { + options.protect = parentResource.protect; + } thisProviders.putAll(options.parent.providers); } diff --git a/sdk/java/pulumi/src/main/java/com/pulumi/resources/ResourceOptions.java b/sdk/java/pulumi/src/main/java/com/pulumi/resources/ResourceOptions.java index f53d7ed6ec6..edff9a513d2 100644 --- a/sdk/java/pulumi/src/main/java/com/pulumi/resources/ResourceOptions.java +++ b/sdk/java/pulumi/src/main/java/com/pulumi/resources/ResourceOptions.java @@ -23,6 +23,7 @@ public abstract class ResourceOptions { protected Resource parent; @Nullable protected Output> dependsOn; + @Nullable protected boolean protect; @Nullable protected List ignoreChanges; @@ -40,6 +41,7 @@ public abstract class ResourceOptions { protected String urn; @Nullable protected List replaceOnChanges; + @Nullable protected boolean retainOnDelete; @Nullable protected String pluginDownloadURL; @@ -54,7 +56,7 @@ protected ResourceOptions( @Nullable Output id, @Nullable Resource parent, @Nullable Output> dependsOn, - boolean protect, + @Nullable boolean protect, @Nullable List ignoreChanges, @Nullable String version, @Nullable ProviderResource provider, @@ -63,7 +65,7 @@ protected ResourceOptions( @Nullable List> aliases, @Nullable String urn, @Nullable List replaceOnChanges, - boolean retainOnDelete, + @Nullable boolean retainOnDelete, @Nullable String pluginDownloadURL, @Nullable List hideDiffs, @Nullable List replaceWith @@ -455,7 +457,7 @@ protected static T mergeSharedOptions(T options1, T options1.id = options2.id == null ? options1.id : options2.id; options1.parent = options2.parent == null ? options1.parent : options2.parent; - options1.protect = options1.protect || options2.protect; + options1.protect = options2.protect == null ? options1.protect : options2.protect; options1.urn = options2.urn == null ? options1.urn : options2.urn; options1.version = options2.version == null ? options1.version : options2.version; options1.provider = options2.provider == null ? options1.provider : options2.provider;