gcp.apphub.Workload
Explore with Pulumi AI
Workload represents a binary deployment (such as Managed Instance Groups (MIGs), GKE deployments, etc.) that performs the smallest logical subset of business functionality. It registers identified workload to the Application.
Example Usage
Apphub Workload Basic
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";
import * as time from "@pulumi/time";
const application = new gcp.apphub.Application("application", {
location: "us-central1",
applicationId: "example-application-1",
scope: {
type: "REGIONAL",
},
});
const serviceProject = new gcp.organizations.Project("service_project", {
projectId: "project-1",
name: "Service Project",
orgId: "123456789",
billingAccount: "000000-0000000-0000000-000000",
});
// Enable Compute API
const computeServiceProject = new gcp.projects.Service("compute_service_project", {
project: serviceProject.projectId,
service: "compute.googleapis.com",
});
const wait120s = new time.index.Sleep("wait_120s", {createDuration: "120s"});
const serviceProjectAttachment = new gcp.apphub.ServiceProjectAttachment("service_project_attachment", {serviceProjectAttachmentId: serviceProject.projectId});
// VPC network
const ilbNetwork = new gcp.compute.Network("ilb_network", {
name: "l7-ilb-network",
project: serviceProject.projectId,
autoCreateSubnetworks: false,
});
// backend subnet
const ilbSubnet = new gcp.compute.Subnetwork("ilb_subnet", {
name: "l7-ilb-subnet",
project: serviceProject.projectId,
ipCidrRange: "10.0.1.0/24",
region: "us-central1",
network: ilbNetwork.id,
});
// instance template
const instanceTemplate = new gcp.compute.InstanceTemplate("instance_template", {
networkInterfaces: [{
accessConfigs: [{}],
network: ilbNetwork.id,
subnetwork: ilbSubnet.id,
}],
name: "l7-ilb-mig-template",
project: serviceProject.projectId,
machineType: "e2-small",
tags: ["http-server"],
disks: [{
sourceImage: "debian-cloud/debian-10",
autoDelete: true,
boot: true,
}],
metadata: {
"startup-script": `#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: NAME
IP: IP
Metadata: METADATA
</pre>
EOF
`,
},
});
const mig = new gcp.compute.RegionInstanceGroupManager("mig", {
name: "l7-ilb-mig1",
project: serviceProject.projectId,
region: "us-central1",
versions: [{
instanceTemplate: instanceTemplate.id,
name: "primary",
}],
baseInstanceName: "vm",
targetSize: 2,
});
// Discovered workload
const catalog-workload = std.replaceOutput({
text: mig.instanceGroup,
search: "https://www.googleapis.com/compute/v1",
replace: "//compute.googleapis.com",
}).apply(invoke => gcp.apphub.getDiscoveredWorkloadOutput({
location: "us-central1",
workloadUri: invoke.result,
}));
const wait120sForResourceIngestion = new time.index.Sleep("wait_120s_for_resource_ingestion", {createDuration: "120s"});
const example = new gcp.apphub.Workload("example", {
location: "us-central1",
applicationId: application.applicationId,
workloadId: mig.name,
discoveredWorkload: catalog_workload.apply(catalog_workload => catalog_workload.name),
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std
import pulumi_time as time
application = gcp.apphub.Application("application",
location="us-central1",
application_id="example-application-1",
scope=gcp.apphub.ApplicationScopeArgs(
type="REGIONAL",
))
service_project = gcp.organizations.Project("service_project",
project_id="project-1",
name="Service Project",
org_id="123456789",
billing_account="000000-0000000-0000000-000000")
# Enable Compute API
compute_service_project = gcp.projects.Service("compute_service_project",
project=service_project.project_id,
service="compute.googleapis.com")
wait120s = time.index.Sleep("wait_120s", create_duration=120s)
service_project_attachment = gcp.apphub.ServiceProjectAttachment("service_project_attachment", service_project_attachment_id=service_project.project_id)
# VPC network
ilb_network = gcp.compute.Network("ilb_network",
name="l7-ilb-network",
project=service_project.project_id,
auto_create_subnetworks=False)
# backend subnet
ilb_subnet = gcp.compute.Subnetwork("ilb_subnet",
name="l7-ilb-subnet",
project=service_project.project_id,
ip_cidr_range="10.0.1.0/24",
region="us-central1",
network=ilb_network.id)
# instance template
instance_template = gcp.compute.InstanceTemplate("instance_template",
network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs(
access_configs=[gcp.compute.InstanceTemplateNetworkInterfaceAccessConfigArgs()],
network=ilb_network.id,
subnetwork=ilb_subnet.id,
)],
name="l7-ilb-mig-template",
project=service_project.project_id,
machine_type="e2-small",
tags=["http-server"],
disks=[gcp.compute.InstanceTemplateDiskArgs(
source_image="debian-cloud/debian-10",
auto_delete=True,
boot=True,
)],
metadata={
"startup-script": """#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
""",
})
mig = gcp.compute.RegionInstanceGroupManager("mig",
name="l7-ilb-mig1",
project=service_project.project_id,
region="us-central1",
versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs(
instance_template=instance_template.id,
name="primary",
)],
base_instance_name="vm",
target_size=2)
# Discovered workload
catalog_workload = std.replace_output(text=mig.instance_group,
search="https://www.googleapis.com/compute/v1",
replace="//compute.googleapis.com").apply(lambda invoke: gcp.apphub.get_discovered_workload_output(location="us-central1",
workload_uri=invoke.result))
wait120s_for_resource_ingestion = time.index.Sleep("wait_120s_for_resource_ingestion", create_duration=120s)
example = gcp.apphub.Workload("example",
location="us-central1",
application_id=application.application_id,
workload_id=mig.name,
discovered_workload=catalog_workload.name)
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/apphub"
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/projects"
"github.com/pulumi/pulumi-std/sdk/go/std"
"github.com/pulumi/pulumi-time/sdk/go/time"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
application, err := apphub.NewApplication(ctx, "application", &apphub.ApplicationArgs{
Location: pulumi.String("us-central1"),
ApplicationId: pulumi.String("example-application-1"),
Scope: &apphub.ApplicationScopeArgs{
Type: pulumi.String("REGIONAL"),
},
})
if err != nil {
return err
}
serviceProject, err := organizations.NewProject(ctx, "service_project", &organizations.ProjectArgs{
ProjectId: pulumi.String("project-1"),
Name: pulumi.String("Service Project"),
OrgId: pulumi.String("123456789"),
BillingAccount: pulumi.String("000000-0000000-0000000-000000"),
})
if err != nil {
return err
}
// Enable Compute API
_, err = projects.NewService(ctx, "compute_service_project", &projects.ServiceArgs{
Project: serviceProject.ProjectId,
Service: pulumi.String("compute.googleapis.com"),
})
if err != nil {
return err
}
_, err = time.NewSleep(ctx, "wait_120s", &time.SleepArgs{
CreateDuration: "120s",
})
if err != nil {
return err
}
_, err = apphub.NewServiceProjectAttachment(ctx, "service_project_attachment", &apphub.ServiceProjectAttachmentArgs{
ServiceProjectAttachmentId: serviceProject.ProjectId,
})
if err != nil {
return err
}
// VPC network
ilbNetwork, err := compute.NewNetwork(ctx, "ilb_network", &compute.NetworkArgs{
Name: pulumi.String("l7-ilb-network"),
Project: serviceProject.ProjectId,
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
// backend subnet
ilbSubnet, err := compute.NewSubnetwork(ctx, "ilb_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("l7-ilb-subnet"),
Project: serviceProject.ProjectId,
IpCidrRange: pulumi.String("10.0.1.0/24"),
Region: pulumi.String("us-central1"),
Network: ilbNetwork.ID(),
})
if err != nil {
return err
}
// instance template
instanceTemplate, err := compute.NewInstanceTemplate(ctx, "instance_template", &compute.InstanceTemplateArgs{
NetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{
&compute.InstanceTemplateNetworkInterfaceArgs{
AccessConfigs: compute.InstanceTemplateNetworkInterfaceAccessConfigArray{
nil,
},
Network: ilbNetwork.ID(),
Subnetwork: ilbSubnet.ID(),
},
},
Name: pulumi.String("l7-ilb-mig-template"),
Project: serviceProject.ProjectId,
MachineType: pulumi.String("e2-small"),
Tags: pulumi.StringArray{
pulumi.String("http-server"),
},
Disks: compute.InstanceTemplateDiskArray{
&compute.InstanceTemplateDiskArgs{
SourceImage: pulumi.String("debian-cloud/debian-10"),
AutoDelete: pulumi.Bool(true),
Boot: pulumi.Bool(true),
},
},
Metadata: pulumi.Map{
"startup-script": pulumi.Any(`#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
`),
},
})
if err != nil {
return err
}
mig, err := compute.NewRegionInstanceGroupManager(ctx, "mig", &compute.RegionInstanceGroupManagerArgs{
Name: pulumi.String("l7-ilb-mig1"),
Project: serviceProject.ProjectId,
Region: pulumi.String("us-central1"),
Versions: compute.RegionInstanceGroupManagerVersionArray{
&compute.RegionInstanceGroupManagerVersionArgs{
InstanceTemplate: instanceTemplate.ID(),
Name: pulumi.String("primary"),
},
},
BaseInstanceName: pulumi.String("vm"),
TargetSize: pulumi.Int(2),
})
if err != nil {
return err
}
// Discovered workload
catalog_workload := std.ReplaceOutput(ctx, std.ReplaceOutputArgs{
Text: mig.InstanceGroup,
Search: pulumi.String("https://www.googleapis.com/compute/v1"),
Replace: pulumi.String("//compute.googleapis.com"),
}, nil).ApplyT(func(invoke std.ReplaceResult) (apphub.GetDiscoveredWorkloadResult, error) {
return apphub.GetDiscoveredWorkloadOutput(ctx, apphub.GetDiscoveredWorkloadOutputArgs{
Location: "us-central1",
WorkloadUri: invoke.Result,
}, nil), nil
}).(apphub.GetDiscoveredWorkloadResultOutput)
_, err = time.NewSleep(ctx, "wait_120s_for_resource_ingestion", &time.SleepArgs{
CreateDuration: "120s",
})
if err != nil {
return err
}
_, err = apphub.NewWorkload(ctx, "example", &apphub.WorkloadArgs{
Location: pulumi.String("us-central1"),
ApplicationId: application.ApplicationId,
WorkloadId: mig.Name,
DiscoveredWorkload: catalog_workload.ApplyT(func(catalog_workload apphub.GetDiscoveredWorkloadResult) (*string, error) {
return &catalog_workload.Name, nil
}).(pulumi.StringPtrOutput),
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;
using Time = Pulumi.Time;
return await Deployment.RunAsync(() =>
{
var application = new Gcp.Apphub.Application("application", new()
{
Location = "us-central1",
ApplicationId = "example-application-1",
Scope = new Gcp.Apphub.Inputs.ApplicationScopeArgs
{
Type = "REGIONAL",
},
});
var serviceProject = new Gcp.Organizations.Project("service_project", new()
{
ProjectId = "project-1",
Name = "Service Project",
OrgId = "123456789",
BillingAccount = "000000-0000000-0000000-000000",
});
// Enable Compute API
var computeServiceProject = new Gcp.Projects.Service("compute_service_project", new()
{
Project = serviceProject.ProjectId,
ServiceName = "compute.googleapis.com",
});
var wait120s = new Time.Index.Sleep("wait_120s", new()
{
CreateDuration = "120s",
});
var serviceProjectAttachment = new Gcp.Apphub.ServiceProjectAttachment("service_project_attachment", new()
{
ServiceProjectAttachmentId = serviceProject.ProjectId,
});
// VPC network
var ilbNetwork = new Gcp.Compute.Network("ilb_network", new()
{
Name = "l7-ilb-network",
Project = serviceProject.ProjectId,
AutoCreateSubnetworks = false,
});
// backend subnet
var ilbSubnet = new Gcp.Compute.Subnetwork("ilb_subnet", new()
{
Name = "l7-ilb-subnet",
Project = serviceProject.ProjectId,
IpCidrRange = "10.0.1.0/24",
Region = "us-central1",
Network = ilbNetwork.Id,
});
// instance template
var instanceTemplate = new Gcp.Compute.InstanceTemplate("instance_template", new()
{
NetworkInterfaces = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs
{
AccessConfigs = new[]
{
null,
},
Network = ilbNetwork.Id,
Subnetwork = ilbSubnet.Id,
},
},
Name = "l7-ilb-mig-template",
Project = serviceProject.ProjectId,
MachineType = "e2-small",
Tags = new[]
{
"http-server",
},
Disks = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateDiskArgs
{
SourceImage = "debian-cloud/debian-10",
AutoDelete = true,
Boot = true,
},
},
Metadata =
{
{ "startup-script", @"#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H ""Metadata-Flavor: Google"" ""http://metadata.google.internal/computeMetadata/v1/instance/hostname"")
IP=$(curl -H ""Metadata-Flavor: Google"" ""http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip"")
METADATA=$(curl -f -H ""Metadata-Flavor: Google"" ""http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True"" | jq 'del(.[""startup-script""])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
" },
},
});
var mig = new Gcp.Compute.RegionInstanceGroupManager("mig", new()
{
Name = "l7-ilb-mig1",
Project = serviceProject.ProjectId,
Region = "us-central1",
Versions = new[]
{
new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs
{
InstanceTemplate = instanceTemplate.Id,
Name = "primary",
},
},
BaseInstanceName = "vm",
TargetSize = 2,
});
// Discovered workload
var catalog_workload = Gcp.Apphub.GetDiscoveredWorkload.Invoke(new()
{
Location = "us-central1",
WorkloadUri = Std.Replace.Invoke(new()
{
Text = mig.InstanceGroup,
Search = "https://www.googleapis.com/compute/v1",
Replace = "//compute.googleapis.com",
}).Result,
});
var wait120sForResourceIngestion = new Time.Index.Sleep("wait_120s_for_resource_ingestion", new()
{
CreateDuration = "120s",
});
var example = new Gcp.Apphub.Workload("example", new()
{
Location = "us-central1",
ApplicationId = application.ApplicationId,
WorkloadId = mig.Name,
DiscoveredWorkload = catalog_workload.Apply(catalog_workload => catalog_workload.Apply(getDiscoveredWorkloadResult => getDiscoveredWorkloadResult.Name)),
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.apphub.Application;
import com.pulumi.gcp.apphub.ApplicationArgs;
import com.pulumi.gcp.apphub.inputs.ApplicationScopeArgs;
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.time.sleep;
import com.pulumi.time.SleepArgs;
import com.pulumi.gcp.apphub.ServiceProjectAttachment;
import com.pulumi.gcp.apphub.ServiceProjectAttachmentArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.InstanceTemplate;
import com.pulumi.gcp.compute.InstanceTemplateArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;
import com.pulumi.gcp.compute.RegionInstanceGroupManager;
import com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;
import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;
import com.pulumi.gcp.apphub.ApphubFunctions;
import com.pulumi.gcp.apphub.inputs.GetDiscoveredWorkloadArgs;
import com.pulumi.gcp.apphub.Workload;
import com.pulumi.gcp.apphub.WorkloadArgs;
import java.util.List;
import java.util.ArrayList;
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) {
var application = new Application("application", ApplicationArgs.builder()
.location("us-central1")
.applicationId("example-application-1")
.scope(ApplicationScopeArgs.builder()
.type("REGIONAL")
.build())
.build());
var serviceProject = new Project("serviceProject", ProjectArgs.builder()
.projectId("project-1")
.name("Service Project")
.orgId("123456789")
.billingAccount("000000-0000000-0000000-000000")
.build());
// Enable Compute API
var computeServiceProject = new Service("computeServiceProject", ServiceArgs.builder()
.project(serviceProject.projectId())
.service("compute.googleapis.com")
.build());
var wait120s = new Sleep("wait120s", SleepArgs.builder()
.createDuration("120s")
.build());
var serviceProjectAttachment = new ServiceProjectAttachment("serviceProjectAttachment", ServiceProjectAttachmentArgs.builder()
.serviceProjectAttachmentId(serviceProject.projectId())
.build());
// VPC network
var ilbNetwork = new Network("ilbNetwork", NetworkArgs.builder()
.name("l7-ilb-network")
.project(serviceProject.projectId())
.autoCreateSubnetworks(false)
.build());
// backend subnet
var ilbSubnet = new Subnetwork("ilbSubnet", SubnetworkArgs.builder()
.name("l7-ilb-subnet")
.project(serviceProject.projectId())
.ipCidrRange("10.0.1.0/24")
.region("us-central1")
.network(ilbNetwork.id())
.build());
// instance template
var instanceTemplate = new InstanceTemplate("instanceTemplate", InstanceTemplateArgs.builder()
.networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()
.accessConfigs()
.network(ilbNetwork.id())
.subnetwork(ilbSubnet.id())
.build())
.name("l7-ilb-mig-template")
.project(serviceProject.projectId())
.machineType("e2-small")
.tags("http-server")
.disks(InstanceTemplateDiskArgs.builder()
.sourceImage("debian-cloud/debian-10")
.autoDelete(true)
.boot(true)
.build())
.metadata(Map.of("startup-script", """
#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
"""))
.build());
var mig = new RegionInstanceGroupManager("mig", RegionInstanceGroupManagerArgs.builder()
.name("l7-ilb-mig1")
.project(serviceProject.projectId())
.region("us-central1")
.versions(RegionInstanceGroupManagerVersionArgs.builder()
.instanceTemplate(instanceTemplate.id())
.name("primary")
.build())
.baseInstanceName("vm")
.targetSize(2)
.build());
// Discovered workload
final var catalog-workload = ApphubFunctions.getDiscoveredWorkload(GetDiscoveredWorkloadArgs.builder()
.location("us-central1")
.workloadUri(StdFunctions.replace().applyValue(invoke -> invoke.result()))
.build());
var wait120sForResourceIngestion = new Sleep("wait120sForResourceIngestion", SleepArgs.builder()
.createDuration("120s")
.build());
var example = new Workload("example", WorkloadArgs.builder()
.location("us-central1")
.applicationId(application.applicationId())
.workloadId(mig.name())
.discoveredWorkload(catalog_workload.applyValue(catalog_workload -> catalog_workload.name()))
.build());
}
}
resources:
application:
type: gcp:apphub:Application
properties:
location: us-central1
applicationId: example-application-1
scope:
type: REGIONAL
serviceProject:
type: gcp:organizations:Project
name: service_project
properties:
projectId: project-1
name: Service Project
orgId: '123456789'
billingAccount: 000000-0000000-0000000-000000
# Enable Compute API
computeServiceProject:
type: gcp:projects:Service
name: compute_service_project
properties:
project: ${serviceProject.projectId}
service: compute.googleapis.com
wait120s:
type: time:sleep
name: wait_120s
properties:
createDuration: 120s
serviceProjectAttachment:
type: gcp:apphub:ServiceProjectAttachment
name: service_project_attachment
properties:
serviceProjectAttachmentId: ${serviceProject.projectId}
wait120sForResourceIngestion:
type: time:sleep
name: wait_120s_for_resource_ingestion
properties:
createDuration: 120s
example:
type: gcp:apphub:Workload
properties:
location: us-central1
applicationId: ${application.applicationId}
workloadId: ${mig.name}
discoveredWorkload: ${["catalog-workload"].name}
# VPC network
ilbNetwork:
type: gcp:compute:Network
name: ilb_network
properties:
name: l7-ilb-network
project: ${serviceProject.projectId}
autoCreateSubnetworks: false
# backend subnet
ilbSubnet:
type: gcp:compute:Subnetwork
name: ilb_subnet
properties:
name: l7-ilb-subnet
project: ${serviceProject.projectId}
ipCidrRange: 10.0.1.0/24
region: us-central1
network: ${ilbNetwork.id}
# instance template
instanceTemplate:
type: gcp:compute:InstanceTemplate
name: instance_template
properties:
networkInterfaces:
- accessConfigs:
- {}
network: ${ilbNetwork.id}
subnetwork: ${ilbSubnet.id}
name: l7-ilb-mig-template
project: ${serviceProject.projectId}
machineType: e2-small
tags:
- http-server
disks:
- sourceImage: debian-cloud/debian-10
autoDelete: true
boot: true
metadata:
startup-script: |
#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
mig:
type: gcp:compute:RegionInstanceGroupManager
properties:
name: l7-ilb-mig1
project: ${serviceProject.projectId}
region: us-central1
versions:
- instanceTemplate: ${instanceTemplate.id}
name: primary
baseInstanceName: vm
targetSize: 2
variables:
# Discovered workload
catalog-workload:
fn::invoke:
Function: gcp:apphub:getDiscoveredWorkload
Arguments:
location: us-central1
workloadUri:
fn::invoke:
Function: std:replace
Arguments:
text: ${mig.instanceGroup}
search: https://www.googleapis.com/compute/v1
replace: //compute.googleapis.com
Return: result
Apphub Workload Full
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";
import * as time from "@pulumi/time";
const application = new gcp.apphub.Application("application", {
location: "us-central1",
applicationId: "example-application-1",
scope: {
type: "REGIONAL",
},
});
const serviceProject = new gcp.organizations.Project("service_project", {
projectId: "project-1",
name: "Service Project",
orgId: "123456789",
billingAccount: "000000-0000000-0000000-000000",
});
// Enable Compute API
const computeServiceProject = new gcp.projects.Service("compute_service_project", {
project: serviceProject.projectId,
service: "compute.googleapis.com",
});
const wait120s = new time.index.Sleep("wait_120s", {createDuration: "120s"});
const serviceProjectAttachment = new gcp.apphub.ServiceProjectAttachment("service_project_attachment", {serviceProjectAttachmentId: serviceProject.projectId});
// VPC network
const ilbNetwork = new gcp.compute.Network("ilb_network", {
name: "l7-ilb-network",
project: serviceProject.projectId,
autoCreateSubnetworks: false,
});
// backend subnet
const ilbSubnet = new gcp.compute.Subnetwork("ilb_subnet", {
name: "l7-ilb-subnet",
project: serviceProject.projectId,
ipCidrRange: "10.0.1.0/24",
region: "us-central1",
network: ilbNetwork.id,
});
// instance template
const instanceTemplate = new gcp.compute.InstanceTemplate("instance_template", {
networkInterfaces: [{
accessConfigs: [{}],
network: ilbNetwork.id,
subnetwork: ilbSubnet.id,
}],
name: "l7-ilb-mig-template",
project: serviceProject.projectId,
machineType: "e2-small",
tags: ["http-server"],
disks: [{
sourceImage: "debian-cloud/debian-10",
autoDelete: true,
boot: true,
}],
metadata: {
"startup-script": `#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: NAME
IP: IP
Metadata: METADATA
</pre>
EOF
`,
},
});
const mig = new gcp.compute.RegionInstanceGroupManager("mig", {
name: "l7-ilb-mig1",
project: serviceProject.projectId,
region: "us-central1",
versions: [{
instanceTemplate: instanceTemplate.id,
name: "primary",
}],
baseInstanceName: "vm",
targetSize: 2,
});
// Discovered workload
const catalog-workload = std.replaceOutput({
text: mig.instanceGroup,
search: "https://www.googleapis.com/compute/v1",
replace: "//compute.googleapis.com",
}).apply(invoke => gcp.apphub.getDiscoveredWorkloadOutput({
location: "us-central1",
workloadUri: invoke.result,
}));
const wait120sForResourceIngestion = new time.index.Sleep("wait_120s_for_resource_ingestion", {createDuration: "120s"});
const example = new gcp.apphub.Workload("example", {
location: "us-central1",
applicationId: application.applicationId,
workloadId: mig.name,
discoveredWorkload: catalog_workload.apply(catalog_workload => catalog_workload.name),
displayName: "Example Service Full",
description: "Register service for testing",
attributes: {
environment: {
type: "STAGING",
},
criticality: {
type: "MISSION_CRITICAL",
},
businessOwners: [{
displayName: "Alice",
email: "alice@google.com",
}],
developerOwners: [{
displayName: "Bob",
email: "bob@google.com",
}],
operatorOwners: [{
displayName: "Charlie",
email: "charlie@google.com",
}],
},
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std
import pulumi_time as time
application = gcp.apphub.Application("application",
location="us-central1",
application_id="example-application-1",
scope=gcp.apphub.ApplicationScopeArgs(
type="REGIONAL",
))
service_project = gcp.organizations.Project("service_project",
project_id="project-1",
name="Service Project",
org_id="123456789",
billing_account="000000-0000000-0000000-000000")
# Enable Compute API
compute_service_project = gcp.projects.Service("compute_service_project",
project=service_project.project_id,
service="compute.googleapis.com")
wait120s = time.index.Sleep("wait_120s", create_duration=120s)
service_project_attachment = gcp.apphub.ServiceProjectAttachment("service_project_attachment", service_project_attachment_id=service_project.project_id)
# VPC network
ilb_network = gcp.compute.Network("ilb_network",
name="l7-ilb-network",
project=service_project.project_id,
auto_create_subnetworks=False)
# backend subnet
ilb_subnet = gcp.compute.Subnetwork("ilb_subnet",
name="l7-ilb-subnet",
project=service_project.project_id,
ip_cidr_range="10.0.1.0/24",
region="us-central1",
network=ilb_network.id)
# instance template
instance_template = gcp.compute.InstanceTemplate("instance_template",
network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs(
access_configs=[gcp.compute.InstanceTemplateNetworkInterfaceAccessConfigArgs()],
network=ilb_network.id,
subnetwork=ilb_subnet.id,
)],
name="l7-ilb-mig-template",
project=service_project.project_id,
machine_type="e2-small",
tags=["http-server"],
disks=[gcp.compute.InstanceTemplateDiskArgs(
source_image="debian-cloud/debian-10",
auto_delete=True,
boot=True,
)],
metadata={
"startup-script": """#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
""",
})
mig = gcp.compute.RegionInstanceGroupManager("mig",
name="l7-ilb-mig1",
project=service_project.project_id,
region="us-central1",
versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs(
instance_template=instance_template.id,
name="primary",
)],
base_instance_name="vm",
target_size=2)
# Discovered workload
catalog_workload = std.replace_output(text=mig.instance_group,
search="https://www.googleapis.com/compute/v1",
replace="//compute.googleapis.com").apply(lambda invoke: gcp.apphub.get_discovered_workload_output(location="us-central1",
workload_uri=invoke.result))
wait120s_for_resource_ingestion = time.index.Sleep("wait_120s_for_resource_ingestion", create_duration=120s)
example = gcp.apphub.Workload("example",
location="us-central1",
application_id=application.application_id,
workload_id=mig.name,
discovered_workload=catalog_workload.name,
display_name="Example Service Full",
description="Register service for testing",
attributes=gcp.apphub.WorkloadAttributesArgs(
environment=gcp.apphub.WorkloadAttributesEnvironmentArgs(
type="STAGING",
),
criticality=gcp.apphub.WorkloadAttributesCriticalityArgs(
type="MISSION_CRITICAL",
),
business_owners=[gcp.apphub.WorkloadAttributesBusinessOwnerArgs(
display_name="Alice",
email="alice@google.com",
)],
developer_owners=[gcp.apphub.WorkloadAttributesDeveloperOwnerArgs(
display_name="Bob",
email="bob@google.com",
)],
operator_owners=[gcp.apphub.WorkloadAttributesOperatorOwnerArgs(
display_name="Charlie",
email="charlie@google.com",
)],
))
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/apphub"
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations"
"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/projects"
"github.com/pulumi/pulumi-std/sdk/go/std"
"github.com/pulumi/pulumi-time/sdk/go/time"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
application, err := apphub.NewApplication(ctx, "application", &apphub.ApplicationArgs{
Location: pulumi.String("us-central1"),
ApplicationId: pulumi.String("example-application-1"),
Scope: &apphub.ApplicationScopeArgs{
Type: pulumi.String("REGIONAL"),
},
})
if err != nil {
return err
}
serviceProject, err := organizations.NewProject(ctx, "service_project", &organizations.ProjectArgs{
ProjectId: pulumi.String("project-1"),
Name: pulumi.String("Service Project"),
OrgId: pulumi.String("123456789"),
BillingAccount: pulumi.String("000000-0000000-0000000-000000"),
})
if err != nil {
return err
}
// Enable Compute API
_, err = projects.NewService(ctx, "compute_service_project", &projects.ServiceArgs{
Project: serviceProject.ProjectId,
Service: pulumi.String("compute.googleapis.com"),
})
if err != nil {
return err
}
_, err = time.NewSleep(ctx, "wait_120s", &time.SleepArgs{
CreateDuration: "120s",
})
if err != nil {
return err
}
_, err = apphub.NewServiceProjectAttachment(ctx, "service_project_attachment", &apphub.ServiceProjectAttachmentArgs{
ServiceProjectAttachmentId: serviceProject.ProjectId,
})
if err != nil {
return err
}
// VPC network
ilbNetwork, err := compute.NewNetwork(ctx, "ilb_network", &compute.NetworkArgs{
Name: pulumi.String("l7-ilb-network"),
Project: serviceProject.ProjectId,
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
// backend subnet
ilbSubnet, err := compute.NewSubnetwork(ctx, "ilb_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("l7-ilb-subnet"),
Project: serviceProject.ProjectId,
IpCidrRange: pulumi.String("10.0.1.0/24"),
Region: pulumi.String("us-central1"),
Network: ilbNetwork.ID(),
})
if err != nil {
return err
}
// instance template
instanceTemplate, err := compute.NewInstanceTemplate(ctx, "instance_template", &compute.InstanceTemplateArgs{
NetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{
&compute.InstanceTemplateNetworkInterfaceArgs{
AccessConfigs: compute.InstanceTemplateNetworkInterfaceAccessConfigArray{
nil,
},
Network: ilbNetwork.ID(),
Subnetwork: ilbSubnet.ID(),
},
},
Name: pulumi.String("l7-ilb-mig-template"),
Project: serviceProject.ProjectId,
MachineType: pulumi.String("e2-small"),
Tags: pulumi.StringArray{
pulumi.String("http-server"),
},
Disks: compute.InstanceTemplateDiskArray{
&compute.InstanceTemplateDiskArgs{
SourceImage: pulumi.String("debian-cloud/debian-10"),
AutoDelete: pulumi.Bool(true),
Boot: pulumi.Bool(true),
},
},
Metadata: pulumi.Map{
"startup-script": pulumi.Any(`#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
`),
},
})
if err != nil {
return err
}
mig, err := compute.NewRegionInstanceGroupManager(ctx, "mig", &compute.RegionInstanceGroupManagerArgs{
Name: pulumi.String("l7-ilb-mig1"),
Project: serviceProject.ProjectId,
Region: pulumi.String("us-central1"),
Versions: compute.RegionInstanceGroupManagerVersionArray{
&compute.RegionInstanceGroupManagerVersionArgs{
InstanceTemplate: instanceTemplate.ID(),
Name: pulumi.String("primary"),
},
},
BaseInstanceName: pulumi.String("vm"),
TargetSize: pulumi.Int(2),
})
if err != nil {
return err
}
// Discovered workload
catalog_workload := std.ReplaceOutput(ctx, std.ReplaceOutputArgs{
Text: mig.InstanceGroup,
Search: pulumi.String("https://www.googleapis.com/compute/v1"),
Replace: pulumi.String("//compute.googleapis.com"),
}, nil).ApplyT(func(invoke std.ReplaceResult) (apphub.GetDiscoveredWorkloadResult, error) {
return apphub.GetDiscoveredWorkloadOutput(ctx, apphub.GetDiscoveredWorkloadOutputArgs{
Location: "us-central1",
WorkloadUri: invoke.Result,
}, nil), nil
}).(apphub.GetDiscoveredWorkloadResultOutput)
_, err = time.NewSleep(ctx, "wait_120s_for_resource_ingestion", &time.SleepArgs{
CreateDuration: "120s",
})
if err != nil {
return err
}
_, err = apphub.NewWorkload(ctx, "example", &apphub.WorkloadArgs{
Location: pulumi.String("us-central1"),
ApplicationId: application.ApplicationId,
WorkloadId: mig.Name,
DiscoveredWorkload: catalog_workload.ApplyT(func(catalog_workload apphub.GetDiscoveredWorkloadResult) (*string, error) {
return &catalog_workload.Name, nil
}).(pulumi.StringPtrOutput),
DisplayName: pulumi.String("Example Service Full"),
Description: pulumi.String("Register service for testing"),
Attributes: &apphub.WorkloadAttributesArgs{
Environment: &apphub.WorkloadAttributesEnvironmentArgs{
Type: pulumi.String("STAGING"),
},
Criticality: &apphub.WorkloadAttributesCriticalityArgs{
Type: pulumi.String("MISSION_CRITICAL"),
},
BusinessOwners: apphub.WorkloadAttributesBusinessOwnerArray{
&apphub.WorkloadAttributesBusinessOwnerArgs{
DisplayName: pulumi.String("Alice"),
Email: pulumi.String("alice@google.com"),
},
},
DeveloperOwners: apphub.WorkloadAttributesDeveloperOwnerArray{
&apphub.WorkloadAttributesDeveloperOwnerArgs{
DisplayName: pulumi.String("Bob"),
Email: pulumi.String("bob@google.com"),
},
},
OperatorOwners: apphub.WorkloadAttributesOperatorOwnerArray{
&apphub.WorkloadAttributesOperatorOwnerArgs{
DisplayName: pulumi.String("Charlie"),
Email: pulumi.String("charlie@google.com"),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;
using Time = Pulumi.Time;
return await Deployment.RunAsync(() =>
{
var application = new Gcp.Apphub.Application("application", new()
{
Location = "us-central1",
ApplicationId = "example-application-1",
Scope = new Gcp.Apphub.Inputs.ApplicationScopeArgs
{
Type = "REGIONAL",
},
});
var serviceProject = new Gcp.Organizations.Project("service_project", new()
{
ProjectId = "project-1",
Name = "Service Project",
OrgId = "123456789",
BillingAccount = "000000-0000000-0000000-000000",
});
// Enable Compute API
var computeServiceProject = new Gcp.Projects.Service("compute_service_project", new()
{
Project = serviceProject.ProjectId,
ServiceName = "compute.googleapis.com",
});
var wait120s = new Time.Index.Sleep("wait_120s", new()
{
CreateDuration = "120s",
});
var serviceProjectAttachment = new Gcp.Apphub.ServiceProjectAttachment("service_project_attachment", new()
{
ServiceProjectAttachmentId = serviceProject.ProjectId,
});
// VPC network
var ilbNetwork = new Gcp.Compute.Network("ilb_network", new()
{
Name = "l7-ilb-network",
Project = serviceProject.ProjectId,
AutoCreateSubnetworks = false,
});
// backend subnet
var ilbSubnet = new Gcp.Compute.Subnetwork("ilb_subnet", new()
{
Name = "l7-ilb-subnet",
Project = serviceProject.ProjectId,
IpCidrRange = "10.0.1.0/24",
Region = "us-central1",
Network = ilbNetwork.Id,
});
// instance template
var instanceTemplate = new Gcp.Compute.InstanceTemplate("instance_template", new()
{
NetworkInterfaces = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs
{
AccessConfigs = new[]
{
null,
},
Network = ilbNetwork.Id,
Subnetwork = ilbSubnet.Id,
},
},
Name = "l7-ilb-mig-template",
Project = serviceProject.ProjectId,
MachineType = "e2-small",
Tags = new[]
{
"http-server",
},
Disks = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateDiskArgs
{
SourceImage = "debian-cloud/debian-10",
AutoDelete = true,
Boot = true,
},
},
Metadata =
{
{ "startup-script", @"#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H ""Metadata-Flavor: Google"" ""http://metadata.google.internal/computeMetadata/v1/instance/hostname"")
IP=$(curl -H ""Metadata-Flavor: Google"" ""http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip"")
METADATA=$(curl -f -H ""Metadata-Flavor: Google"" ""http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True"" | jq 'del(.[""startup-script""])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
" },
},
});
var mig = new Gcp.Compute.RegionInstanceGroupManager("mig", new()
{
Name = "l7-ilb-mig1",
Project = serviceProject.ProjectId,
Region = "us-central1",
Versions = new[]
{
new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs
{
InstanceTemplate = instanceTemplate.Id,
Name = "primary",
},
},
BaseInstanceName = "vm",
TargetSize = 2,
});
// Discovered workload
var catalog_workload = Gcp.Apphub.GetDiscoveredWorkload.Invoke(new()
{
Location = "us-central1",
WorkloadUri = Std.Replace.Invoke(new()
{
Text = mig.InstanceGroup,
Search = "https://www.googleapis.com/compute/v1",
Replace = "//compute.googleapis.com",
}).Result,
});
var wait120sForResourceIngestion = new Time.Index.Sleep("wait_120s_for_resource_ingestion", new()
{
CreateDuration = "120s",
});
var example = new Gcp.Apphub.Workload("example", new()
{
Location = "us-central1",
ApplicationId = application.ApplicationId,
WorkloadId = mig.Name,
DiscoveredWorkload = catalog_workload.Apply(catalog_workload => catalog_workload.Apply(getDiscoveredWorkloadResult => getDiscoveredWorkloadResult.Name)),
DisplayName = "Example Service Full",
Description = "Register service for testing",
Attributes = new Gcp.Apphub.Inputs.WorkloadAttributesArgs
{
Environment = new Gcp.Apphub.Inputs.WorkloadAttributesEnvironmentArgs
{
Type = "STAGING",
},
Criticality = new Gcp.Apphub.Inputs.WorkloadAttributesCriticalityArgs
{
Type = "MISSION_CRITICAL",
},
BusinessOwners = new[]
{
new Gcp.Apphub.Inputs.WorkloadAttributesBusinessOwnerArgs
{
DisplayName = "Alice",
Email = "alice@google.com",
},
},
DeveloperOwners = new[]
{
new Gcp.Apphub.Inputs.WorkloadAttributesDeveloperOwnerArgs
{
DisplayName = "Bob",
Email = "bob@google.com",
},
},
OperatorOwners = new[]
{
new Gcp.Apphub.Inputs.WorkloadAttributesOperatorOwnerArgs
{
DisplayName = "Charlie",
Email = "charlie@google.com",
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.apphub.Application;
import com.pulumi.gcp.apphub.ApplicationArgs;
import com.pulumi.gcp.apphub.inputs.ApplicationScopeArgs;
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.time.sleep;
import com.pulumi.time.SleepArgs;
import com.pulumi.gcp.apphub.ServiceProjectAttachment;
import com.pulumi.gcp.apphub.ServiceProjectAttachmentArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.InstanceTemplate;
import com.pulumi.gcp.compute.InstanceTemplateArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;
import com.pulumi.gcp.compute.RegionInstanceGroupManager;
import com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;
import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;
import com.pulumi.gcp.apphub.ApphubFunctions;
import com.pulumi.gcp.apphub.inputs.GetDiscoveredWorkloadArgs;
import com.pulumi.gcp.apphub.Workload;
import com.pulumi.gcp.apphub.WorkloadArgs;
import com.pulumi.gcp.apphub.inputs.WorkloadAttributesArgs;
import com.pulumi.gcp.apphub.inputs.WorkloadAttributesEnvironmentArgs;
import com.pulumi.gcp.apphub.inputs.WorkloadAttributesCriticalityArgs;
import java.util.List;
import java.util.ArrayList;
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) {
var application = new Application("application", ApplicationArgs.builder()
.location("us-central1")
.applicationId("example-application-1")
.scope(ApplicationScopeArgs.builder()
.type("REGIONAL")
.build())
.build());
var serviceProject = new Project("serviceProject", ProjectArgs.builder()
.projectId("project-1")
.name("Service Project")
.orgId("123456789")
.billingAccount("000000-0000000-0000000-000000")
.build());
// Enable Compute API
var computeServiceProject = new Service("computeServiceProject", ServiceArgs.builder()
.project(serviceProject.projectId())
.service("compute.googleapis.com")
.build());
var wait120s = new Sleep("wait120s", SleepArgs.builder()
.createDuration("120s")
.build());
var serviceProjectAttachment = new ServiceProjectAttachment("serviceProjectAttachment", ServiceProjectAttachmentArgs.builder()
.serviceProjectAttachmentId(serviceProject.projectId())
.build());
// VPC network
var ilbNetwork = new Network("ilbNetwork", NetworkArgs.builder()
.name("l7-ilb-network")
.project(serviceProject.projectId())
.autoCreateSubnetworks(false)
.build());
// backend subnet
var ilbSubnet = new Subnetwork("ilbSubnet", SubnetworkArgs.builder()
.name("l7-ilb-subnet")
.project(serviceProject.projectId())
.ipCidrRange("10.0.1.0/24")
.region("us-central1")
.network(ilbNetwork.id())
.build());
// instance template
var instanceTemplate = new InstanceTemplate("instanceTemplate", InstanceTemplateArgs.builder()
.networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()
.accessConfigs()
.network(ilbNetwork.id())
.subnetwork(ilbSubnet.id())
.build())
.name("l7-ilb-mig-template")
.project(serviceProject.projectId())
.machineType("e2-small")
.tags("http-server")
.disks(InstanceTemplateDiskArgs.builder()
.sourceImage("debian-cloud/debian-10")
.autoDelete(true)
.boot(true)
.build())
.metadata(Map.of("startup-script", """
#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
"""))
.build());
var mig = new RegionInstanceGroupManager("mig", RegionInstanceGroupManagerArgs.builder()
.name("l7-ilb-mig1")
.project(serviceProject.projectId())
.region("us-central1")
.versions(RegionInstanceGroupManagerVersionArgs.builder()
.instanceTemplate(instanceTemplate.id())
.name("primary")
.build())
.baseInstanceName("vm")
.targetSize(2)
.build());
// Discovered workload
final var catalog-workload = ApphubFunctions.getDiscoveredWorkload(GetDiscoveredWorkloadArgs.builder()
.location("us-central1")
.workloadUri(StdFunctions.replace().applyValue(invoke -> invoke.result()))
.build());
var wait120sForResourceIngestion = new Sleep("wait120sForResourceIngestion", SleepArgs.builder()
.createDuration("120s")
.build());
var example = new Workload("example", WorkloadArgs.builder()
.location("us-central1")
.applicationId(application.applicationId())
.workloadId(mig.name())
.discoveredWorkload(catalog_workload.applyValue(catalog_workload -> catalog_workload.name()))
.displayName("Example Service Full")
.description("Register service for testing")
.attributes(WorkloadAttributesArgs.builder()
.environment(WorkloadAttributesEnvironmentArgs.builder()
.type("STAGING")
.build())
.criticality(WorkloadAttributesCriticalityArgs.builder()
.type("MISSION_CRITICAL")
.build())
.businessOwners(WorkloadAttributesBusinessOwnerArgs.builder()
.displayName("Alice")
.email("alice@google.com")
.build())
.developerOwners(WorkloadAttributesDeveloperOwnerArgs.builder()
.displayName("Bob")
.email("bob@google.com")
.build())
.operatorOwners(WorkloadAttributesOperatorOwnerArgs.builder()
.displayName("Charlie")
.email("charlie@google.com")
.build())
.build())
.build());
}
}
resources:
application:
type: gcp:apphub:Application
properties:
location: us-central1
applicationId: example-application-1
scope:
type: REGIONAL
serviceProject:
type: gcp:organizations:Project
name: service_project
properties:
projectId: project-1
name: Service Project
orgId: '123456789'
billingAccount: 000000-0000000-0000000-000000
# Enable Compute API
computeServiceProject:
type: gcp:projects:Service
name: compute_service_project
properties:
project: ${serviceProject.projectId}
service: compute.googleapis.com
wait120s:
type: time:sleep
name: wait_120s
properties:
createDuration: 120s
serviceProjectAttachment:
type: gcp:apphub:ServiceProjectAttachment
name: service_project_attachment
properties:
serviceProjectAttachmentId: ${serviceProject.projectId}
wait120sForResourceIngestion:
type: time:sleep
name: wait_120s_for_resource_ingestion
properties:
createDuration: 120s
example:
type: gcp:apphub:Workload
properties:
location: us-central1
applicationId: ${application.applicationId}
workloadId: ${mig.name}
discoveredWorkload: ${["catalog-workload"].name}
displayName: Example Service Full
description: Register service for testing
attributes:
environment:
type: STAGING
criticality:
type: MISSION_CRITICAL
businessOwners:
- displayName: Alice
email: alice@google.com
developerOwners:
- displayName: Bob
email: bob@google.com
operatorOwners:
- displayName: Charlie
email: charlie@google.com
# VPC network
ilbNetwork:
type: gcp:compute:Network
name: ilb_network
properties:
name: l7-ilb-network
project: ${serviceProject.projectId}
autoCreateSubnetworks: false
# backend subnet
ilbSubnet:
type: gcp:compute:Subnetwork
name: ilb_subnet
properties:
name: l7-ilb-subnet
project: ${serviceProject.projectId}
ipCidrRange: 10.0.1.0/24
region: us-central1
network: ${ilbNetwork.id}
# instance template
instanceTemplate:
type: gcp:compute:InstanceTemplate
name: instance_template
properties:
networkInterfaces:
- accessConfigs:
- {}
network: ${ilbNetwork.id}
subnetwork: ${ilbSubnet.id}
name: l7-ilb-mig-template
project: ${serviceProject.projectId}
machineType: e2-small
tags:
- http-server
disks:
- sourceImage: debian-cloud/debian-10
autoDelete: true
boot: true
metadata:
startup-script: |
#! /bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y nginx-light jq
NAME=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/hostname")
IP=$(curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip")
METADATA=$(curl -f -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True" | jq 'del(.["startup-script"])')
cat <<EOF > /var/www/html/index.html
<pre>
Name: $NAME
IP: $IP
Metadata: $METADATA
</pre>
EOF
mig:
type: gcp:compute:RegionInstanceGroupManager
properties:
name: l7-ilb-mig1
project: ${serviceProject.projectId}
region: us-central1
versions:
- instanceTemplate: ${instanceTemplate.id}
name: primary
baseInstanceName: vm
targetSize: 2
variables:
# Discovered workload
catalog-workload:
fn::invoke:
Function: gcp:apphub:getDiscoveredWorkload
Arguments:
location: us-central1
workloadUri:
fn::invoke:
Function: std:replace
Arguments:
text: ${mig.instanceGroup}
search: https://www.googleapis.com/compute/v1
replace: //compute.googleapis.com
Return: result
Create Workload Resource
Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.
Constructor syntax
new Workload(name: string, args: WorkloadArgs, opts?: CustomResourceOptions);
@overload
def Workload(resource_name: str,
args: WorkloadArgs,
opts: Optional[ResourceOptions] = None)
@overload
def Workload(resource_name: str,
opts: Optional[ResourceOptions] = None,
application_id: Optional[str] = None,
discovered_workload: Optional[str] = None,
location: Optional[str] = None,
workload_id: Optional[str] = None,
attributes: Optional[WorkloadAttributesArgs] = None,
description: Optional[str] = None,
display_name: Optional[str] = None,
project: Optional[str] = None)
func NewWorkload(ctx *Context, name string, args WorkloadArgs, opts ...ResourceOption) (*Workload, error)
public Workload(string name, WorkloadArgs args, CustomResourceOptions? opts = null)
public Workload(String name, WorkloadArgs args)
public Workload(String name, WorkloadArgs args, CustomResourceOptions options)
type: gcp:apphub:Workload
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.
Parameters
- name string
- The unique name of the resource.
- args WorkloadArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- resource_name str
- The unique name of the resource.
- args WorkloadArgs
- The arguments to resource properties.
- opts ResourceOptions
- Bag of options to control resource's behavior.
- ctx Context
- Context object for the current deployment.
- name string
- The unique name of the resource.
- args WorkloadArgs
- The arguments to resource properties.
- opts ResourceOption
- Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args WorkloadArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- name String
- The unique name of the resource.
- args WorkloadArgs
- The arguments to resource properties.
- options CustomResourceOptions
- Bag of options to control resource's behavior.
Example
The following reference example uses placeholder values for all input properties.
var workloadResource = new Gcp.Apphub.Workload("workloadResource", new()
{
ApplicationId = "string",
DiscoveredWorkload = "string",
Location = "string",
WorkloadId = "string",
Attributes = new Gcp.Apphub.Inputs.WorkloadAttributesArgs
{
BusinessOwners = new[]
{
new Gcp.Apphub.Inputs.WorkloadAttributesBusinessOwnerArgs
{
Email = "string",
DisplayName = "string",
},
},
Criticality = new Gcp.Apphub.Inputs.WorkloadAttributesCriticalityArgs
{
Type = "string",
},
DeveloperOwners = new[]
{
new Gcp.Apphub.Inputs.WorkloadAttributesDeveloperOwnerArgs
{
Email = "string",
DisplayName = "string",
},
},
Environment = new Gcp.Apphub.Inputs.WorkloadAttributesEnvironmentArgs
{
Type = "string",
},
OperatorOwners = new[]
{
new Gcp.Apphub.Inputs.WorkloadAttributesOperatorOwnerArgs
{
Email = "string",
DisplayName = "string",
},
},
},
Description = "string",
DisplayName = "string",
Project = "string",
});
example, err := apphub.NewWorkload(ctx, "workloadResource", &apphub.WorkloadArgs{
ApplicationId: pulumi.String("string"),
DiscoveredWorkload: pulumi.String("string"),
Location: pulumi.String("string"),
WorkloadId: pulumi.String("string"),
Attributes: &apphub.WorkloadAttributesArgs{
BusinessOwners: apphub.WorkloadAttributesBusinessOwnerArray{
&apphub.WorkloadAttributesBusinessOwnerArgs{
Email: pulumi.String("string"),
DisplayName: pulumi.String("string"),
},
},
Criticality: &apphub.WorkloadAttributesCriticalityArgs{
Type: pulumi.String("string"),
},
DeveloperOwners: apphub.WorkloadAttributesDeveloperOwnerArray{
&apphub.WorkloadAttributesDeveloperOwnerArgs{
Email: pulumi.String("string"),
DisplayName: pulumi.String("string"),
},
},
Environment: &apphub.WorkloadAttributesEnvironmentArgs{
Type: pulumi.String("string"),
},
OperatorOwners: apphub.WorkloadAttributesOperatorOwnerArray{
&apphub.WorkloadAttributesOperatorOwnerArgs{
Email: pulumi.String("string"),
DisplayName: pulumi.String("string"),
},
},
},
Description: pulumi.String("string"),
DisplayName: pulumi.String("string"),
Project: pulumi.String("string"),
})
var workloadResource = new Workload("workloadResource", WorkloadArgs.builder()
.applicationId("string")
.discoveredWorkload("string")
.location("string")
.workloadId("string")
.attributes(WorkloadAttributesArgs.builder()
.businessOwners(WorkloadAttributesBusinessOwnerArgs.builder()
.email("string")
.displayName("string")
.build())
.criticality(WorkloadAttributesCriticalityArgs.builder()
.type("string")
.build())
.developerOwners(WorkloadAttributesDeveloperOwnerArgs.builder()
.email("string")
.displayName("string")
.build())
.environment(WorkloadAttributesEnvironmentArgs.builder()
.type("string")
.build())
.operatorOwners(WorkloadAttributesOperatorOwnerArgs.builder()
.email("string")
.displayName("string")
.build())
.build())
.description("string")
.displayName("string")
.project("string")
.build());
workload_resource = gcp.apphub.Workload("workloadResource",
application_id="string",
discovered_workload="string",
location="string",
workload_id="string",
attributes=gcp.apphub.WorkloadAttributesArgs(
business_owners=[gcp.apphub.WorkloadAttributesBusinessOwnerArgs(
email="string",
display_name="string",
)],
criticality=gcp.apphub.WorkloadAttributesCriticalityArgs(
type="string",
),
developer_owners=[gcp.apphub.WorkloadAttributesDeveloperOwnerArgs(
email="string",
display_name="string",
)],
environment=gcp.apphub.WorkloadAttributesEnvironmentArgs(
type="string",
),
operator_owners=[gcp.apphub.WorkloadAttributesOperatorOwnerArgs(
email="string",
display_name="string",
)],
),
description="string",
display_name="string",
project="string")
const workloadResource = new gcp.apphub.Workload("workloadResource", {
applicationId: "string",
discoveredWorkload: "string",
location: "string",
workloadId: "string",
attributes: {
businessOwners: [{
email: "string",
displayName: "string",
}],
criticality: {
type: "string",
},
developerOwners: [{
email: "string",
displayName: "string",
}],
environment: {
type: "string",
},
operatorOwners: [{
email: "string",
displayName: "string",
}],
},
description: "string",
displayName: "string",
project: "string",
});
type: gcp:apphub:Workload
properties:
applicationId: string
attributes:
businessOwners:
- displayName: string
email: string
criticality:
type: string
developerOwners:
- displayName: string
email: string
environment:
type: string
operatorOwners:
- displayName: string
email: string
description: string
discoveredWorkload: string
displayName: string
location: string
project: string
workloadId: string
Workload Resource Properties
To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.
Inputs
The Workload resource accepts the following input properties:
- Application
Id string - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Discovered
Workload string - Immutable. The resource name of the original discovered workload.
- Location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Workload
Id string - The Workload identifier.
- Attributes
Workload
Attributes - Consumer provided attributes. Structure is documented below.
- Description string
- User-defined description of a Workload.
- Display
Name string - User-defined name for the Workload.
- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- Application
Id string - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Discovered
Workload string - Immutable. The resource name of the original discovered workload.
- Location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Workload
Id string - The Workload identifier.
- Attributes
Workload
Attributes Args - Consumer provided attributes. Structure is documented below.
- Description string
- User-defined description of a Workload.
- Display
Name string - User-defined name for the Workload.
- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- application
Id String - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - discovered
Workload String - Immutable. The resource name of the original discovered workload.
- location String
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - workload
Id String - The Workload identifier.
- attributes
Workload
Attributes - Consumer provided attributes. Structure is documented below.
- description String
- User-defined description of a Workload.
- display
Name String - User-defined name for the Workload.
- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- application
Id string - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - discovered
Workload string - Immutable. The resource name of the original discovered workload.
- location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - workload
Id string - The Workload identifier.
- attributes
Workload
Attributes - Consumer provided attributes. Structure is documented below.
- description string
- User-defined description of a Workload.
- display
Name string - User-defined name for the Workload.
- project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- application_
id str - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - discovered_
workload str - Immutable. The resource name of the original discovered workload.
- location str
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - workload_
id str - The Workload identifier.
- attributes
Workload
Attributes Args - Consumer provided attributes. Structure is documented below.
- description str
- User-defined description of a Workload.
- display_
name str - User-defined name for the Workload.
- project str
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- application
Id String - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - discovered
Workload String - Immutable. The resource name of the original discovered workload.
- location String
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - workload
Id String - The Workload identifier.
- attributes Property Map
- Consumer provided attributes. Structure is documented below.
- description String
- User-defined description of a Workload.
- display
Name String - User-defined name for the Workload.
- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
Outputs
All input properties are implicitly available as output properties. Additionally, the Workload resource produces the following output properties:
- Create
Time string - Output only. Create time.
- Id string
- The provider-assigned unique ID for this managed resource.
- Name string
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- State string
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- Uid string
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - Update
Time string - Output only. Update time.
- Workload
Properties List<WorkloadWorkload Property> - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- Workload
References List<WorkloadWorkload Reference> - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- Create
Time string - Output only. Create time.
- Id string
- The provider-assigned unique ID for this managed resource.
- Name string
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- State string
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- Uid string
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - Update
Time string - Output only. Update time.
- Workload
Properties []WorkloadWorkload Property - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- Workload
References []WorkloadWorkload Reference - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- create
Time String - Output only. Create time.
- id String
- The provider-assigned unique ID for this managed resource.
- name String
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- state String
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid String
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update
Time String - Output only. Update time.
- workload
Properties List<WorkloadWorkload Property> - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload
References List<WorkloadWorkload Reference> - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- create
Time string - Output only. Create time.
- id string
- The provider-assigned unique ID for this managed resource.
- name string
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- state string
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid string
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update
Time string - Output only. Update time.
- workload
Properties WorkloadWorkload Property[] - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload
References WorkloadWorkload Reference[] - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- create_
time str - Output only. Create time.
- id str
- The provider-assigned unique ID for this managed resource.
- name str
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- state str
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid str
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update_
time str - Output only. Update time.
- workload_
properties Sequence[WorkloadWorkload Property] - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload_
references Sequence[WorkloadWorkload Reference] - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- create
Time String - Output only. Create time.
- id String
- The provider-assigned unique ID for this managed resource.
- name String
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- state String
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid String
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update
Time String - Output only. Update time.
- workload
Properties List<Property Map> - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload
References List<Property Map> - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
Look up Existing Workload Resource
Get an existing Workload resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.
public static get(name: string, id: Input<ID>, state?: WorkloadState, opts?: CustomResourceOptions): Workload
@staticmethod
def get(resource_name: str,
id: str,
opts: Optional[ResourceOptions] = None,
application_id: Optional[str] = None,
attributes: Optional[WorkloadAttributesArgs] = None,
create_time: Optional[str] = None,
description: Optional[str] = None,
discovered_workload: Optional[str] = None,
display_name: Optional[str] = None,
location: Optional[str] = None,
name: Optional[str] = None,
project: Optional[str] = None,
state: Optional[str] = None,
uid: Optional[str] = None,
update_time: Optional[str] = None,
workload_id: Optional[str] = None,
workload_properties: Optional[Sequence[WorkloadWorkloadPropertyArgs]] = None,
workload_references: Optional[Sequence[WorkloadWorkloadReferenceArgs]] = None) -> Workload
func GetWorkload(ctx *Context, name string, id IDInput, state *WorkloadState, opts ...ResourceOption) (*Workload, error)
public static Workload Get(string name, Input<string> id, WorkloadState? state, CustomResourceOptions? opts = null)
public static Workload get(String name, Output<String> id, WorkloadState state, CustomResourceOptions options)
Resource lookup is not supported in YAML
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- resource_name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- Application
Id string - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Attributes
Workload
Attributes - Consumer provided attributes. Structure is documented below.
- Create
Time string - Output only. Create time.
- Description string
- User-defined description of a Workload.
- Discovered
Workload string - Immutable. The resource name of the original discovered workload.
- Display
Name string - User-defined name for the Workload.
- Location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Name string
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- State string
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- Uid string
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - Update
Time string - Output only. Update time.
- Workload
Id string - The Workload identifier.
- Workload
Properties List<WorkloadWorkload Property> - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- Workload
References List<WorkloadWorkload Reference> - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- Application
Id string - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Attributes
Workload
Attributes Args - Consumer provided attributes. Structure is documented below.
- Create
Time string - Output only. Create time.
- Description string
- User-defined description of a Workload.
- Discovered
Workload string - Immutable. The resource name of the original discovered workload.
- Display
Name string - User-defined name for the Workload.
- Location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Name string
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- State string
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- Uid string
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - Update
Time string - Output only. Update time.
- Workload
Id string - The Workload identifier.
- Workload
Properties []WorkloadWorkload Property Args - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- Workload
References []WorkloadWorkload Reference Args - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- application
Id String - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - attributes
Workload
Attributes - Consumer provided attributes. Structure is documented below.
- create
Time String - Output only. Create time.
- description String
- User-defined description of a Workload.
- discovered
Workload String - Immutable. The resource name of the original discovered workload.
- display
Name String - User-defined name for the Workload.
- location String
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - name String
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- state String
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid String
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update
Time String - Output only. Update time.
- workload
Id String - The Workload identifier.
- workload
Properties List<WorkloadWorkload Property> - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload
References List<WorkloadWorkload Reference> - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- application
Id string - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - attributes
Workload
Attributes - Consumer provided attributes. Structure is documented below.
- create
Time string - Output only. Create time.
- description string
- User-defined description of a Workload.
- discovered
Workload string - Immutable. The resource name of the original discovered workload.
- display
Name string - User-defined name for the Workload.
- location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - name string
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- state string
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid string
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update
Time string - Output only. Update time.
- workload
Id string - The Workload identifier.
- workload
Properties WorkloadWorkload Property[] - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload
References WorkloadWorkload Reference[] - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- application_
id str - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - attributes
Workload
Attributes Args - Consumer provided attributes. Structure is documented below.
- create_
time str - Output only. Create time.
- description str
- User-defined description of a Workload.
- discovered_
workload str - Immutable. The resource name of the original discovered workload.
- display_
name str - User-defined name for the Workload.
- location str
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - name str
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- project str
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- state str
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid str
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update_
time str - Output only. Update time.
- workload_
id str - The Workload identifier.
- workload_
properties Sequence[WorkloadWorkload Property Args] - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload_
references Sequence[WorkloadWorkload Reference Args] - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
- application
Id String - Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - attributes Property Map
- Consumer provided attributes. Structure is documented below.
- create
Time String - Output only. Create time.
- description String
- User-defined description of a Workload.
- discovered
Workload String - Immutable. The resource name of the original discovered workload.
- display
Name String - User-defined name for the Workload.
- location String
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - name String
- Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- state String
- Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
- uid String
- Output only. A universally unique identifier (UUID) for the
Workload
in the UUID4 format. - update
Time String - Output only. Update time.
- workload
Id String - The Workload identifier.
- workload
Properties List<Property Map> - Properties of an underlying compute resource represented by the Workload. Structure is documented below.
- workload
References List<Property Map> - Reference of an underlying compute resource represented by the Workload. Structure is documented below.
Supporting Types
WorkloadAttributes, WorkloadAttributesArgs
- Business
Owners List<WorkloadAttributes Business Owner> - Business team that ensures user needs are met and value is delivered Structure is documented below.
- Criticality
Workload
Attributes Criticality - Criticality of the Application, Service, or Workload Structure is documented below.
- Developer
Owners List<WorkloadAttributes Developer Owner> - Developer team that owns development and coding. Structure is documented below.
- Environment
Workload
Attributes Environment - Environment of the Application, Service, or Workload Structure is documented below.
- Operator
Owners List<WorkloadAttributes Operator Owner> - Operator team that ensures runtime and operations. Structure is documented below.
- Business
Owners []WorkloadAttributes Business Owner - Business team that ensures user needs are met and value is delivered Structure is documented below.
- Criticality
Workload
Attributes Criticality - Criticality of the Application, Service, or Workload Structure is documented below.
- Developer
Owners []WorkloadAttributes Developer Owner - Developer team that owns development and coding. Structure is documented below.
- Environment
Workload
Attributes Environment - Environment of the Application, Service, or Workload Structure is documented below.
- Operator
Owners []WorkloadAttributes Operator Owner - Operator team that ensures runtime and operations. Structure is documented below.
- business
Owners List<WorkloadAttributes Business Owner> - Business team that ensures user needs are met and value is delivered Structure is documented below.
- criticality
Workload
Attributes Criticality - Criticality of the Application, Service, or Workload Structure is documented below.
- developer
Owners List<WorkloadAttributes Developer Owner> - Developer team that owns development and coding. Structure is documented below.
- environment
Workload
Attributes Environment - Environment of the Application, Service, or Workload Structure is documented below.
- operator
Owners List<WorkloadAttributes Operator Owner> - Operator team that ensures runtime and operations. Structure is documented below.
- business
Owners WorkloadAttributes Business Owner[] - Business team that ensures user needs are met and value is delivered Structure is documented below.
- criticality
Workload
Attributes Criticality - Criticality of the Application, Service, or Workload Structure is documented below.
- developer
Owners WorkloadAttributes Developer Owner[] - Developer team that owns development and coding. Structure is documented below.
- environment
Workload
Attributes Environment - Environment of the Application, Service, or Workload Structure is documented below.
- operator
Owners WorkloadAttributes Operator Owner[] - Operator team that ensures runtime and operations. Structure is documented below.
- business_
owners Sequence[WorkloadAttributes Business Owner] - Business team that ensures user needs are met and value is delivered Structure is documented below.
- criticality
Workload
Attributes Criticality - Criticality of the Application, Service, or Workload Structure is documented below.
- developer_
owners Sequence[WorkloadAttributes Developer Owner] - Developer team that owns development and coding. Structure is documented below.
- environment
Workload
Attributes Environment - Environment of the Application, Service, or Workload Structure is documented below.
- operator_
owners Sequence[WorkloadAttributes Operator Owner] - Operator team that ensures runtime and operations. Structure is documented below.
- business
Owners List<Property Map> - Business team that ensures user needs are met and value is delivered Structure is documented below.
- criticality Property Map
- Criticality of the Application, Service, or Workload Structure is documented below.
- developer
Owners List<Property Map> - Developer team that owns development and coding. Structure is documented below.
- environment Property Map
- Environment of the Application, Service, or Workload Structure is documented below.
- operator
Owners List<Property Map> - Operator team that ensures runtime and operations. Structure is documented below.
WorkloadAttributesBusinessOwner, WorkloadAttributesBusinessOwnerArgs
- Email string
- Email address of the contacts.
- Display
Name string - Contact's name.
- Email string
- Email address of the contacts.
- Display
Name string - Contact's name.
- email String
- Email address of the contacts.
- display
Name String - Contact's name.
- email string
- Email address of the contacts.
- display
Name string - Contact's name.
- email str
- Email address of the contacts.
- display_
name str - Contact's name.
- email String
- Email address of the contacts.
- display
Name String - Contact's name.
WorkloadAttributesCriticality, WorkloadAttributesCriticalityArgs
- Type string
- Criticality type.
Possible values are:
MISSION_CRITICAL
,HIGH
,MEDIUM
,LOW
.
- Type string
- Criticality type.
Possible values are:
MISSION_CRITICAL
,HIGH
,MEDIUM
,LOW
.
- type String
- Criticality type.
Possible values are:
MISSION_CRITICAL
,HIGH
,MEDIUM
,LOW
.
- type string
- Criticality type.
Possible values are:
MISSION_CRITICAL
,HIGH
,MEDIUM
,LOW
.
- type str
- Criticality type.
Possible values are:
MISSION_CRITICAL
,HIGH
,MEDIUM
,LOW
.
- type String
- Criticality type.
Possible values are:
MISSION_CRITICAL
,HIGH
,MEDIUM
,LOW
.
WorkloadAttributesDeveloperOwner, WorkloadAttributesDeveloperOwnerArgs
- Email string
- Email address of the contacts.
- Display
Name string - Contact's name.
- Email string
- Email address of the contacts.
- Display
Name string - Contact's name.
- email String
- Email address of the contacts.
- display
Name String - Contact's name.
- email string
- Email address of the contacts.
- display
Name string - Contact's name.
- email str
- Email address of the contacts.
- display_
name str - Contact's name.
- email String
- Email address of the contacts.
- display
Name String - Contact's name.
WorkloadAttributesEnvironment, WorkloadAttributesEnvironmentArgs
- Type string
- Environment type.
Possible values are:
PRODUCTION
,STAGING
,TEST
,DEVELOPMENT
.
- Type string
- Environment type.
Possible values are:
PRODUCTION
,STAGING
,TEST
,DEVELOPMENT
.
- type String
- Environment type.
Possible values are:
PRODUCTION
,STAGING
,TEST
,DEVELOPMENT
.
- type string
- Environment type.
Possible values are:
PRODUCTION
,STAGING
,TEST
,DEVELOPMENT
.
- type str
- Environment type.
Possible values are:
PRODUCTION
,STAGING
,TEST
,DEVELOPMENT
.
- type String
- Environment type.
Possible values are:
PRODUCTION
,STAGING
,TEST
,DEVELOPMENT
.
WorkloadAttributesOperatorOwner, WorkloadAttributesOperatorOwnerArgs
- Email string
- Email address of the contacts.
- Display
Name string - Contact's name.
- Email string
- Email address of the contacts.
- Display
Name string - Contact's name.
- email String
- Email address of the contacts.
- display
Name String - Contact's name.
- email string
- Email address of the contacts.
- display
Name string - Contact's name.
- email str
- Email address of the contacts.
- display_
name str - Contact's name.
- email String
- Email address of the contacts.
- display
Name String - Contact's name.
WorkloadWorkloadProperty, WorkloadWorkloadPropertyArgs
- Gcp
Project string - (Output) Output only. The service project identifier that the underlying cloud resource resides in. Empty for non cloud resources.
- Location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Zone string
- (Output) Output only. The location that the underlying compute resource resides in if it is zonal (e.g us-west1-a).
- Gcp
Project string - (Output) Output only. The service project identifier that the underlying cloud resource resides in. Empty for non cloud resources.
- Location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - Zone string
- (Output) Output only. The location that the underlying compute resource resides in if it is zonal (e.g us-west1-a).
- gcp
Project String - (Output) Output only. The service project identifier that the underlying cloud resource resides in. Empty for non cloud resources.
- location String
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - zone String
- (Output) Output only. The location that the underlying compute resource resides in if it is zonal (e.g us-west1-a).
- gcp
Project string - (Output) Output only. The service project identifier that the underlying cloud resource resides in. Empty for non cloud resources.
- location string
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - zone string
- (Output) Output only. The location that the underlying compute resource resides in if it is zonal (e.g us-west1-a).
- gcp_
project str - (Output) Output only. The service project identifier that the underlying cloud resource resides in. Empty for non cloud resources.
- location str
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - zone str
- (Output) Output only. The location that the underlying compute resource resides in if it is zonal (e.g us-west1-a).
- gcp
Project String - (Output) Output only. The service project identifier that the underlying cloud resource resides in. Empty for non cloud resources.
- location String
- Part of
parent
. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID} - zone String
- (Output) Output only. The location that the underlying compute resource resides in if it is zonal (e.g us-west1-a).
WorkloadWorkloadReference, WorkloadWorkloadReferenceArgs
- Uri string
- (Output) Output only. The underlying compute resource uri.
- Uri string
- (Output) Output only. The underlying compute resource uri.
- uri String
- (Output) Output only. The underlying compute resource uri.
- uri string
- (Output) Output only. The underlying compute resource uri.
- uri str
- (Output) Output only. The underlying compute resource uri.
- uri String
- (Output) Output only. The underlying compute resource uri.
Import
Workload can be imported using any of these accepted formats:
projects/{{project}}/locations/{{location}}/applications/{{application_id}}/workloads/{{workload_id}}
{{project}}/{{location}}/{{application_id}}/{{workload_id}}
{{location}}/{{application_id}}/{{workload_id}}
When using the pulumi import
command, Workload can be imported using one of the formats above. For example:
$ pulumi import gcp:apphub/workload:Workload default projects/{{project}}/locations/{{location}}/applications/{{application_id}}/workloads/{{workload_id}}
$ pulumi import gcp:apphub/workload:Workload default {{project}}/{{location}}/{{application_id}}/{{workload_id}}
$ pulumi import gcp:apphub/workload:Workload default {{location}}/{{application_id}}/{{workload_id}}
To learn more about importing existing cloud resources, see Importing resources.
Package Details
- Repository
- Google Cloud (GCP) Classic pulumi/pulumi-gcp
- License
- Apache-2.0
- Notes
- This Pulumi package is based on the
google-beta
Terraform Provider.