קבלה, הצגת רשימה ומחיקה של תבניות מכונה

בדף הזה מוסבר איך מקבלים, מציגים ומוחקים תבניות של מכונות וירטואליות.

לפני שמתחילים

קבלת מידע על תבנית של הגדרות מכונה

כשמציגים תבנית קיימת של הגדרות מכונה, אפשר לראות את השם שלה, את המזהה הייחודי, את חותמת הזמן של היצירה ואת כל מאפייני המכונה שהיא מציינת.

המסוף

  1. נכנסים לדף Instance Templates במסוף Cloud de Confiance .

    לדף Instance templates

  2. לוחצים על השם של תבנית של הגדרות מכונה כדי לראות את פרטי התבנית.

gcloud

כדי לקבל מידע על תבנית אזורית או גלובלית של הגדרות מכונה, משתמשים ב-instance-templates describe command.

כדי להשתמש בתבנית של הגדרות מכונה אזורית, משתמשים בפקודה הבאה:

gcloud compute instance-templates describe INSTANCE_TEMPLATE_NAME_OR_ID \
    --region=REGION

כדי להשתמש בתבנית גלובלית של הגדרות מכונה, משתמשים בפקודה הבאה:

gcloud compute instance-templates describe INSTANCE_TEMPLATE_NAME_OR_ID

המשך

import (
	"context"
	"fmt"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// getInstanceTemplate retrieves an instance template, which you can use to create virtual machine
// (VM) instances and managed instance groups (MIGs).
func getInstanceTemplate(projectID, templateName string) (*computepb.InstanceTemplate, error) {
	// projectID := "your_project_id"
	// templateName := "your_template_name"

	ctx := context.Background()
	instanceTemplatesClient, err := compute.NewInstanceTemplatesRESTClient(ctx)
	if err != nil {
		return nil, fmt.Errorf("NewInstanceTemplatesRESTClient: %w", err)
	}
	defer instanceTemplatesClient.Close()

	req := &computepb.GetInstanceTemplateRequest{
		Project:          projectID,
		InstanceTemplate: templateName,
	}

	return instanceTemplatesClient.Get(ctx, req)
}

Java


import com.google.cloud.compute.v1.GetInstanceTemplateRequest;
import com.google.cloud.compute.v1.InstanceTemplate;
import com.google.cloud.compute.v1.InstanceTemplatesClient;
import java.io.IOException;

public class GetInstanceTemplate {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // projectId: project ID or project number of the Cloud project you use.
    // templateName: name of the template to retrieve.
    String projectId = "your-project-id";
    String templateName = "template-name";
    getInstanceTemplate(projectId, templateName);
  }

  //  Retrieve an instance template, which you can use to create virtual machine
  //  (VM) instances and managed instance groups (MIGs).
  public static void getInstanceTemplate(String projectId, String templateName) throws IOException {
    try (InstanceTemplatesClient instanceTemplatesClient = InstanceTemplatesClient.create()) {

      GetInstanceTemplateRequest getInstanceTemplateRequest = GetInstanceTemplateRequest
          .newBuilder()
          .setProject(projectId)
          .setInstanceTemplate(templateName).build();

      InstanceTemplate instanceTemplate = instanceTemplatesClient.get(getInstanceTemplateRequest);
      System.out.println("Instance Template retrieved: " + instanceTemplate.getName());
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const templateName = 'your_template_name';

const compute = require('@google-cloud/compute');

// Retrieve an instance template, which you can use to create
// virtual machine (VM) instances and managed instance groups (MIGs).
async function getInstanceTemplate() {
  const instanceTemplatesClient = new compute.InstanceTemplatesClient();

  const [instance] = await instanceTemplatesClient.get({
    project: projectId,
    instanceTemplate: templateName,
  });

  console.log('Instance template:', instance);
}

getInstanceTemplate();

Python

from google.cloud import compute_v1


def get_instance_template(
    project_id: str, template_name: str
) -> compute_v1.InstanceTemplate:
    """
    Retrieve an instance template, which you can use to create virtual machine
    (VM) instances and managed instance groups (MIGs).

    Args:
        project_id: project ID or project number of the Cloud project you use.
        template_name: name of the template to retrieve.

    Returns:
        InstanceTemplate object that represents the retrieved template.
    """
    template_client = compute_v1.InstanceTemplatesClient()
    return template_client.get(project=project_id, instance_template=template_name)

REST

כדי לקבל מידע על תבנית אזורית של הגדרות מכונה, משתמשים בשיטה regionInstanceTemplates.get באופן הבא:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_NAME_OR_ID

כדי לקבל מידע על תבנית גלובלית של הגדרות מכונה, משתמשים בשיטה instanceTemplates.get באופן הבא:

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/instanceTemplates/[INSTANCE_TEMPLATE_NAME_OR_ID]

הצגת רשימה של תבניות של מכונות

כדי לקבל רשימה של תבניות מכונות שיצרתם:

המסוף

בדף Instance Templates (תבניות מכונה) מפורטות כל תבניות המכונה בפרויקט.

כניסה לדף Instance Templates

gcloud

כדי לראות רשימה של כל תבניות המכונות האזוריות, משתמשים בפקודה הבאה:

gcloud compute instance-templates list \
    --regions

כדי לקבל רשימה של תבניות אזוריות של מכונות באזור ספציפי, משתמשים בפקודה הבאה:

gcloud compute instance-templates list \
    --filter="region:(REGION)"

כדי לקבל רשימה של תבניות גלובליות של מכונות וירטואליות, משתמשים בפקודה הבאה:

gcloud compute instance-templates list \
    --global

כדי לקבל רשימה של כל תבניות המכונות, כולל האזוריות והגלובליות, משתמשים בפקודה הבאה:

gcloud compute instance-templates list

המשך

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/api/iterator"
)

// listInstanceTemplates prints a list of InstanceTemplate objects available in a project.
func listInstanceTemplates(w io.Writer, projectID string) error {
	// projectID := "your_project_id"

	ctx := context.Background()
	instanceTemplatesClient, err := compute.NewInstanceTemplatesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstanceTemplatesRESTClient: %w", err)
	}
	defer instanceTemplatesClient.Close()

	req := &computepb.ListInstanceTemplatesRequest{
		Project: projectID,
	}

	it := instanceTemplatesClient.List(ctx, req)
	for {
		instance, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "- %s %s\n", instance.GetName(), instance.GetProperties().GetMachineType())
	}

	return nil
}

