UnitOperation class

A UnitOperation encapsulates the intent to change or interact with a Unit. Operations such as provisioning, upgrading, or deprovisioning a Unit are triggered by creating a UnitOperation resource.

Example Usage

Saas Runtime Unit Operation Basic

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const location = "us-east1";
const tenantProjectId = "tenant";
const exampleSaas = new gcp.saasruntime.SaaS("example_saas", {
    saasId: "example-saas",
    location: location,
    locations: [{
        name: location,
    }],
});
const clusterUnitKind = new gcp.saasruntime.UnitKind("cluster_unit_kind", {
    location: location,
    unitKindId: "vm-unitkind",
    saas: exampleSaas.id,
    defaultRelease: `projects/my-project-name/locations/${location}/releases/example-release`,
});
const exampleRelease = new gcp.saasruntime.Release("example_release", {
    location: location,
    releaseId: "example-release",
    unitKind: clusterUnitKind.id,
    blueprint: {
        "package": "us-central1-docker.pkg.dev/ci-test-project-188019/test-repo/tf-test-easysaas-alpha-image@sha256:7992fdbaeaf998ecd31a7f937bb26e38a781ecf49b24857a6176c1e9bfc299ee",
    },
});
const exampleUnit = new gcp.saasruntime.Unit("example_unit", {
    location: location,
    unitId: "example-unit",
    unitKind: clusterUnitKind.id,
});
const tenantProject = new gcp.organizations.Project("tenant_project", {
    projectId: tenantProjectId,
    name: tenantProjectId,
    billingAccount: "000000-0000000-0000000-000000",
    orgId: "123456789",
    deletionPolicy: "DELETE",
});
const saasServices = new gcp.projects.Service("saas_services", {
    project: tenantProject.projectId,
    service: "compute.googleapis.com",
    disableDependentServices: true,
});
const actuationServiceAccount = new gcp.serviceaccount.Account("actuation_service_account", {
    accountId: "actuator",
    displayName: "SaaS Actuation Service Account",
});
const tenantConfigAdmin = new gcp.projects.IAMMember("tenant_config_admin", {
    project: tenantProject.projectId,
    role: "roles/config.admin",
    member: pulumi.interpolate`serviceAccount:${actuationServiceAccount.email}`,
});
const tenantStorageAdmin = new gcp.projects.IAMMember("tenant_storage_admin", {
    project: tenantProject.projectId,
    role: "roles/storage.admin",
    member: pulumi.interpolate`serviceAccount:${actuationServiceAccount.email}`,
});
const tenantComputeAdmin = new gcp.projects.IAMMember("tenant_compute_admin", {
    project: tenantProject.projectId,
    role: "roles/compute.admin",
    member: pulumi.interpolate`serviceAccount:${actuationServiceAccount.email}`,
});
const actuationTokenCreator = new gcp.serviceaccount.IAMMember("actuation_token_creator", {
    serviceAccountId: actuationServiceAccount.name,
    role: "roles/iam.serviceAccountTokenCreator",
    member: "serviceAccount:service-1111111111111@gcp-sa-saasservicemgmt.iam.gserviceaccount.com",
});
const provisionUnitOperation = new gcp.saasruntime.UnitOperation("provision_unit_operation", {
    location: location,
    unitOperationId: "provision-unit-operation",
    unit: exampleUnit.id,
    waitForCompletion: true,
    provision: {
        release: exampleRelease.id,
        inputVariables: [
            {
                variable: "tenant_project_id",
                value: tenantProject.projectId,
                type: "STRING",
            },
            {
                variable: "tenant_project_number",
                value: tenantProject.number,
                type: "INT",
            },
            {
                variable: "zone",
                value: "us-central1-a",
                type: "STRING",
            },
            {
                variable: "instance_name",
                value: "terraform-test-instance",
                type: "STRING",
            },
            {
                variable: "actuation_sa",
                value: actuationServiceAccount.email,
                type: "STRING",
            },
        ],
    },
    labels: {
        "label-one": "foo",
    },
    annotations: {
        "annotation-one": "bar",
    },
}, {
    dependsOn: [
        tenantConfigAdmin,
        tenantStorageAdmin,
        tenantComputeAdmin,
        actuationTokenCreator,
        saasServices,
    ],
});
const noopUpgradeUnitOperation = new gcp.saasruntime.UnitOperation("noop_upgrade_unit_operation", {
    location: location,
    unitOperationId: "upgrade-unit-operation",
    unit: exampleUnit.id,
    waitForCompletion: true,
    upgrade: {
        release: exampleRelease.id,
        inputVariables: [
            {
                variable: "tenant_project_id",
                value: tenantProject.projectId,
                type: "STRING",
            },
            {
                variable: "tenant_project_number",
                value: tenantProject.number,
                type: "INT",
            },
            {
                variable: "zone",
                value: "us-central1-a",
                type: "STRING",
            },
            {
                variable: "instance_name",
                value: "terraform-test-instance",
                type: "STRING",
            },
            {
                variable: "actuation_sa",
                value: actuationServiceAccount.email,
                type: "STRING",
            },
        ],
    },
}, {
    dependsOn: [provisionUnitOperation],
});
const deprovisionOperation = new gcp.saasruntime.UnitOperation("deprovision_operation", {
    location: location,
    unitOperationId: "deprovision-unit-operation",
    unit: exampleUnit.id,
    waitForCompletion: true,
    deprovision: {},
}, {
    dependsOn: [noopUpgradeUnitOperation],
});
import pulumi
import pulumi_gcp as gcp

location = "us-east1"
tenant_project_id = "tenant"
example_saas = gcp.saasruntime.SaaS("example_saas",
    saas_id="example-saas",
    location=location,
    locations=[{
        "name": location,
    }])
cluster_unit_kind = gcp.saasruntime.UnitKind("cluster_unit_kind",
    location=location,
    unit_kind_id="vm-unitkind",
    saas=example_saas.id,
    default_release=f"projects/my-project-name/locations/{location}/releases/example-release")
example_release = gcp.saasruntime.Release("example_release",
    location=location,
    release_id="example-release",
    unit_kind=cluster_unit_kind.id,
    blueprint={
        "package": "us-central1-docker.pkg.dev/ci-test-project-188019/test-repo/tf-test-easysaas-alpha-image@sha256:7992fdbaeaf998ecd31a7f937bb26e38a781ecf49b24857a6176c1e9bfc299ee",
    })
example_unit = gcp.saasruntime.Unit("example_unit",
    location=location,
    unit_id="example-unit",
    unit_kind=cluster_unit_kind.id)
