Reservation class
Represents a reservation resource. A reservation ensures that capacity is held in a specific zone even if the reserved VMs are not running.
Reservations apply only to Compute Engine, Cloud Dataproc, and Google
Kubernetes Engine VM usage.Reservations do not apply to f1-micro or
g1-small machine types, preemptible VMs, sole tenant nodes, or other
services not listed above
like Cloud SQL and Dataflow.
To get more information about Reservation, see:
- API documentation
- How-to Guides
- Reserving zonal resources
Example Usage
Reservation Basic
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const gceReservation = new gcp.compute.Reservation("gce_reservation", {
name: "gce-reservation",
zone: "us-central1-a",
specificReservation: {
count: 1,
instanceProperties: {
minCpuPlatform: "Intel Cascade Lake",
machineType: "n2-standard-2",
},
},
});
import pulumi
import pulumi_gcp as gcp
gce_reservation = gcp.compute.Reservation("gce_reservation",
name="gce-reservation",
zone="us-central1-a",
specific_reservation={
"count": 1,
"instance_properties": {
"min_cpu_platform": "Intel Cascade Lake",
"machine_type": "n2-standard-2",
},
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var gceReservation = new Gcp.Compute.Reservation("gce_reservation", new()
{
Name = "gce-reservation",
Zone = "us-central1-a",
SpecificReservation = new Gcp.Compute.Inputs.ReservationSpecificReservationArgs
{
Count = 1,
InstanceProperties = new Gcp.Compute.Inputs.ReservationSpecificReservationInstancePropertiesArgs
{
MinCpuPlatform = "Intel Cascade Lake",
MachineType = "n2-standard-2",
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := compute.NewReservation(ctx, "gce_reservation", &compute.ReservationArgs{
Name: pulumi.String("gce-reservation"),
Zone: pulumi.String("us-central1-a"),
SpecificReservation: &compute.ReservationSpecificReservationArgs{
Count: pulumi.Int(1),
InstanceProperties: &compute.ReservationSpecificReservationInstancePropertiesArgs{
MinCpuPlatform: pulumi.String("Intel Cascade Lake"),
MachineType: pulumi.String("n2-standard-2"),
},
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_reservation" "gce_reservation" {
name = "gce-reservation"
zone = "us-central1-a"
specific_reservation = {
count = 1
instance_properties = {
min_cpu_platform = "Intel Cascade Lake"
machine_type = "n2-standard-2"
}
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Reservation;
import com.pulumi.gcp.compute.ReservationArgs;
import com.pulumi.gcp.compute.inputs.ReservationSpecificReservationArgs;
import com.pulumi.gcp.compute.inputs.ReservationSpecificReservationInstancePropertiesArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var gceReservation = new Reservation("gceReservation", ReservationArgs.builder()
.name("gce-reservation")
.zone("us-central1-a")
.specificReservation(ReservationSpecificReservationArgs.builder()
.count(1)
.instanceProperties(ReservationSpecificReservationInstancePropertiesArgs.builder()
.minCpuPlatform("Intel Cascade Lake")
.machineType("n2-standard-2")
.build())
.build())
.build());
}
}
resources:
gceReservation:
type: gcp:compute:Reservation
name: gce_reservation
properties:
name: gce-reservation
zone: us-central1-a
specificReservation:
count: 1
instanceProperties:
minCpuPlatform: Intel Cascade Lake
machineType: n2-standard-2
Reservation Basic Beta
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const gceReservation = new gcp.compute.Reservation("gce_reservation", {
name: "gce-reservation",
zone: "us-central1-a",
specificReservation: {
count: 1,
instanceProperties: {
minCpuPlatform: "Intel Cascade Lake",
machineType: "n2-standard-2",
maintenanceInterval: "PERIODIC",
},
},
enableEmergentMaintenance: true,
});
import pulumi
import pulumi_gcp as gcp
gce_reservation = gcp.compute.Reservation("gce_reservation",
name="gce-reservation",
zone="us-central1-a",
specific_reservation={
"count": 1,
"instance_properties": {
"min_cpu_platform": "Intel Cascade Lake",
"machine_type": "n2-standard-2",
"maintenance_interval": "PERIODIC",
},
},
enable_emergent_maintenance=True)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var gceReservation = new Gcp.Compute.Reservation("gce_reservation", new()
{
Name = "gce-reservation",
Zone = "us-central1-a",
SpecificReservation = new Gcp.Compute.Inputs.ReservationSpecificReservationArgs
{
Count = 1,
InstanceProperties = new Gcp.Compute.Inputs.ReservationSpecificReservationInstancePropertiesArgs
{
MinCpuPlatform = "Intel Cascade Lake",
MachineType = "n2-standard-2",
MaintenanceInterval = "PERIODIC",
},
},
EnableEmergentMaintenance = true,
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := compute.NewReservation(ctx, "gce_reservation", &compute.ReservationArgs{
Name: pulumi.String("gce-reservation"),
Zone: pulumi.String("us-central1-a"),
SpecificReservation: &compute.ReservationSpecificReservationArgs{
Count: pulumi.Int(1),
InstanceProperties: &compute.ReservationSpecificReservationInstancePropertiesArgs{
MinCpuPlatform: pulumi.String("Intel Cascade Lake"),
MachineType: pulumi.String("n2-standard-2"),
MaintenanceInterval: pulumi.String("PERIODIC"),
},
},
EnableEmergentMaintenance: pulumi.Bool(true),
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_reservation" "gce_reservation" {
name = "gce-reservation"
zone = "us-central1-a"
specific_reservation = {
count = 1
instance_properties = {
min_cpu_platform = "Intel Cascade Lake"
machine_type = "n2-standard-2"
maintenance_interval = "PERIODIC"
}
}
enable_emergent_maintenance = true
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Reservation;
import com.pulumi.gcp.compute.ReservationArgs;
import com.pulumi.gcp.compute.inputs.ReservationSpecificReservationArgs;
import com.pulumi.gcp.compute.inputs.ReservationSpecificReservationInstancePropertiesArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var gceReservation = new Reservation("gceReservation", ReservationArgs.builder()
.name("gce-reservation")
.zone("us-central1-a")
.specificReservation(ReservationSpecificReservationArgs.builder()
.count(1)
.instanceProperties(ReservationSpecificReservationInstancePropertiesArgs.builder()
.minCpuPlatform("Intel Cascade Lake")
.machineType("n2-standard-2")
.maintenanceInterval("PERIODIC")
.build())
.build())
.enableEmergentMaintenance(true)
.build());
}
}
resources:
gceReservation:
type: gcp:compute:Reservation
name: gce_reservation
properties:
name: gce-reservation
zone: us-central1-a
specificReservation:
count: 1
instanceProperties:
minCpuPlatform: Intel Cascade Lake
machineType: n2-standard-2
maintenanceInterval: PERIODIC
enableEmergentMaintenance: true
Reservation Source Instance Template
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const myImage = gcp.compute.getImage({
family: "debian-11",
project: "debian-cloud",
});
const foobar = new gcp.compute.InstanceTemplate("foobar", {
name: "instance-template",
machineType: "n2-standard-2",
canIpForward: false,
tags: [
"foo",
"bar",
],
disks: [{
sourceImage: myImage.then(myImage => myImage.selfLink),
autoDelete: true,
boot: true,
}],
networkInterfaces: [{
network: "default",
}],
scheduling: {
preemptible: false,
automaticRestart: true,
},
metadata: {
foo: "bar",
},
serviceAccount: {
scopes: [
"userinfo-email",
"compute-ro",
"storage-ro",
],
},
labels: {
my_label: "foobar",
},
});
const gceReservationSourceInstanceTemplate = new gcp.compute.Reservation("gce_reservation_source_instance_template", {
name: "gce-reservation-source-instance-template",
zone: "us-central1-a",
specificReservation: {
count: 1,
sourceInstanceTemplate: foobar.selfLink,
},
});
import pulumi
import pulumi_gcp as gcp
my_image = gcp.compute.get_image(family="debian-11",
project="debian-cloud")
foobar = gcp.compute.InstanceTemplate("foobar",
name="instance-template",
machine_type="n2-standard-2",
can_ip_forward=False,
tags=[
"foo",
"bar",
],
disks=[{
"source_image": my_image.self_link,
"auto_delete": True,
"boot": True,
}],
network_interfaces=[{
"network": "default",
}],
scheduling={
"preemptible": False,
"automatic_restart": True,
},
metadata={
"foo": "bar",
},
service_account={
"scopes": [
"userinfo-email",
"compute-ro",
"storage-ro",
],
},
labels={
"my_label": "foobar",
})
gce_reservation_source_instance_template = gcp.compute.Reservation("gce_reservation_source_instance_template",
name="gce-reservation-source-instance-template",
zone="us-central1-a",
specific_reservation={
"count": 1,
"source_instance_template": foobar.self_link,
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var myImage = Gcp.Compute.GetImage.Invoke(new()
{
Family = "debian-11",
Project = "debian-cloud",
});
var foobar = new Gcp.Compute.InstanceTemplate("foobar", new()
{
Name = "instance-template",
MachineType = "n2-standard-2",
CanIpForward = false,
Tags = new[]
{
"foo",
"bar",
},
Disks = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateDiskArgs
{
SourceImage = myImage.Apply(getImageResult => getImageResult.SelfLink),
AutoDelete = true,
Boot = true,
},
},
NetworkInterfaces = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs
{
Network = "default",
},
},
Scheduling = new Gcp.Compute.Inputs.InstanceTemplateSchedulingArgs
{
Preemptible = false,
AutomaticRestart = true,
},
Metadata =
{
{ "foo", "bar" },
},
ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs
{
Scopes = new[]
{
"userinfo-email",
"compute-ro",
"storage-ro",
},
},
Labels =
{
{ "my_label", "foobar" },
},
});
var gceReservationSourceInstanceTemplate = new Gcp.Compute.Reservation("gce_reservation_source_instance_template", new()
{
Name = "gce-reservation-source-instance-template",
Zone = "us-central1-a",
SpecificReservation = new Gcp.Compute.Inputs.ReservationSpecificReservationArgs
{
Count = 1,
SourceInstanceTemplate = foobar.SelfLink,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
myImage, err := compute.LookupImage(ctx, &compute.LookupImageArgs{
Family: pulumi.StringRef("debian-11"),
Project: pulumi.StringRef("debian-cloud"),
}, nil)
if err != nil {
return err
}
foobar, err := compute.NewInstanceTemplate(ctx, "foobar", &compute.InstanceTemplateArgs{
Name: pulumi.String("instance-template"),
MachineType: pulumi.String("n2-standard-2"),
CanIpForward: pulumi.Bool(false),
Tags: pulumi.StringArray{
pulumi.String("foo"),
pulumi.String("bar"),
},
Disks: compute.InstanceTemplateDiskArray{
&compute.InstanceTemplateDiskArgs{
SourceImage: pulumi.String(myImage.SelfLink),
AutoDelete: pulumi.Bool(true),
Boot: pulumi.Bool(true),
},
},
NetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{
&compute.InstanceTemplateNetworkInterfaceArgs{
Network: pulumi.String("default"),
},
},
Scheduling: &compute.InstanceTemplateSchedulingArgs{
Preemptible: pulumi.Bool(false),
AutomaticRestart: pulumi.Bool(true),
},
Metadata: pulumi.StringMap{
"foo": pulumi.String("bar"),
},
ServiceAccount: &compute.InstanceTemplateServiceAccountArgs{
Scopes: pulumi.StringArray{
pulumi.String("userinfo-email"),
pulumi.String("compute-ro"),
pulumi.String("storage-ro"),
},
},
Labels: pulumi.StringMap{
"my_label": pulumi.String("foobar"),
},
})
if err != nil {
return err
}
_, err = compute.NewReservation(ctx, "gce_reservation_source_instance_template", &compute.ReservationArgs{
Name: pulumi.String("gce-reservation-source-instance-template"),
Zone: pulumi.String("us-central1-a"),
SpecificReservation: &compute.ReservationSpecificReservationArgs{
Count: pulumi.Int(1),
SourceInstanceTemplate: foobar.SelfLink,
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
data "gcp_compute_getimage" "myImage" {
family = "debian-11"
project = "debian-cloud"
}
resource "gcp_compute_instancetemplate" "foobar" {
name = "instance-template"
machine_type = "n2-standard-2"
can_ip_forward = false
tags = ["foo", "bar"]
disks {
source_image = data.gcp_compute_getimage.myImage.self_link
auto_delete = true
boot = true
}
network_interfaces {
network = "default"
}
scheduling = {
preemptible = false
automatic_restart = true
}
metadata = {
"foo" = "bar"
}
service_account = {
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
}
labels = {
"my_label" = "foobar"
}
}
resource "gcp_compute_reservation" "gce_reservation_source_instance_template" {
name = "gce-reservation-source-instance-template"
zone = "us-central1-a"
specific_reservation = {
count = 1
source_instance_template = gcp_compute_instancetemplate.foobar.self_link
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.ComputeFunctions;
import com.pulumi.gcp.compute.inputs.GetImageArgs;
import com.pulumi.gcp.compute.InstanceTemplate;
import com.pulumi.gcp.compute.InstanceTemplateArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateSchedulingArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs;
import com.pulumi.gcp.compute.Reservation;
import com.pulumi.gcp.compute.ReservationArgs;
import com.pulumi.gcp.compute.inputs.ReservationSpecificReservationArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()
.family("debian-11")
.project("debian-cloud")
.build());
var foobar = new InstanceTemplate("foobar", InstanceTemplateArgs.builder()
.name("instance-template")
.machineType("n2-standard-2")
.canIpForward(false)
.tags(
"foo",
"bar")
.disks(InstanceTemplateDiskArgs.builder()
.sourceImage(myImage.selfLink())
.autoDelete(true)
.boot(true)
.build())
.networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()
.network("default")
.build())
.scheduling(InstanceTemplateSchedulingArgs.builder()
.preemptible(false)
.automaticRestart(true)
.build())
.metadata(Map.of("foo", "bar"))
.serviceAccount(InstanceTemplateServiceAccountArgs.builder()
.scopes(
"userinfo-email",
"compute-ro",
"storage-ro")
.build())
.labels(Map.of("my_label", "foobar"))
.build());
var gceReservationSourceInstanceTemplate = new Reservation("gceReservationSourceInstanceTemplate", ReservationArgs.builder()
.name("gce-reservation-source-instance-template")
.zone("us-central1-a")
.specificReservation(ReservationSpecificReservationArgs.builder()
.count(1)
.sourceInstanceTemplate(foobar.selfLink())
.build())
.build());
}
}
resources:
foobar:
type: gcp:compute:InstanceTemplate
properties:
name: instance-template
machineType: n2-standard-2
canIpForward: false
tags:
- foo
- bar
disks:
- sourceImage: ${myImage.selfLink}
autoDelete: true
boot: true
networkInterfaces:
- network: default
scheduling:
preemptible: false
automaticRestart: true
metadata:
foo: bar
serviceAccount:
scopes:
- userinfo-email
- compute-ro
- storage-ro
labels:
my_label: foobar
gceReservationSourceInstanceTemplate:
type: gcp:compute:Reservation
name: gce_reservation_source_instance_template
properties:
name: gce-reservation-source-instance-template
zone: us-central1-a
specificReservation:
count: 1
sourceInstanceTemplate: ${foobar.selfLink}
variables:
myImage:
fn::invoke:
function: gcp:compute:getImage
arguments:
family: debian-11
project: debian-cloud
Reservation Sharing Policy
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const myImage = gcp.compute.getImage({
family: "debian-11",
project: "debian-cloud",
});
const foobar = new gcp.compute.InstanceTemplate("foobar", {
name: "instance-template",
machineType: "g2-standard-4",
canIpForward: false,
tags: [
"foo",
"bar",
],
disks: [{
sourceImage: myImage.then(myImage => myImage.selfLink),
autoDelete: true,
boot: true,
}],
networkInterfaces: [{
network: "default",
}],
scheduling: {
preemptible: false,
automaticRestart: true,
},
metadata: {
foo: "bar",
},
serviceAccount: {
scopes: [
"userinfo-email",
"compute-ro",
"storage-ro",
],
},
labels: {
my_label: "foobar",
},
});
const gceReservationSharingPolicy = new gcp.compute.Reservation("gce_reservation_sharing_policy", {
name: "gce-reservation-sharing-policy",
zone: "us-central1-b",
specificReservation: {
count: 2,
sourceInstanceTemplate: foobar.selfLink,
},
reservationSharingPolicy: {
serviceShareType: "ALLOW_ALL",
},
});
import pulumi
import pulumi_gcp as gcp
my_image = gcp.compute.get_image(family="debian-11",
project="debian-cloud")
foobar = gcp.compute.InstanceTemplate("foobar",
name="instance-template",
machine_type="g2-standard-4",
can_ip_forward=False,
tags=[
"foo",
"bar",
],
disks=[{
"source_image": my_image.self_link,
"auto_delete": True,
"boot": True,
}],
network_interfaces=[{
"network": "default",
}],
scheduling={
"preemptible": False,
"automatic_restart": True,
},
metadata={
"foo": "bar",
},
service_account={
"scopes": [
"userinfo-email",
"compute-ro",
"storage-ro",
],
},
labels={
"my_label": "foobar",
})
gce_reservation_sharing_policy = gcp.compute.Reservation("gce_reservation_sharing_policy",
name="gce-reservation-sharing-policy",
zone="us-central1-b",
specific_reservation={
"count": 2,
"source_instance_template": foobar.self_link,
},
reservation_sharing_policy={
"service_share_type": "ALLOW_ALL",
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var myImage = Gcp.Compute.GetImage.Invoke(new()
{
Family = "debian-11",
Project = "debian-cloud",
});
var foobar = new Gcp.Compute.InstanceTemplate("foobar", new()
{
Name = "instance-template",
MachineType = "g2-standard-4",
CanIpForward = false,
Tags = new[]
{
"foo",
"bar",
},
Disks = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateDiskArgs
{
SourceImage = myImage.Apply(getImageResult => getImageResult.SelfLink),
AutoDelete = true,
Boot = true,
},
},
NetworkInterfaces = new[]
{
new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs
{
Network = "default",
},
},
Scheduling = new Gcp.Compute.Inputs.InstanceTemplateSchedulingArgs
{
Preemptible = false,
AutomaticRestart = true,
},
Metadata =
{
{ "foo", "bar" },
},
ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs
{
Scopes = new[]
{
"userinfo-email",
"compute-ro",
"storage-ro",
},
},
Labels =
{
{ "my_label", "foobar" },
},
});
var gceReservationSharingPolicy = new Gcp.Compute.Reservation("gce_reservation_sharing_policy", new()
{
Name = "gce-reservation-sharing-policy",
Zone = "us-central1-b",
SpecificReservation = new Gcp.Compute.Inputs.ReservationSpecificReservationArgs
{
Count = 2,
SourceInstanceTemplate = foobar.SelfLink,
},
ReservationSharingPolicy = new Gcp.Compute.Inputs.ReservationReservationSharingPolicyArgs
{
ServiceShareType = "ALLOW_ALL",
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
myImage, err := compute.LookupImage(ctx, &compute.LookupImageArgs{
Family: pulumi.StringRef("debian-11"),
Project: pulumi.StringRef("debian-cloud"),
}, nil)
if err != nil {
return err
}
foobar, err := compute.NewInstanceTemplate(ctx, "foobar", &compute.InstanceTemplateArgs{
Name: pulumi.String("instance-template"),
MachineType: pulumi.String("g2-standard-4"),
CanIpForward: pulumi.Bool(false),
Tags: pulumi.StringArray{
pulumi.String("foo"),
pulumi.String("bar"),
},
Disks: compute.InstanceTemplateDiskArray{
&compute.InstanceTemplateDiskArgs{
SourceImage: pulumi.String(myImage.SelfLink),
AutoDelete: pulumi.Bool(true),
Boot: pulumi.Bool(true),
},
},
NetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{
&compute.InstanceTemplateNetworkInterfaceArgs{
Network: pulumi.String("default"),
},
},
Scheduling: &compute.InstanceTemplateSchedulingArgs{
Preemptible: pulumi.Bool(false),
AutomaticRestart: pulumi.Bool(true),
},
Metadata: pulumi.StringMap{
"foo": pulumi.String("bar"),
},
ServiceAccount: &compute.InstanceTemplateServiceAccountArgs{
Scopes: pulumi.StringArray{
pulumi.String("userinfo-email"),
pulumi.String("compute-ro"),
pulumi.String("storage-ro"),
},
},
Labels: pulumi.StringMap{
"my_label": pulumi.String("foobar"),
},
})
if err != nil {
return err
}
_, err = compute.NewReservation(ctx, "gce_reservation_sharing_policy", &compute.ReservationArgs{
Name: pulumi.String("gce-reservation-sharing-policy"),
Zone: pulumi.String("us-central1-b"),
SpecificReservation: &compute.ReservationSpecificReservationArgs{
Count: pulumi.Int(2),
SourceInstanceTemplate: foobar.SelfLink,
},
ReservationSharingPolicy: &compute.ReservationReservationSharingPolicyArgs{
ServiceShareType: pulumi.String("ALLOW_ALL"),
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
data "gcp_compute_getimage" "myImage" {
family = "debian-11"
project = "debian-cloud"
}
resource "gcp_compute_instancetemplate" "foobar" {
name = "instance-template"
machine_type = "g2-standard-4"
can_ip_forward = false
tags = ["foo", "bar"]
disks {
source_image = data.gcp_compute_getimage.myImage.self_link
auto_delete = true
boot = true
}
network_interfaces {
network = "default"
}
scheduling = {
preemptible = false
automatic_restart = true
}
metadata = {
"foo" = "bar"
}
service_account = {
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
}
labels = {
"my_label" = "foobar"
}
}
resource "gcp_compute_reservation" "gce_reservation_sharing_policy" {
name = "gce-reservation-sharing-policy"
zone = "us-central1-b"
specific_reservation = {
count = 2
source_instance_template = gcp_compute_instancetemplate.foobar.self_link
}
reservation_sharing_policy = {
service_share_type = "ALLOW_ALL"
}
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.ComputeFunctions;
import com.pulumi.gcp.compute.inputs.GetImageArgs;
import com.pulumi.gcp.compute.InstanceTemplate;
import com.pulumi.gcp.compute.InstanceTemplateArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateSchedulingArgs;
import com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs;
import com.pulumi.gcp.compute.Reservation;
import com.pulumi.gcp.compute.ReservationArgs;
import com.pulumi.gcp.compute.inputs.ReservationSpecificReservationArgs;
import com.pulumi.gcp.compute.inputs.ReservationReservationSharingPolicyArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()
.family("debian-11")
.project("debian-cloud")
.build());
var foobar = new InstanceTemplate("foobar", InstanceTemplateArgs.builder()
.name("instance-template")
.machineType("g2-standard-4")
.canIpForward(false)
.tags(
"foo",
"bar")
.disks(InstanceTemplateDiskArgs.builder()
.sourceImage(myImage.selfLink())
.autoDelete(true)
.boot(true)
.build())
.networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()
.network("default")
.build())
.scheduling(InstanceTemplateSchedulingArgs.builder()
.preemptible(false)
.automaticRestart(true)
.build())
.metadata(Map.of("foo", "bar"))
.serviceAccount(InstanceTemplateServiceAccountArgs.builder()
.scopes(
"userinfo-email",
"compute-ro",
"storage-ro")
.build())
.labels(Map.of("my_label", "foobar"))
.build());
var gceReservationSharingPolicy = new Reservation("gceReservationSharingPolicy", ReservationArgs.builder()
.name("gce-reservation-sharing-policy")
.zone("us-central1-b")
.specificReservation(ReservationSpecificReservationArgs.builder()
.count(2)
.sourceInstanceTemplate(foobar.selfLink())
.build())
.reservationSharingPolicy(ReservationReservationSharingPolicyArgs.builder()
.serviceShareType("ALLOW_ALL")
.build())
.build());
}
}
resources:
foobar:
type: gcp:compute:InstanceTemplate
properties:
name: instance-template
machineType: g2-standard-4
canIpForward: false
tags:
- foo
- bar
disks:
- sourceImage: ${myImage.selfLink}
autoDelete: true
boot: true
networkInterfaces:
- network: default
scheduling:
preemptible: false
automaticRestart: true
metadata:
foo: bar
serviceAccount:
scopes:
- userinfo-email
- compute-ro
- storage-ro
labels:
my_label: foobar
gceReservationSharingPolicy:
type: gcp:compute:Reservation
name: gce_reservation_sharing_policy
properties:
name: gce-reservation-sharing-policy
zone: us-central1-b
specificReservation:
count: 2
sourceInstanceTemplate: ${foobar.selfLink}
reservationSharingPolicy:
serviceShareType: ALLOW_ALL
variables:
myImage:
fn::invoke:
function: gcp:compute:getImage
arguments:
family: debian-11
project: debian-cloud
Import
Reservation can be imported using any of these accepted formats:
projects/{{project}}/zones/{{zone}}/reservations/{{name}}{{project}}/{{zone}}/{{name}}{{zone}}/{{name}}{{name}}
When using the pulumi import command, Reservation can be imported using one of the formats above. For example:
$ pulumi import gcp:compute/reservation:Reservation default projects/{{project}}/zones/{{zone}}/reservations/{{name}}
$ pulumi import gcp:compute/reservation:Reservation default {{project}}/{{zone}}/{{name}}
$ pulumi import gcp:compute/reservation:Reservation default {{zone}}/{{name}}
$ pulumi import gcp:compute/reservation:Reservation default {{name}}
Constructors
- Reservation(String name, {ReservationArgs? args, CustomResourceOptions? options})
-
Creates a new Reservation.
nameThe Pulumi resource name.argsArguments used to configure this Reservation. The set of arguments for Reservation.optionsResource options controlling this resource's behavior. - Reservation.reference(String urn)
- Creates a typed reference to an existing Reservation resource.
Properties
-
blockNames
↔ Output<
List< String> > -
List of all reservation block names in the parent reservation.
latefinal
-
childResources
→ Set<
Resource> -
finalinherited
-
commitment
↔ Output<
String> -
Full or partial URL to a parent commitment. This field displays for
reservations that are tied to a commitment.
latefinal
-
completionSources
↔ Map<
String, IOutputCompletionSource> -
latefinalinherited
-
creationTimestamp
↔ Output<
String> -
Creation timestamp in RFC3339 text format.
latefinal
-
deleteAfterDuration
↔ Output<
ReservationDeleteAfterDuration?> -
Duration after which the reservation will be auto-deleted by Compute Engine. Cannot be used with delete_at_time.
Structure is documented below.
latefinal
-
deleteAtTime
↔ Output<
String> -
Absolute time in future when the reservation will be auto-deleted by Compute Engine. Timestamp is represented in RFC3339 text format.
Cannot be used with delete_after_duration.
latefinal
-
deletionPolicy
↔ Output<
String> -
Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
When a 'terraform destroy' or 'pulumi up' would delete the resource,
the command will fail if this field is set to "PREVENT" in Terraform state.
When set to "ABANDON", the command will remove the resource from Terraform
management without updating or deleting the resource in the API.
When set to "DELETE", deleting the resource is allowed.
latefinal
-
description
↔ Output<
String?> -
An optional description of this resource.
latefinal
-
enableEmergentMaintenance
↔ Output<
bool?> -
(Optional, Beta)
Indicates if this group of VMs have emergent maintenance enabled.
latefinal
- hashCode → int
-
The hash code for this object.
no setterinherited
-
id
↔ Output<
String> -
getter/setter pairinherited
- isCustom → bool
-
Returns whether this resource is provider-managed.
no setterinherited
- isProtected → bool
-
Returns whether this resource is protected from deletion.
no setterinherited
- isRemote → bool
-
Whether this resource is registered as remote.
no setterinherited
- isResourceReference → bool
-
Whether this instance represents a resource value returned over RPC.
finalinherited
-
kind
↔ Output<
String> -
Type of the resource. Always compute#reservations for reservations.
latefinal
-
linkedCommitments
↔ Output<
List< String> > -
Full or partial URL to parent commitments. This field displays for reservations that are tied to multiple commitments.
latefinal
-
name
↔ Output<
String> -
Name of the resource. Provided by the client when the resource is
created. The name must be 1-63 characters long, and comply with
RFC1035. Specifically, the name must be 1-63 characters long and match
the regular expression
a-z?which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.latefinal -
params
↔ Output<
ReservationParams?> -
Additional params passed with the request, but not persisted as part of resource payload
Structure is documented below.
latefinal
-
project
↔ Output<
String> -
The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
latefinal
-
reservationBlockCount
↔ Output<
int> -
(Output)
The number of reservation blocks associated with this reservation.
latefinal
-
reservationSharingPolicy
↔ Output<
ReservationReservationSharingPolicy> -
Sharing policy for reservations with Google Cloud managed services.
Structure is documented below.
latefinal
-
resourceStatuses
↔ Output<
List< ReservationResourceStatus> > -
Status information for Reservation resource.
Structure is documented below.
latefinal
-
resourceTransforms
→ List<
ResourceTransform> -
Inherited/explicit async transforms.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
satisfiesPzs
↔ Output<
bool> -
Reserved for future use.
latefinal
-
selfLink
↔ Output<
String> -
The URI of the created resource.
latefinal
-
The share setting for reservations.
Structure is documented below.
latefinal
-
specificReservation
↔ Output<
ReservationSpecificReservation> -
Reservation for instances with specific machine shapes.
Structure is documented below.
latefinal
-
specificReservationRequired
↔ Output<
bool?> -
When set to true, only VMs that target this reservation by name can
consume this reservation. Otherwise, it can be consumed by VMs with
affinity for any reservation. Defaults to false.
latefinal
-
status
↔ Output<
String> -
The status of the reservation.
latefinal
-
transformations
→ List<
ResourceTransformation> -
Inherited/explicit legacy transformations.
no setterinherited
-
urn
↔ Output<
String> -
latefinalinherited
-
zone
↔ Output<
String> -
The zone where the reservation is made.
latefinal
Methods
-
failId(
Object error) → void -
Completes this resource ID with an error when registration fails.
inherited
-
failOutputs(
Object error) → void -
Completes all output properties with
error.inherited -
failUrn(
Object error) → void -
Completes this resource URN with an error when registration fails.
inherited
-
getProvider(
String moduleMember) → ProviderResource? -
Returns provider for
moduleMember's package, if configured.inherited -
getResourceName(
) → String -
Returns this resource's logical name.
inherited
-
getResourceType(
) → String -
Returns this resource's Pulumi type token.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
registerOutput<
T> (String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output< T> -
Registers a dynamic output property for this resource.
inherited
-
resolveId(
String? value, {required bool isKnown}) → void -
Resolves the provider-assigned ID for this resource.
inherited
-
resolveOutputs(
Struct outputs) → void -
Resolves all output properties from a monitor response payload.
inherited
-
resolveUrn(
String value) → void -
Resolves this resource's URN once assigned by the engine.
inherited
-
serializeProperties(
Map< String, dynamic> properties) → Future<Struct> -
Serializes resource properties for RPC transmission.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
get(
String name, Input< String> id, {ReservationState? state, CustomResourceOptions? options}) → Reservation -
Gets an existing Reservation resource's state with the given
nameandid.