blob: 3351c66f3dbe1c5bd13e806ff4f126492bd626b0 [file] [log] [blame] [edit]
---
# ----------------------------------------------------------------------------
#
# *** AUTO GENERATED CODE *** Type: MMv1 ***
#
# ----------------------------------------------------------------------------
#
# This file is automatically generated by Magic Modules and manual
# changes will be clobbered when the file is regenerated.
#
# Please read more about how to change this file in
# .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "App Hub"
description: |-
Workload represents a binary deployment (such as Managed Instance Groups (MIGs), GKE deployments, etc.
---
# google_apphub_workload
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
```hcl
resource "google_apphub_application" "application" {
location = "us-central1"
application_id = "example-application-1"
scope {
type = "REGIONAL"
}
}
resource "google_project" "service_project" {
project_id ="project-1"
name = "Service Project"
org_id = "123456789"
billing_account = "000000-0000000-0000000-000000"
deletion_policy = "DELETE"
}
# Enable Compute API
resource "google_project_service" "compute_service_project" {
project = google_project.service_project.project_id
service = "compute.googleapis.com"
}
resource "time_sleep" "wait_120s" {
depends_on = [google_project_service.compute_service_project]
create_duration = "120s"
}
resource "google_apphub_service_project_attachment" "service_project_attachment" {
service_project_attachment_id = google_project.service_project.project_id
depends_on = [time_sleep.wait_120s]
}
# Discovered workload
data "google_apphub_discovered_workload" "catalog-workload" {
location = "us-central1"
workload_uri = "${replace(google_compute_region_instance_group_manager.mig.instance_group, "https://www.googleapis.com/compute/v1", "//compute.googleapis.com")}"
depends_on = [time_sleep.wait_120s_for_resource_ingestion]
}
resource "time_sleep" "wait_120s_for_resource_ingestion" {
depends_on = [google_compute_region_instance_group_manager.mig]
create_duration = "120s"
}
resource "google_apphub_workload" "example" {
location = "us-central1"
application_id = google_apphub_application.application.application_id
workload_id = google_compute_region_instance_group_manager.mig.name
discovered_workload = data.google_apphub_discovered_workload.catalog-workload.name
}
#Workload creation
# VPC network
resource "google_compute_network" "ilb_network" {
name = "l7-ilb-network"
project = google_project.service_project.project_id
auto_create_subnetworks = false
depends_on = [time_sleep.wait_120s]
}
# backend subnet
resource "google_compute_subnetwork" "ilb_subnet" {
name = "l7-ilb-subnet"
project = google_project.service_project.project_id
ip_cidr_range = "10.0.1.0/24"
region = "us-central1"
network = google_compute_network.ilb_network.id
}
# instance template
resource "google_compute_instance_template" "instance_template" {
name = "l7-ilb-mig-template"
project = google_project.service_project.project_id
machine_type = "e2-small"
tags = ["http-server"]
network_interface {
network = google_compute_network.ilb_network.id
subnetwork = google_compute_subnetwork.ilb_subnet.id
access_config {
# add external ip to fetch packages
}
}
disk {
source_image = "debian-cloud/debian-12"
auto_delete = true
boot = true
}
# install nginx and serve a simple web page
metadata = {
startup-script = <<-EOF1
#! /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
EOF1
}
lifecycle {
create_before_destroy = true
}
}
resource "google_compute_region_instance_group_manager" "mig" {
name = "l7-ilb-mig1"
project = google_project.service_project.project_id
region = "us-central1"
version {
instance_template = google_compute_instance_template.instance_template.id
name = "primary"
}
base_instance_name = "vm"
target_size = 2
}
```
## Example Usage - Apphub Workload Full
```hcl
resource "google_apphub_application" "application" {
location = "us-central1"
application_id = "example-application-1"
scope {
type = "REGIONAL"
}
}
resource "google_project" "service_project" {
project_id ="project-1"
name = "Service Project"
org_id = "123456789"
billing_account = "000000-0000000-0000000-000000"
deletion_policy = "DELETE"
}
# Enable Compute API
resource "google_project_service" "compute_service_project" {
project = google_project.service_project.project_id
service = "compute.googleapis.com"
}
resource "time_sleep" "wait_120s" {
depends_on = [google_project_service.compute_service_project]
create_duration = "120s"
}
resource "google_apphub_service_project_attachment" "service_project_attachment" {
service_project_attachment_id = google_project.service_project.project_id
depends_on = [time_sleep.wait_120s]
}
# Discovered workload
data "google_apphub_discovered_workload" "catalog-workload" {
location = "us-central1"
workload_uri = "${replace(google_compute_region_instance_group_manager.mig.instance_group, "https://www.googleapis.com/compute/v1", "//compute.googleapis.com")}"
depends_on = [time_sleep.wait_120s_for_resource_ingestion]
}
resource "time_sleep" "wait_120s_for_resource_ingestion" {
depends_on = [google_compute_region_instance_group_manager.mig]
create_duration = "120s"
}
resource "google_apphub_workload" "example" {
location = "us-central1"
application_id = google_apphub_application.application.application_id
workload_id = google_compute_region_instance_group_manager.mig.name
discovered_workload = data.google_apphub_discovered_workload.catalog-workload.name
display_name = "Example Service Full"
description = "Register service for testing"
attributes {
environment {
type = "STAGING"
}
criticality {
type = "MISSION_CRITICAL"
}
business_owners {
display_name = "Alice"
email = "alice@google.com"
}
developer_owners {
display_name = "Bob"
email = "bob@google.com"
}
operator_owners {
display_name = "Charlie"
email = "charlie@google.com"
}
}
}
#Workload creation
# VPC network
resource "google_compute_network" "ilb_network" {
name = "l7-ilb-network"
project = google_project.service_project.project_id
auto_create_subnetworks = false
depends_on = [time_sleep.wait_120s]
}
# backend subnet
resource "google_compute_subnetwork" "ilb_subnet" {
name = "l7-ilb-subnet"
project = google_project.service_project.project_id
ip_cidr_range = "10.0.1.0/24"
region = "us-central1"
network = google_compute_network.ilb_network.id
}
# instance template
resource "google_compute_instance_template" "instance_template" {
name = "l7-ilb-mig-template"
project = google_project.service_project.project_id
machine_type = "e2-small"
tags = ["http-server"]
network_interface {
network = google_compute_network.ilb_network.id
subnetwork = google_compute_subnetwork.ilb_subnet.id
access_config {
# add external ip to fetch packages
}
}
disk {
source_image = "debian-cloud/debian-12"
auto_delete = true
boot = true
}
# install nginx and serve a simple web page
metadata = {
startup-script = <<-EOF1
#! /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
EOF1
}
lifecycle {
create_before_destroy = true
}
}
resource "google_compute_region_instance_group_manager" "mig" {
name = "l7-ilb-mig1"
project = google_project.service_project.project_id
region = "us-central1"
version {
instance_template = google_compute_instance_template.instance_template.id
name = "primary"
}
base_instance_name = "vm"
target_size = 2
}
```
## Argument Reference
The following arguments are supported:
* `discovered_workload` -
(Required)
Immutable. The resource name of the original discovered workload.
* `location` -
(Required)
Part of `parent`. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID}
* `application_id` -
(Required)
Part of `parent`. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID}
* `workload_id` -
(Required)
The Workload identifier.
- - -
* `display_name` -
(Optional)
User-defined name for the Workload.
* `description` -
(Optional)
User-defined description of a Workload.
* `attributes` -
(Optional)
Consumer provided attributes.
Structure is [documented below](#nested_attributes).
* `project` - (Optional) The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
<a name="nested_attributes"></a>The `attributes` block supports:
* `criticality` -
(Optional)
Criticality of the Application, Service, or Workload
Structure is [documented below](#nested_criticality).
* `environment` -
(Optional)
Environment of the Application, Service, or Workload
Structure is [documented below](#nested_environment).
* `developer_owners` -
(Optional)
Developer team that owns development and coding.
Structure is [documented below](#nested_developer_owners).
* `operator_owners` -
(Optional)
Operator team that ensures runtime and operations.
Structure is [documented below](#nested_operator_owners).
* `business_owners` -
(Optional)
Business team that ensures user needs are met and value is delivered
Structure is [documented below](#nested_business_owners).
<a name="nested_criticality"></a>The `criticality` block supports:
* `type` -
(Required)
Criticality type.
Possible values are: `MISSION_CRITICAL`, `HIGH`, `MEDIUM`, `LOW`.
<a name="nested_environment"></a>The `environment` block supports:
* `type` -
(Required)
Environment type.
Possible values are: `PRODUCTION`, `STAGING`, `TEST`, `DEVELOPMENT`.
<a name="nested_developer_owners"></a>The `developer_owners` block supports:
* `display_name` -
(Optional)
Contact's name.
* `email` -
(Required)
Email address of the contacts.
<a name="nested_operator_owners"></a>The `operator_owners` block supports:
* `display_name` -
(Optional)
Contact's name.
* `email` -
(Required)
Email address of the contacts.
<a name="nested_business_owners"></a>The `business_owners` block supports:
* `display_name` -
(Optional)
Contact's name.
* `email` -
(Required)
Email address of the contacts.
## Attributes Reference
In addition to the arguments listed above, the following computed attributes are exported:
* `id` - an identifier for the resource with format `projects/{{project}}/locations/{{location}}/applications/{{application_id}}/workloads/{{workload_id}}`
* `name` -
Identifier. The resource name of the Workload. Format:"projects/{host-project-id}/locations/{location}/applications/{application-id}/workloads/{workload-id}"
* `workload_reference` -
Reference of an underlying compute resource represented by the Workload.
Structure is [documented below](#nested_workload_reference).
* `workload_properties` -
Properties of an underlying compute resource represented by the Workload.
Structure is [documented below](#nested_workload_properties).
* `create_time` -
Output only. Create time.
* `update_time` -
Output only. Update time.
* `uid` -
Output only. A universally unique identifier (UUID) for the `Workload` in the UUID4 format.
* `state` -
Output only. Workload state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
<a name="nested_workload_reference"></a>The `workload_reference` block contains:
* `uri` -
(Output)
Output only. The underlying compute resource uri.
<a name="nested_workload_properties"></a>The `workload_properties` block contains:
* `gcp_project` -
(Output)
Output only. The service project identifier that the underlying cloud resource resides in. Empty for non cloud resources.
* `location` -
(Output)
Output only. The location that the underlying compute resource resides in (e.g us-west1).
* `zone` -
(Output)
Output only. The location that the underlying compute resource resides in if it is zonal (e.g us-west1-a).
## Timeouts
This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:
- `create` - Default is 20 minutes.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.
## 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}}`
In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Workload using one of the formats above. For example:
```tf
import {
id = "projects/{{project}}/locations/{{location}}/applications/{{application_id}}/workloads/{{workload_id}}"
to = google_apphub_workload.default
}
```
When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Workload can be imported using one of the formats above. For example:
```
$ terraform import google_apphub_workload.default projects/{{project}}/locations/{{location}}/applications/{{application_id}}/workloads/{{workload_id}}
$ terraform import google_apphub_workload.default {{project}}/{{location}}/{{application_id}}/{{workload_id}}
$ terraform import google_apphub_workload.default {{location}}/{{application_id}}/{{workload_id}}
```
## User Project Overrides
This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).