tenant_project = gcp.organizations.Project("tenant_project",
    project_id=tenant_project_id,
    name=tenant_project_id,
    billing_account="000000-0000000-0000000-000000",
    org_id="123456789",
    deletion_policy="DELETE")
saas_services = gcp.projects.Service("saas_services",
    project=tenant_project.project_id,
    service="compute.googleapis.com",
    disable_dependent_services=True)
actuation_service_account = gcp.serviceaccount.Account("actuation_service_account",
    account_id="actuator",
    display_name="SaaS Actuation Service Account")
tenant_config_admin = gcp.projects.IAMMember("tenant_config_admin",
    project=tenant_project.project_id,
    role="roles/config.admin",
    member=actuation_service_account.email.apply(lambda email: f"serviceAccount:{email}"))
tenant_storage_admin = gcp.projects.IAMMember("tenant_storage_admin",
    project=tenant_project.project_id,
    role="roles/storage.admin",
    member=actuation_service_account.email.apply(lambda email: f"serviceAccount:{email}"))
tenant_compute_admin = gcp.projects.IAMMember("tenant_compute_admin",
    project=tenant_project.project_id,
    role="roles/compute.admin",
    member=actuation_service_account.email.apply(lambda email: f"serviceAccount:{email}"))
actuation_token_creator = gcp.serviceaccount.IAMMember("actuation_token_creator",
    service_account_id=actuation_service_account.name,
    role="roles/iam.serviceAccountTokenCreator",
    member="serviceAccount:service-1111111111111@gcp-sa-saasservicemgmt.iam.gserviceaccount.com")
provision_unit_operation = gcp.saasruntime.UnitOperation("provision_unit_operation",
    location=location,
    unit_operation_id="provision-unit-operation",
    unit=example_unit.id,
    wait_for_completion=True,
    provision={
        "release": example_release.id,
        "input_variables": [
            {
                "variable": "tenant_project_id",
                "value": tenant_project.project_id,
                "type": "STRING",
            },
            {
                "variable": "tenant_project_number",
                "value": tenant_project.number,
                "type": "INT",
            },
            {
                "variable": "zone",
                "value": "us-central1-a",
                "type": "STRING",
            },
            {
                "variable": "instance_name",
                "value": "terraform-test-instance",
                "type": "STRING",
            },
            {
                "variable": "actuation_sa",
                "value": actuation_service_account.email,
                "type": "STRING",
            },
        ],
    },
    labels={
        "label-one": "foo",
    },
    annotations={
        "annotation-one": "bar",
    },
    opts = pulumi.ResourceOptions(depends_on=[
            tenant_config_admin,
            tenant_storage_admin,
            tenant_compute_admin,
            actuation_token_creator,
            saas_services,
        ]))
noop_upgrade_unit_operation = gcp.saasruntime.UnitOperation("noop_upgrade_unit_operation",
    location=location,
    unit_operation_id="upgrade-unit-operation",
    unit=example_unit.id,
    wait_for_completion=True,
    upgrade={
        "release": example_release.id,
        "input_variables": [
            {
                "variable": "tenant_project_id",
                "value": tenant_project.project_id,
                "type": "STRING",
            },
            {
                "variable": "tenant_project_number",
                "value": tenant_project.number,
                "type": "INT",
            },
            {
                "variable": "zone",
                "value": "us-central1-a",
                "type": "STRING",
            },
            {
                "variable": "instance_name",
                "value": "terraform-test-instance",
                "type": "STRING",
            },
            {
                "variable": "actuation_sa",
                "value": actuation_service_account.email,
                "type": "STRING",
            },
        ],
    },
    opts = pulumi.ResourceOptions(depends_on=[provision_unit_operation]))