Java


import com.google.cloud.compute.v1.InstanceTemplate;
import com.google.cloud.compute.v1.InstanceTemplatesClient;
import com.google.cloud.compute.v1.InstanceTemplatesClient.ListPagedResponse;
import java.io.IOException;

public class ListInstanceTemplates {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // projectId: project ID or project number of the Cloud project you use.
    String projectId = "your-project-id";
    listInstanceTemplates(projectId);
  }

  // Get a list of InstanceTemplate objects available in a project.
  public static ListPagedResponse listInstanceTemplates(String projectId) throws IOException {
    try (InstanceTemplatesClient instanceTemplatesClient = InstanceTemplatesClient.create()) {
      int count = 0;
      System.out.println("Listing instance templates...");
      ListPagedResponse templates = instanceTemplatesClient.list(projectId);
      for (InstanceTemplate instanceTemplate : templates.iterateAll()) {
        System.out.printf("%s. %s%n", ++count, instanceTemplate.getName());
      }
      return templates;
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';

const compute = require('@google-cloud/compute');

// Print a list of instance template objects available in a project.
async function listInstanceTemplates() {
  const instanceTemplatesClient = new compute.InstanceTemplatesClient();

  const instanceTemplates = instanceTemplatesClient.listAsync({
    project: projectId,
  });

  for await (const instanceTemplate of instanceTemplates) {
    console.log(` - ${instanceTemplate.name}`);
  }
}

listInstanceTemplates();

Python

from __future__ import annotations

from collections.abc import Iterable

from google.cloud import compute_v1


def list_instance_templates(project_id: str) -> Iterable[compute_v1.InstanceTemplate]:
    """
    Get a list of InstanceTemplate objects available in a project.

    Args:
        project_id: project ID or project number of the Cloud project you use.

    Returns:
        Iterable list of InstanceTemplate objects.
    """
    template_client = compute_v1.InstanceTemplatesClient()
    return template_client.list(project=project_id)

REST

כדי לקבל רשימה של תבניות מכונות אזוריות, שולחים בקשת regionInstanceTemplates.list:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/instanceTemplates

כדי לקבל רשימה של תבניות מכונה גלובליות, שולחים בקשת instanceTemplates.list:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

מחיקה של תבנית של הגדרות מכונה

מחיקה של תבנית של הגדרות מכונה מסירה אותה מרשימת התבניות. אי אפשר למחוק תבנית של הגדרות מכונה אם קבוצת מופעי מכונה מנוהלים מפנה אליה.

המסוף

  1. נכנסים לדף Instance Templates במסוף Cloud de Confiance .

    כניסה לדף Instance Templates

  2. בוחרים את תבניות המכונות שרוצים למחוק.
  3. לוחצים על Delete.

gcloud

מריצים את הפקודה הבאה ב-Google Cloud CLI:

gcloud compute instance-templates delete INSTANCE_TEMPLATE_NAME

בתבנית של הגדרות מכונה אזורית, INSTANCE_TEMPLATE_NAME צריך להכיל את כתובת ה-URL המלאה של התבנית. לדוגמה, https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/instanceTemplates/example-regional-instance-template.

המשך

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// deleteInstanceTemplate deletes an instance template.
func deleteInstanceTemplate(w io.Writer, projectID, templateName string) error {
	// projectID := "your_project_id"
	// templateName := "your_template_name"

	ctx := context.Background()
	instanceTemplatesClient, err := compute.NewInstanceTemplatesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstanceTemplatesRESTClient: %w", err)
	}
	defer instanceTemplatesClient.Close()

	req := &computepb.DeleteInstanceTemplateRequest{
		Project:          projectID,
		InstanceTemplate: templateName,
	}

	op, err := instanceTemplatesClient.Delete(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to delete instance template: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Instance template deleted\n")

	return nil
}

Java


import com.google.cloud.compute.v1.DeleteInstanceTemplateRequest;
import com.google.cloud.compute.v1.InstanceTemplatesClient;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteInstanceTemplate {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // projectId: project ID or project number of the Cloud project you use.
    // templateName: name of the new template to create.
    String projectId = "your-project-id";
    String templateName = "template-name";
    deleteInstanceTemplate(projectId, templateName);
  }

  // Delete an instance template.
  public static void deleteInstanceTemplate(String projectId, String templateName)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    try (InstanceTemplatesClient instanceTemplatesClient = InstanceTemplatesClient.create()) {

      DeleteInstanceTemplateRequest deleteInstanceTemplateRequest = DeleteInstanceTemplateRequest
          .newBuilder()
          .setProject(projectId)
          .setInstanceTemplate(templateName).build();

      Operation response = instanceTemplatesClient.deleteAsync(deleteInstanceTemplateRequest)
          .get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        System.out.println("Instance template deletion failed ! ! " + response);
        return;
      }
      System.out.printf("Instance template deletion operation status for %s: %s ", templateName,
          response.getStatus());
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment and replace these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const templateName = 'your_template_name';

const compute = require('@google-cloud/compute');

// Delete an instance template.
async function deleteInstanceTemplate() {
  const instanceTemplatesClient = new compute.InstanceTemplatesClient();

  const [response] = await instanceTemplatesClient.delete({
    project: projectId,
    instanceTemplate: templateName,
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.GlobalOperationsClient();

  // Wait for the create operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await operationsClient.wait({
      operation: operation.name,
      project: projectId,
    });
  }

  console.log('Instance template deleted.');
}

deleteInstanceTemplate();

Python

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def delete_instance_template(project_id: str, template_name: str) -> None:
    """
    Delete an instance template.

    Args:
        project_id: project ID or project number of the Cloud project you use.
        template_name: name of the template to delete.
    """
    template_client = compute_v1.InstanceTemplatesClient()
    operation = template_client.delete(
        project=project_id, instance_template=template_name
    )
    wait_for_extended_operation(operation, "instance template deletion")

REST

כדי למחוק תבנית אזורית של הגדרות מכונה, שולחים בקשת regionInstanceTemplates.delete:

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_NAME

כדי למחוק תבנית של הגדרות מכונה גלובלית, שולחים בקשה: instanceTemplates.delete

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/INSTANCE_TEMPLATE_NAME

לפעמים מכונות ה-VM בקבוצת מופעי מכונה מנוהלת לא מסונכרנות עם שאר הקבוצה, ומשתמשות בתבנית שונה של הגדרות מכונה משאר הקבוצה. אם מכונה וירטואלית בקבוצת מופעי מכונה מנוהלים משתמשת בתבנית שונה מזו שצוינה בקבוצה, המכונה הווירטואלית הזו תמשיך להשתמש בתבנית שלה לצורך תיקון גם אם התבנית הזו נמחקת. מידע נוסף על החלת תבנית של הגדרות מכונה חדשה זמין במאמר החלת הגדרות חדשות על מכונות וירטואליות בקבוצת MIG.