...

Source file src/google.golang.org/api/examples/compute.go

Documentation: google.golang.org/api/examples

     1  // Copyright 2017 Google LLC.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package main
     6  
     7  import (
     8  	"fmt"
     9  	"log"
    10  	"net/http"
    11  	"os"
    12  	"strings"
    13  
    14  	compute "google.golang.org/api/compute/v1"
    15  	"google.golang.org/api/googleapi"
    16  )
    17  
    18  func init() {
    19  	scopes := strings.Join([]string{
    20  		compute.DevstorageFullControlScope,
    21  		compute.ComputeScope,
    22  	}, " ")
    23  	registerDemo("compute", scopes, computeMain)
    24  }
    25  
    26  func computeMain(client *http.Client, argv []string) {
    27  	if len(argv) != 2 {
    28  		fmt.Fprintln(os.Stderr, "Usage: compute project_id instance_name (to start an instance)")
    29  		return
    30  	}
    31  
    32  	service, err := compute.New(client)
    33  	if err != nil {
    34  		log.Fatalf("Unable to create Compute service: %v", err)
    35  	}
    36  
    37  	projectID := argv[0]
    38  	instanceName := argv[1]
    39  
    40  	prefix := "https://www.googleapis.com/compute/v1/projects/" + projectID
    41  	imageURL := "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140606"
    42  	zone := "us-central1-a"
    43  
    44  	// Show the current images that are available.
    45  	res, err := service.Images.List(projectID).Do()
    46  	log.Printf("Got compute.Images.List, err: %#v, %v", res, err)
    47  
    48  	instance := &compute.Instance{
    49  		Name:        instanceName,
    50  		Description: "compute sample instance",
    51  		MachineType: prefix + "/zones/" + zone + "/machineTypes/n1-standard-1",
    52  		Disks: []*compute.AttachedDisk{
    53  			{
    54  				AutoDelete: true,
    55  				Boot:       true,
    56  				Type:       "PERSISTENT",
    57  				InitializeParams: &compute.AttachedDiskInitializeParams{
    58  					DiskName:    "my-root-pd",
    59  					SourceImage: imageURL,
    60  				},
    61  			},
    62  		},
    63  		NetworkInterfaces: []*compute.NetworkInterface{
    64  			{
    65  				AccessConfigs: []*compute.AccessConfig{
    66  					{
    67  						Type: "ONE_TO_ONE_NAT",
    68  						Name: "External NAT",
    69  					},
    70  				},
    71  				Network: prefix + "/global/networks/default",
    72  			},
    73  		},
    74  		ServiceAccounts: []*compute.ServiceAccount{
    75  			{
    76  				Email: "default",
    77  				Scopes: []string{
    78  					compute.DevstorageFullControlScope,
    79  					compute.ComputeScope,
    80  				},
    81  			},
    82  		},
    83  	}
    84  
    85  	op, err := service.Instances.Insert(projectID, zone, instance).Do()
    86  	log.Printf("Got compute.Operation, err: %#v, %v", op, err)
    87  	etag := op.Header.Get("Etag")
    88  	log.Printf("Etag=%v", etag)
    89  
    90  	inst, err := service.Instances.Get(projectID, zone, instanceName).IfNoneMatch(etag).Do()
    91  	log.Printf("Got compute.Instance, err: %#v, %v", inst, err)
    92  	if googleapi.IsNotModified(err) {
    93  		log.Printf("Instance not modified since insert.")
    94  	} else {
    95  		log.Printf("Instance modified since insert.")
    96  	}
    97  }
    98  

View as plain text