deprovision_operation = gcp.saasruntime.UnitOperation("deprovision_operation",
    location=location,
    unit_operation_id="deprovision-unit-operation",
    unit=example_unit.id,
    wait_for_completion=True,
    deprovision={},
    opts = pulumi.ResourceOptions(depends_on=[noop_upgrade_unit_operation]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() =>
{
    var location = "us-east1";

    var tenantProjectId = "tenant";

    var exampleSaas = new Gcp.SaaSRuntime.SaaS("example_saas", new()
    {
        SaasId = "example-saas",
        Location = location,
        Locations = new[]
        {
            new Gcp.SaaSRuntime.Inputs.SaaSLocationArgs
            {
                Name = location,
            },
        },
    });

    var clusterUnitKind = new Gcp.SaaSRuntime.UnitKind("cluster_unit_kind", new()
    {
        Location = location,
        UnitKindId = "vm-unitkind",
        Saas = exampleSaas.Id,
        DefaultRelease = $"projects/my-project-name/locations/{location}/releases/example-release",
    });

    var exampleRelease = new Gcp.SaaSRuntime.Release("example_release", new()
    {
        Location = location,
        ReleaseId = "example-release",
        UnitKind = clusterUnitKind.Id,
        Blueprint = new Gcp.SaaSRuntime.Inputs.ReleaseBlueprintArgs
        {
            Package = "us-central1-docker.pkg.dev/ci-test-project-188019/test-repo/tf-test-easysaas-alpha-image@sha256:7992fdbaeaf998ecd31a7f937bb26e38a781ecf49b24857a6176c1e9bfc299ee",
        },
    });

    var exampleUnit = new Gcp.SaaSRuntime.Unit("example_unit", new()
    {
        Location = location,
        UnitId = "example-unit",
        UnitKind = clusterUnitKind.Id,
    });

    var tenantProject = new Gcp.Organizations.Project("tenant_project", new()
    {
        ProjectId = tenantProjectId,
        Name = tenantProjectId,
        BillingAccount = "000000-0000000-0000000-000000",
        OrgId = "123456789",
        DeletionPolicy = "DELETE",
    });

    var saasServices = new Gcp.Projects.Service("saas_services", new()
    {
        Project = tenantProject.ProjectId,
        ServiceName = "compute.googleapis.com",
        DisableDependentServices = true,
    });

    var actuationServiceAccount = new Gcp.ServiceAccount.Account("actuation_service_account", new()
    {
        AccountId = "actuator",
        DisplayName = "SaaS Actuation Service Account",
    });

    var tenantConfigAdmin = new Gcp.Projects.IAMMember("tenant_config_admin", new()
    {
        Project = tenantProject.ProjectId,
        Role = "roles/config.admin",
        Member = actuationServiceAccount.Email.Apply(email => $"serviceAccount:{email}"),
    });

    var tenantStorageAdmin = new Gcp.Projects.IAMMember("tenant_storage_admin", new()
    {
        Project = tenantProject.ProjectId,
        Role = "roles/storage.admin",
        Member = actuationServiceAccount.Email.Apply(email => $"serviceAccount:{email}"),
    });

    var tenantComputeAdmin = new Gcp.Projects.IAMMember("tenant_compute_admin", new()
    {
        Project = tenantProject.ProjectId,
        Role = "roles/compute.admin",
        Member = actuationServiceAccount.Email.Apply(email => $"serviceAccount:{email}"),
    });

    var actuationTokenCreator = new Gcp.ServiceAccount.IAMMember("actuation_token_creator", new()
    {
        ServiceAccountId = actuationServiceAccount.Name,
        Role = "roles/iam.serviceAccountTokenCreator",
        Member = "serviceAccount:service-1111111111111@gcp-sa-saasservicemgmt.iam.gserviceaccount.com",
    });

    var provisionUnitOperation = new Gcp.SaaSRuntime.UnitOperation("provision_unit_operation", new()
    {
        Location = location,
        UnitOperationId = "provision-unit-operation",
        Unit = exampleUnit.Id,
        WaitForCompletion = true,
        Provision = new Gcp.SaaSRuntime.Inputs.UnitOperationProvisionArgs
        {
            Release = exampleRelease.Id,
            InputVariables = new[]
            {
                new Gcp.SaaSRuntime.Inputs.UnitOperationProvisionInputVariableArgs
                {
                    Variable = "tenant_project_id",
                    Value = tenantProject.ProjectId,
                    Type = "STRING",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationProvisionInputVariableArgs
                {
                    Variable = "tenant_project_number",
                    Value = tenantProject.Number,
                    Type = "INT",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationProvisionInputVariableArgs
                {
                    Variable = "zone",
                    Value = "us-central1-a",
                    Type = "STRING",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationProvisionInputVariableArgs
                {
                    Variable = "instance_name",
                    Value = "terraform-test-instance",
                    Type = "STRING",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationProvisionInputVariableArgs
                {
                    Variable = "actuation_sa",
                    Value = actuationServiceAccount.Email,
                    Type = "STRING",
                },
            },
        },
        Labels =
        {
            { "label-one", "foo" },
        },
        Annotations =
        {
            { "annotation-one", "bar" },
        },
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            tenantConfigAdmin,
            tenantStorageAdmin,
            tenantComputeAdmin,
            actuationTokenCreator,
            saasServices,
        },
    });

    var noopUpgradeUnitOperation = new Gcp.SaaSRuntime.UnitOperation("noop_upgrade_unit_operation", new()
    {
        Location = location,
        UnitOperationId = "upgrade-unit-operation",
        Unit = exampleUnit.Id,
        WaitForCompletion = true,
        Upgrade = new Gcp.SaaSRuntime.Inputs.UnitOperationUpgradeArgs
        {
            Release = exampleRelease.Id,
            InputVariables = new[]
            {
                new Gcp.SaaSRuntime.Inputs.UnitOperationUpgradeInputVariableArgs
                {
                    Variable = "tenant_project_id",
                    Value = tenantProject.ProjectId,
                    Type = "STRING",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationUpgradeInputVariableArgs
                {
                    Variable = "tenant_project_number",
                    Value = tenantProject.Number,
                    Type = "INT",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationUpgradeInputVariableArgs
                {
                    Variable = "zone",
                    Value = "us-central1-a",
                    Type = "STRING",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationUpgradeInputVariableArgs
                {
                    Variable = "instance_name",
                    Value = "terraform-test-instance",
                    Type = "STRING",
                },
                new Gcp.SaaSRuntime.Inputs.UnitOperationUpgradeInputVariableArgs
                {
                    Variable = "actuation_sa",
                    Value = actuationServiceAccount.Email,
                    Type = "STRING",
                },
            },
        },
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            provisionUnitOperation,
        },
    });

    var deprovisionOperation = new Gcp.SaaSRuntime.UnitOperation("deprovision_operation", new()
    {
        Location = location,
        UnitOperationId = "deprovision-unit-operation",
        Unit = exampleUnit.Id,
        WaitForCompletion = true,
        Deprovision = new() { },
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            noopUpgradeUnitOperation,
        },
    });

});
package main

import (
	"fmt"

	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/organizations"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/projects"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/saasruntime"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/serviceaccount"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		location := "us-east1"
		tenantProjectId := "tenant"
		exampleSaas, err := saasruntime.NewSaaS(ctx, "example_saas", &saasruntime.SaaSArgs{
			SaasId:   pulumi.String("example-saas"),
			Location: pulumi.String(location),
			Locations: saasruntime.SaaSLocationArray{
				&saasruntime.SaaSLocationArgs{
					Name: pulumi.String(location),
				},
			},
		})
		if err != nil {
			return err
		}
		clusterUnitKind, err := saasruntime.NewUnitKind(ctx, "cluster_unit_kind", &saasruntime.UnitKindArgs{
			Location:       pulumi.String(location),
			UnitKindId:     pulumi.String("vm-unitkind"),
			Saas:           exampleSaas.ID().ToIDOutput().ToStringOutput(),
			DefaultRelease: pulumi.Sprintf("projects/my-project-name/locations/%v/releases/example-release", location),
		})
		if err != nil {
			return err
		}
		exampleRelease, err := saasruntime.NewRelease(ctx, "example_release", &saasruntime.ReleaseArgs{
			Location:  pulumi.String(location),
			ReleaseId: pulumi.String("example-release"),
			UnitKind:  clusterUnitKind.ID().ToIDOutput().ToStringOutput(),
			Blueprint: &saasruntime.ReleaseBlueprintArgs{
				Package: pulumi.String("us-central1-docker.pkg.dev/ci-test-project-188019/test-repo/tf-test-easysaas-alpha-image@sha256:7992fdbaeaf998ecd31a7f937bb26e38a781ecf49b24857a6176c1e9bfc299ee"),
			},
		})
		if err != nil {
			return err
		}
		exampleUnit, err := saasruntime.NewUnit(ctx, "example_unit", &saasruntime.UnitArgs{
			Location: pulumi.String(location),
			UnitId:   pulumi.String("example-unit"),
			UnitKind: clusterUnitKind.ID().ToIDOutput().ToStringOutput(),
		})
		if err != nil {
			return err
		}
		tenantProject, err := organizations.NewProject(ctx, "tenant_project", &organizations.ProjectArgs{
			ProjectId:      pulumi.String(tenantProjectId),
			Name:           pulumi.String(tenantProjectId),
			BillingAccount: pulumi.String("000000-0000000-0000000-000000"),
			OrgId:          pulumi.String("123456789"),
			DeletionPolicy: pulumi.String("DELETE"),
		})
		if err != nil {
			return err
		}
		saasServices, err := projects.NewService(ctx, "saas_services", &projects.ServiceArgs{
			Project:                  tenantProject.ProjectId,
			Service:                  pulumi.String("compute.googleapis.com"),
			DisableDependentServices: pulumi.Bool(true),
		})
		if err != nil {
			return err
		}
		actuationServiceAccount, err := serviceaccount.NewAccount(ctx, "actuation_service_account", &serviceaccount.AccountArgs{
			AccountId:   pulumi.String("actuator"),
			DisplayName: pulumi.String("SaaS Actuation Service Account"),
		})
		if err != nil {
			return err
		}
		tenantConfigAdmin, err := projects.NewIAMMember(ctx, "tenant_config_admin", &projects.IAMMemberArgs{
			Project: tenantProject.ProjectId,
			Role:    pulumi.String("roles/config.admin"),
			Member: actuationServiceAccount.Email.ApplyT(func(email string) (string, error) {
				return fmt.Sprintf("serviceAccount:%v", email), nil
			}).(pulumi.StringOutput),
		})
		if err != nil {
			return err
		}
		tenantStorageAdmin, err := projects.NewIAMMember(ctx, "tenant_storage_admin", &projects.IAMMemberArgs{
			Project: tenantProject.ProjectId,
			Role:    pulumi.String("roles/storage.admin"),
			Member: actuationServiceAccount.Email.ApplyT(func(email string) (string, error) {
				return fmt.Sprintf("serviceAccount:%v", email), nil
			}).(pulumi.StringOutput),
		})
		if err != nil {
			return err
		}
		tenantComputeAdmin, err := projects.NewIAMMember(ctx, "tenant_compute_admin", &projects.IAMMemberArgs{
			Project: tenantProject.ProjectId,
			Role:    pulumi.String("roles/compute.admin"),
			Member: actuationServiceAccount.Email.ApplyT(func(email string) (string, error) {
				return fmt.Sprintf("serviceAccount:%v", email), nil
			}).(pulumi.StringOutput),
		})
		if err != nil {
			return err
		}
		actuationTokenCreator, err := serviceaccount.NewIAMMember(ctx, "actuation_token_creator", &serviceaccount.IAMMemberArgs{
			ServiceAccountId: actuationServiceAccount.Name,
			Role:             pulumi.String("roles/iam.serviceAccountTokenCreator"),
			Member:           pulumi.String("serviceAccount:service-1111111111111@gcp-sa-saasservicemgmt.iam.gserviceaccount.com"),
		})
		if err != nil {
			return err
		}
		provisionUnitOperation, err := saasruntime.NewUnitOperation(ctx, "provision_unit_operation", &saasruntime.UnitOperationArgs{
			Location:          pulumi.String(location),
			UnitOperationId:   pulumi.String("provision-unit-operation"),
			Unit:              exampleUnit.ID().ToIDOutput().ToStringOutput(),
			WaitForCompletion: pulumi.Bool(true),
			Provision: &saasruntime.UnitOperationProvisionArgs{
				Release: exampleRelease.ID().ToIDOutput().ToStringOutput(),
				InputVariables: saasruntime.UnitOperationProvisionInputVariableArray{
					&saasruntime.UnitOperationProvisionInputVariableArgs{
						Variable: pulumi.String("tenant_project_id"),
						Value:    tenantProject.ProjectId,
						Type:     pulumi.String("STRING"),
					},
					&saasruntime.UnitOperationProvisionInputVariableArgs{
						Variable: pulumi.String("tenant_project_number"),
						Value:    tenantProject.Number,
						Type:     pulumi.String("INT"),
					},
					&saasruntime.UnitOperationProvisionInputVariableArgs{
						Variable: pulumi.String("zone"),
						Value:    pulumi.String("us-central1-a"),
						Type:     pulumi.String("STRING"),
					},
					&saasruntime.UnitOperationProvisionInputVariableArgs{
						Variable: pulumi.String("instance_name"),
						Value:    pulumi.String("terraform-test-instance"),
						Type:     pulumi.String("STRING"),
					},
					&saasruntime.UnitOperationProvisionInputVariableArgs{
						Variable: pulumi.String("actuation_sa"),
						Value:    actuationServiceAccount.Email,
						Type:     pulumi.String("STRING"),
					},
				},
			},
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("foo"),
			},
			Annotations: pulumi.StringMap{
				"annotation-one": pulumi.String("bar"),
			},
		}, pulumi.DependsOn([]pulumi.Resource{
			tenantConfigAdmin,
			tenantStorageAdmin,
			tenantComputeAdmin,
			actuationTokenCreator,
			saasServices,
		}))
		if err != nil {
			return err
		}
		noopUpgradeUnitOperation, err := saasruntime.NewUnitOperation(ctx, "noop_upgrade_unit_operation", &saasruntime.UnitOperationArgs{
			Location:          pulumi.String(location),
			UnitOperationId:   pulumi.String("upgrade-unit-operation"),
			Unit:              exampleUnit.ID().ToIDOutput().ToStringOutput(),
			WaitForCompletion: pulumi.Bool(true),
			Upgrade: &saasruntime.UnitOperationUpgradeArgs{
				Release: exampleRelease.ID().ToIDOutput().ToStringOutput(),
				InputVariables: saasruntime.UnitOperationUpgradeInputVariableArray{
					&saasruntime.UnitOperationUpgradeInputVariableArgs{
						Variable: pulumi.String("tenant_project_id"),
						Value:    tenantProject.ProjectId,
						Type:     pulumi.String("STRING"),
					},
					&saasruntime.UnitOperationUpgradeInputVariableArgs{
						Variable: pulumi.String("tenant_project_number"),
						Value:    tenantProject.Number,
						Type:     pulumi.String("INT"),
					},
					&saasruntime.UnitOperationUpgradeInputVariableArgs{
						Variable: pulumi.String("zone"),
						Value:    pulumi.String("us-central1-a"),
						Type:     pulumi.String("STRING"),
					},
					&saasruntime.UnitOperationUpgradeInputVariableArgs{
						Variable: pulumi.String("instance_name"),
						Value:    pulumi.String("terraform-test-instance"),
						Type:     pulumi.String("STRING"),
					},
					&saasruntime.UnitOperationUpgradeInputVariableArgs{
						Variable: pulumi.String("actuation_sa"),
						Value:    actuationServiceAccount.Email,
						Type:     pulumi.String("STRING"),
					},
				},
			},
		}, pulumi.DependsOn([]pulumi.Resource{
			provisionUnitOperation,
		}))
		if err != nil {
			return err
		}
		_, err = saasruntime.NewUnitOperation(ctx, "deprovision_operation", &saasruntime.UnitOperationArgs{
			Location:          pulumi.String(location),
			UnitOperationId:   pulumi.String("deprovision-unit-operation"),
			Unit:              exampleUnit.ID().ToIDOutput().ToStringOutput(),
			WaitForCompletion: pulumi.Bool(true),
			Deprovision:       &saasruntime.UnitOperationDeprovisionArgs{},
		}, pulumi.DependsOn([]pulumi.Resource{
			noopUpgradeUnitOperation,
		}))
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
  }
}

resource "gcp_saasruntime_saas" "example_saas" {
  saas_id  = "example-saas"
  location = local.location
  locations {
    name = local.location
  }
}
resource "gcp_saasruntime_unitkind" "cluster_unit_kind" {
  location        = local.location
  unit_kind_id    = "vm-unitkind"
  saas            = gcp_saasruntime_saas.example_saas.id
  default_release ="projects/my-project-name/locations/${local.location}/releases/example-release"
}
resource "gcp_saasruntime_release" "example_release" {
  location   = local.location
  release_id = "example-release"
  unit_kind  = gcp_saasruntime_unitkind.cluster_unit_kind.id
  blueprint = {
    package = "us-central1-docker.pkg.dev/ci-test-project-188019/test-repo/tf-test-easysaas-alpha-image@sha256:7992fdbaeaf998ecd31a7f937bb26e38a781ecf49b24857a6176c1e9bfc299ee"
  }
}
resource "gcp_saasruntime_unit" "example_unit" {
  location  = local.location
  unit_id   = "example-unit"
  unit_kind = gcp_saasruntime_unitkind.cluster_unit_kind.id
}
resource "gcp_organizations_project" "tenant_project" {
  project_id      = local.tenantProjectId
  name            = local.tenantProjectId
  billing_account = "000000-0000000-0000000-000000"
  org_id          = "123456789"
  deletion_policy = "DELETE"
}
resource "gcp_projects_service" "saas_services" {
  project                    = gcp_organizations_project.tenant_project.project_id
  service                    = "compute.googleapis.com"
  disable_dependent_services = true
}
resource "gcp_serviceaccount_account" "actuation_service_account" {
  account_id   = "actuator"
  display_name = "SaaS Actuation Service Account"
}
resource "gcp_projects_iammember" "tenant_config_admin" {
  project = gcp_organizations_project.tenant_project.project_id
  role    = "roles/config.admin"
  member  ="serviceAccount:${gcp_serviceaccount_account.actuation_service_account.email}"
}
resource "gcp_projects_iammember" "tenant_storage_admin" {
  project = gcp_organizations_project.tenant_project.project_id
  role    = "roles/storage.admin"
  member  ="serviceAccount:${gcp_serviceaccount_account.actuation_service_account.email}"
}
resource "gcp_projects_iammember" "tenant_compute_admin" {
  project = gcp_organizations_project.tenant_project.project_id
  role    = "roles/compute.admin"
  member  ="serviceAccount:${gcp_serviceaccount_account.actuation_service_account.email}"
}
resource "gcp_serviceaccount_iammember" "actuation_token_creator" {
  service_account_id = gcp_serviceaccount_account.actuation_service_account.name
  role               = "roles/iam.serviceAccountTokenCreator"
  member             = "serviceAccount:service-1111111111111@gcp-sa-saasservicemgmt.iam.gserviceaccount.com"
}
resource "gcp_saasruntime_unitoperation" "provision_unit_operation" {
  depends_on          = [gcp_projects_iammember.tenant_config_admin, gcp_projects_iammember.tenant_storage_admin, gcp_projects_iammember.tenant_compute_admin, gcp_serviceaccount_iammember.actuation_token_creator, gcp_projects_service.saas_services]
  location            = local.location
  unit_operation_id   = "provision-unit-operation"
  unit                = gcp_saasruntime_unit.example_unit.id
  wait_for_completion = true
  provision = {
    release = gcp_saasruntime_release.example_release.id
    input_variables = [{
      "variable" = "tenant_project_id"
      "value"    = gcp_organizations_project.tenant_project.project_id
      "type"     = "STRING"
      }, {
      "variable" = "tenant_project_number"
      "value"    = gcp_organizations_project.tenant_project.number
      "type"     = "INT"
      }, {
      "variable" = "zone"
      "value"    = "us-central1-a"
      "type"     = "STRING"
      }, {
      "variable" = "instance_name"
      "value"    = "terraform-test-instance"
      "type"     = "STRING"
      }, {
      "variable" = "actuation_sa"
      "value"    = gcp_serviceaccount_account.actuation_service_account.email
      "type"     = "STRING"
    }]
  }
  labels = {
    "label-one" = "foo"
  }
  annotations = {
    "annotation-one" = "bar"
  }
}
resource "gcp_saasruntime_unitoperation" "noop_upgrade_unit_operation" {
  depends_on          = [gcp_saasruntime_unitoperation.provision_unit_operation]
  location            = local.location
  unit_operation_id   = "upgrade-unit-operation"
  unit                = gcp_saasruntime_unit.example_unit.id
  wait_for_completion = true
  upgrade = {
    release = gcp_saasruntime_release.example_release.id
    input_variables = [{
      "variable" = "tenant_project_id"
      "value"    = gcp_organizations_project.tenant_project.project_id
      "type"     = "STRING"
      }, {
      "variable" = "tenant_project_number"
      "value"    = gcp_organizations_project.tenant_project.number
      "type"     = "INT"
      }, {
      "variable" = "zone"
      "value"    = "us-central1-a"
      "type"     = "STRING"
      }, {
      "variable" = "instance_name"
      "value"    = "terraform-test-instance"
      "type"     = "STRING"
      }, {
      "variable" = "actuation_sa"
      "value"    = gcp_serviceaccount_account.actuation_service_account.email
      "type"     = "STRING"
    }]
  }
}
resource "gcp_saasruntime_unitoperation" "deprovision_operation" {
  depends_on          = [gcp_saasruntime_unitoperation.noop_upgrade_unit_operation]
  location            = local.location
  unit_operation_id   = "deprovision-unit-operation"
  unit                = gcp_saasruntime_unit.example_unit.id
  wait_for_completion = true
  deprovision         = {}
}
locals {
  location = "us-east1"
}
locals {
  tenantProjectId = "tenant"
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.saasruntime.SaaS;
import com.pulumi.gcp.saasruntime.SaaSArgs;
import com.pulumi.gcp.saasruntime.inputs.SaaSLocationArgs;
import com.pulumi.gcp.saasruntime.UnitKind;
import com.pulumi.gcp.saasruntime.UnitKindArgs;
import com.pulumi.gcp.saasruntime.Release;
import com.pulumi.gcp.saasruntime.ReleaseArgs;
import com.pulumi.gcp.saasruntime.inputs.ReleaseBlueprintArgs;
import com.pulumi.gcp.saasruntime.Unit;
import com.pulumi.gcp.saasruntime.UnitArgs;
import com.pulumi.gcp.organizations.Project;
import com.pulumi.gcp.organizations.ProjectArgs;
import com.pulumi.gcp.projects.Service;
import com.pulumi.gcp.projects.ServiceArgs;
import com.pulumi.gcp.serviceaccount.Account;
import com.pulumi.gcp.serviceaccount.AccountArgs;
import com.pulumi.gcp.saasruntime.UnitOperation;
import com.pulumi.gcp.saasruntime.UnitOperationArgs;
import com.pulumi.gcp.saasruntime.inputs.UnitOperationProvisionArgs;
import com.pulumi.gcp.saasruntime.inputs.UnitOperationProvisionInputVariableArgs;
import com.pulumi.gcp.saasruntime.inputs.UnitOperationUpgradeArgs;
import com.pulumi.gcp.saasruntime.inputs.UnitOperationUpgradeInputVariableArgs;
import com.pulumi.gcp.saasruntime.inputs.UnitOperationDeprovisionArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        final var location = "us-east1";

        final var tenantProjectId = "tenant";

        var exampleSaas = new SaaS("exampleSaas", SaaSArgs.builder()
            .saasId("example-saas")
            .location(location)
            .locations(SaaSLocationArgs.builder()
                .name(location)
                .build())
            .build());

        var clusterUnitKind = new UnitKind("clusterUnitKind", UnitKindArgs.builder()
            .location(location)
            .unitKindId("vm-unitkind")
            .saas(exampleSaas.id())
            .defaultRelease(String.format("projects/my-project-name/locations/%s/releases/example-release", location))
            .build());

        var exampleRelease = new Release("exampleRelease", ReleaseArgs.builder()
            .location(location)
            .releaseId("example-release")
            .unitKind(clusterUnitKind.id())
            .blueprint(ReleaseBlueprintArgs.builder()
                .package_("us-central1-docker.pkg.dev/ci-test-project-188019/test-repo/tf-test-easysaas-alpha-image@sha256:7992fdbaeaf998ecd31a7f937bb26e38a781ecf49b24857a6176c1e9bfc299ee")
                .build())
            .build());

        var exampleUnit = new Unit("exampleUnit", UnitArgs.builder()
            .location(location)
            .unitId("example-unit")
            .unitKind(clusterUnitKind.id())
            .build());

        var tenantProject = new Project("tenantProject", ProjectArgs.builder()
            .projectId(tenantProjectId)
            .name(tenantProjectId)
            .billingAccount("000000-0000000-0000000-000000")
            .orgId("123456789")
            .deletionPolicy("DELETE")
            .build());

        var saasServices = new Service("saasServices", ServiceArgs.builder()
            .project(tenantProject.projectId())
            .service("compute.googleapis.com")
            .disableDependentServices(true)
            .build());

        var actuationServiceAccount = new Account("actuationServiceAccount", AccountArgs.builder()
            .accountId("actuator")
            .displayName("SaaS Actuation Service Account")
            .build());

        var tenantConfigAdmin = new com.pulumi.gcp.projects.IAMMember("tenantConfigAdmin", com.pulumi.gcp.projects.IAMMemberArgs.builder()
            .project(tenantProject.projectId())
            .role("roles/config.admin")
            .member(actuationServiceAccount.email().applyValue(_email -> String.format("serviceAccount:%s", _email)))
            .build());

        var tenantStorageAdmin = new com.pulumi.gcp.projects.IAMMember("tenantStorageAdmin", com.pulumi.gcp.projects.IAMMemberArgs.builder()
            .project(tenantProject.projectId())
            .role("roles/storage.admin")
            .member(actuationServiceAccount.email().applyValue(_email -> String.format("serviceAccount:%s", _email)))
            .build());

        var tenantComputeAdmin = new com.pulumi.gcp.projects.IAMMember("tenantComputeAdmin", com.pulumi.gcp.projects.IAMMemberArgs.builder()
            .project(tenantProject.projectId())
            .role("roles/compute.admin")
            .member(actuationServiceAccount.email().applyValue(_email -> String.format("serviceAccount:%s", _email)))
            .build());

        var actuationTokenCreator = new com.pulumi.gcp.serviceaccount.IAMMember("actuationTokenCreator", com.pulumi.gcp.serviceaccount.IAMMemberArgs.builder()
            .serviceAccountId(actuationServiceAccount.name())
            .role("roles/iam.serviceAccountTokenCreator")
            .member("serviceAccount:service-1111111111111@gcp-sa-saasservicemgmt.iam.gserviceaccount.com")
            .build());

        var provisionUnitOperation = new UnitOperation("provisionUnitOperation", UnitOperationArgs.builder()
            .location(location)
            .unitOperationId("provision-unit-operation")
            .unit(exampleUnit.id())
            .waitForCompletion(true)
            .provision(UnitOperationProvisionArgs.builder()
                .release(exampleRelease.id())
                .inputVariables(
                    UnitOperationProvisionInputVariableArgs.builder()
                        .variable("tenant_project_id")
                        .value(tenantProject.projectId())
                        .type("STRING")
                        .build(),
                    UnitOperationProvisionInputVariableArgs.builder()
                        .variable("tenant_project_number")
                        .value(tenantProject.number())
                        .type("INT")
                        .build(),
                    UnitOperationProvisionInputVariableArgs.builder()
                        .variable("zone")
                        .value("us-central1-a")
                        .type("STRING")
                        .build(),
                    UnitOperationProvisionInputVariableArgs.builder()
                        .variable("instance_name")
                        .value("terraform-test-instance")
                        .type("STRING")
                        .build(),
                    UnitOperationProvisionInputVariableArgs.builder()
                        .variable("actuation_sa")
                        .value(actuationServiceAccount.email())
                        .type("STRING")
                        .build())
                .build())
            .labels(Map.of("label-one", "foo"))
            .annotations(Map.of("annotation-one", "bar"))
            .build(), CustomResourceOptions.builder()
                .dependsOn(
                    tenantConfigAdmin,
                    tenantStorageAdmin,
                    tenantComputeAdmin,
                    actuationTokenCreator,
                    saasServices)
                .build());

        var noopUpgradeUnitOperation = new UnitOperation("noopUpgradeUnitOperation", UnitOperationArgs.builder()
            .location(location)
            .unitOperationId("upgrade-unit-operation")
            .unit(exampleUnit.id())
            .waitForCompletion(true)
            .upgrade(UnitOperationUpgradeArgs.builder()
                .release(exampleRelease.id())
                .inputVariables(
                    UnitOperationUpgradeInputVariableArgs.builder()
                        .variable("tenant_project_id")
                        .value(tenantProject.projectId())
                        .type("STRING")
                        .build(),
                    UnitOperationUpgradeInputVariableArgs.builder()
                        .variable("tenant_project_number")
                        .value(tenantProject.number())
                        .type("INT")
                        .build(),
                    UnitOperationUpgradeInputVariableArgs.builder()
                        .variable("zone")
                        .value("us-central1-a")
                        .type("STRING")
                        .build(),
                    UnitOperationUpgradeInputVariableArgs.builder()
                        .variable("instance_name")
                        .value("terraform-test-instance")
                        .type("STRING")
                        .build(),
                    UnitOperationUpgradeInputVariableArgs.builder()
                        .variable("actuation_sa")
                        .value(actuationServiceAccount.email())
                        .type("STRING")
                        .build())
                .build())
            .build(), CustomResourceOptions.builder()
                .dependsOn(provisionUnitOperation)
                .build());

        var deprovisionOperation = new UnitOperation("deprovisionOperation", UnitOperationArgs.builder()
            .location(location)
            .unitOperationId("deprovision-unit-operation")
            .unit(exampleUnit.id())
            .waitForCompletion(true)
            .deprovision(UnitOperationDeprovisionArgs.builder()
                .build())
            .build(), CustomResourceOptions.builder()
                .dependsOn(noopUpgradeUnitOperation)
                .build());

    }
}
resources:
  exampleSaas:
    type: gcp:saasruntime:SaaS
    name: example_saas
    properties:
      saasId: example-saas
      location: ${location}
      locations:
        - name: ${location}
  clusterUnitKind:
    type: gcp:saasruntime:UnitKind
    name: cluster_unit_kind
    properties:
      location: ${location}
      unitKindId: vm-unitkind
      saas: ${exampleSaas.id}
      defaultRelease: projects/my-project-name/locations/${location}/releases/example-release
  exampleRelease:
    type: gcp:saasruntime:Release
    name: example_release
    properties:
      location: ${location}
      releaseId: example-release
      unitKind: ${clusterUnitKind.id}
      blueprint:
        package: us-central1-docker.pkg.dev/ci-test-project-188019/test-repo/tf-test-easysaas-alpha-image@sha256:7992fdbaeaf998ecd31a7f937bb26e38a781ecf49b24857a6176c1e9bfc299ee
  exampleUnit:
    type: gcp:saasruntime:Unit
    name: example_unit
    properties:
      location: ${location}
      unitId: example-unit
      unitKind: ${clusterUnitKind.id}
  tenantProject:
    type: gcp:organizations:Project
    name: tenant_project
    properties:
      projectId: ${tenantProjectId}
      name: ${tenantProjectId}
      billingAccount: 000000-0000000-0000000-000000
      orgId: '123456789'
      deletionPolicy: DELETE
  saasServices:
    type: gcp:projects:Service
    name: saas_services
    properties:
      project: ${tenantProject.projectId}
      service: compute.googleapis.com
      disableDependentServices: true
  actuationServiceAccount:
    type: gcp:serviceaccount:Account
    name: actuation_service_account
    properties:
      accountId: actuator
      displayName: SaaS Actuation Service Account
  tenantConfigAdmin:
    type: gcp:projects:IAMMember
    name: tenant_config_admin
    properties:
      project: ${tenantProject.projectId}
      role: roles/config.admin
      member: serviceAccount:${actuationServiceAccount.email}
  tenantStorageAdmin:
    type: gcp:projects:IAMMember
    name: tenant_storage_admin
    properties:
      project: ${tenantProject.projectId}
      role: roles/storage.admin
      member: serviceAccount:${actuationServiceAccount.email}
  tenantComputeAdmin:
    type: gcp:projects:IAMMember
    name: tenant_compute_admin
    properties:
      project: ${tenantProject.projectId}
      role: roles/compute.admin
      member: serviceAccount:${actuationServiceAccount.email}
  actuationTokenCreator:
    type: gcp:serviceaccount:IAMMember
    name: actuation_token_creator
    properties:
      serviceAccountId: ${actuationServiceAccount.name}
      role: roles/iam.serviceAccountTokenCreator
      member: serviceAccount:service-1111111111111@gcp-sa-saasservicemgmt.iam.gserviceaccount.com
  provisionUnitOperation:
    type: gcp:saasruntime:UnitOperation
    name: provision_unit_operation
    properties:
      location: ${location}
      unitOperationId: provision-unit-operation
      unit: ${exampleUnit.id}
      waitForCompletion: true
      provision:
        release: ${exampleRelease.id}
        inputVariables:
          - variable: tenant_project_id
            value: ${tenantProject.projectId}
            type: STRING
          - variable: tenant_project_number
            value: ${tenantProject.number}
            type: INT
          - variable: zone
            value: us-central1-a
            type: STRING
          - variable: instance_name
            value: terraform-test-instance
            type: STRING
          - variable: actuation_sa
            value: ${actuationServiceAccount.email}
            type: STRING
      labels:
        label-one: foo
      annotations:
        annotation-one: bar
    options:
      dependsOn:
        - ${tenantConfigAdmin}
        - ${tenantStorageAdmin}
        - ${tenantComputeAdmin}
        - ${actuationTokenCreator}
        - ${saasServices}
  noopUpgradeUnitOperation:
    type: gcp:saasruntime:UnitOperation
    name: noop_upgrade_unit_operation
    properties:
      location: ${location}
      unitOperationId: upgrade-unit-operation
      unit: ${exampleUnit.id}
      waitForCompletion: true
      upgrade:
        release: ${exampleRelease.id}
        inputVariables:
          - variable: tenant_project_id
            value: ${tenantProject.projectId}
            type: STRING
          - variable: tenant_project_number
            value: ${tenantProject.number}
            type: INT
          - variable: zone
            value: us-central1-a
            type: STRING
          - variable: instance_name
            value: terraform-test-instance
            type: STRING
          - variable: actuation_sa
            value: ${actuationServiceAccount.email}
            type: STRING
    options:
      dependsOn:
        - ${provisionUnitOperation}
  deprovisionOperation:
    type: gcp:saasruntime:UnitOperation
    name: deprovision_operation
    properties:
      location: ${location}
      unitOperationId: deprovision-unit-operation
      unit: ${exampleUnit.id}
      waitForCompletion: true
      deprovision: {}
    options:
      dependsOn:
        - ${noopUpgradeUnitOperation}
variables:
  location: us-east1
  tenantProjectId: tenant

Import

UnitOperation can be imported using any of these accepted formats:

  • projects/{{project}}/locations/{{location}}/unitOperations/{{unit_operation_id}}
  • {{project}}/{{location}}/{{unit_operation_id}}
  • {{location}}/{{unit_operation_id}}

When using the pulumi import command, UnitOperation can be imported using one of the formats above. For example:

$ pulumi import gcp:saasruntime/unitOperation:UnitOperation default projects/{{project}}/locations/{{location}}/unitOperations/{{unit_operation_id}}
$ pulumi import gcp:saasruntime/unitOperation:UnitOperation default {{project}}/{{location}}/{{unit_operation_id}}
$ pulumi import gcp:saasruntime/unitOperation:UnitOperation default {{location}}/{{unit_operation_id}}

Constructors

UnitOperation(String name, {UnitOperationArgs? args, CustomResourceOptions? options})
Creates a new UnitOperation. name The Pulumi resource name. args Arguments used to configure this UnitOperation. The set of arguments for UnitOperation. options Resource options controlling this resource's behavior.
UnitOperation.reference(String urn)
Creates a typed reference to an existing UnitOperation resource.

Properties

annotations ↔ Output<Map<String, String>?>
Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations Note: This field is non-authoritative, and will only manage the annotations present in your configuration. Please refer to the field effectiveAnnotations for all of the annotations present on the resource.
latefinal
childResources → Set<Resource>
finalinherited
completionSources ↔ Map<String, IOutputCompletionSource>
latefinalinherited
conditions ↔ Output<List<UnitOperationCondition>>
A set of conditions which indicate the various conditions this resource can have. Structure is documented below.
latefinal
createTime ↔ Output<String>
The timestamp when the resource was created.
latefinal
deletionPolicy ↔ Output<String>
Whether Terraform will be prevented from destroying the resource. Defaults to DELETE. When a 'terraform destroy' or 'pulumi up' would delete the resource, the command will fail if this field is set to "PREVENT" in Terraform state. When set to "ABANDON", the command will remove the resource from Terraform management without updating or deleting the resource in the API. When set to "DELETE", deleting the resource is allowed.
latefinal
deprovision ↔ Output<Map<String, dynamic>?>
Deprovision is the unit operation that deprovision the underlying resources represented by a Unit. Can only execute if the Unit is currently provisioned.
latefinal
effectiveAnnotations ↔ Output<Map<String, String>>
All of annotations (key/value pairs) present on the resource in GCP, including the annotations configured through Terraform, other clients and services.
latefinal
effectiveLabels ↔ Output<Map<String, String>>
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
latefinal
engineState ↔ Output<String>
The engine state for on-going deployment engine operation(s). This field is opaque for external usage.
latefinal
errorCategory ↔ Output<String>
Possible values: NOT_APPLICABLE FATAL RETRIABLE IGNORABLE STANDARD
latefinal
etag ↔ Output<String>
An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.
latefinal
hashCode → int
The hash code for this object.
no setterinherited
id ↔ Output<String>
getter/setter pairinherited
isCustom → bool
Returns whether this resource is provider-managed.
no setterinherited
isProtected → bool
Returns whether this resource is protected from deletion.
no setterinherited
isRemote → bool
Whether this resource is registered as remote.
no setterinherited
isResourceReference → bool
Whether this instance represents a resource value returned over RPC.
finalinherited
labels ↔ Output<Map<String, String>?>
The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effectiveLabels for all of the labels present on the resource.
latefinal
location ↔ Output<String>
Resource ID segment making up resource name. It identifies the resource within its parent collection as described in https://google.aip.dev/122.
latefinal
name ↔ Output<String>
Identifier. The resource name (full URI of the resource) following the standard naming scheme: "projects/{project}/locations/{location}/unitOperations/{unitOperation}"
latefinal
project ↔ Output<String>
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
latefinal
provision ↔ Output<UnitOperationProvision?>
Provision is the unit operation that provision the underlying resources represented by a Unit. Can only execute if the Unit is not currently provisioned. Structure is documented below.
latefinal
pulumiLabels ↔ Output<Map<String, String>>
The combination of labels configured directly on the resource and default labels configured on the provider.
latefinal
resourceTransforms → List<ResourceTransform>
Inherited/explicit async transforms.
no setterinherited
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
state ↔ Output<String>
UnitOperationState describes the current state of the unit operation. Possible values: UNIT_OPERATION_STATE_UNKNOWN UNIT_OPERATION_STATE_PENDING UNIT_OPERATION_STATE_SCHEDULED UNIT_OPERATION_STATE_RUNNING UNIT_OPERATION_STATE_SUCCEEDED UNIT_OPERATION_STATE_FAILED UNIT_OPERATION_STATE_CANCELLED
latefinal
transformations → List<ResourceTransformation>
Inherited/explicit legacy transformations.
no setterinherited
uid ↔ Output<String>
The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.
latefinal
unit ↔ Output<String>
The Unit a given UnitOperation will act upon.
latefinal
unitOperationId ↔ Output<String>
The ID value for the new unit operation.
latefinal
updateTime ↔ Output<String>
The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.
latefinal
upgrade ↔ Output<UnitOperationUpgrade?>
Upgrade is the unit operation that upgrades a provisioned unit, which may also include the underlying resources represented by a Unit. Can only execute if the Unit is currently provisioned. Structure is documented below.
latefinal
urn ↔ Output<String>
latefinalinherited
waitForCompletion ↔ Output<bool?>
If true, wait for the UnitOperation to reach a terminal state (SUCCEEDED, FAILED, CANCELLED) before completing the apply.
latefinal

Methods

failId(Object error) → void
Completes this resource ID with an error when registration fails.
inherited
failOutputs(Object error) → void
Completes all output properties with error.
inherited
failUrn(Object error) → void
Completes this resource URN with an error when registration fails.
inherited
getProvider(String moduleMember) → ProviderResource?
Returns provider for moduleMember's package, if configured.
inherited
getResourceName() → String
Returns this resource's logical name.
inherited
getResourceType() → String
Returns this resource's Pulumi type token.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
registerOutput<T>(String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output<T>
Registers a dynamic output property for this resource.
inherited
resolveId(String? value, {required bool isKnown}) → void
Resolves the provider-assigned ID for this resource.
inherited
resolveOutputs(Struct outputs) → void
Resolves all output properties from a monitor response payload.
inherited
resolveUrn(String value) → void
Resolves this resource's URN once assigned by the engine.
inherited
serializeProperties(Map<String, dynamic> properties) → Future<Struct>
Serializes resource properties for RPC transmission.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Static Methods

get(String name, Input<String> id, {UnitOperationState? state, CustomResourceOptions? options}) → UnitOperation
Gets an existing UnitOperation resource's state with the given name and id.