diff --git a/google/cloudfunctions_operation.go b/google/cloudfunctions_operation.go new file mode 100644 index 00000000000..34abda6b5c8 --- /dev/null +++ b/google/cloudfunctions_operation.go @@ -0,0 +1,70 @@ +package google + +import ( + "fmt" + "log" + "time" + + "github.com/hashicorp/terraform/helper/resource" + "google.golang.org/api/cloudfunctions/v1" +) + +type CloudFunctionsOperationWaiter struct { + Service *cloudfunctions.Service + Op *cloudfunctions.Operation +} + +func (w *CloudFunctionsOperationWaiter) RefreshFunc() resource.StateRefreshFunc { + return func() (interface{}, string, error) { + op, err := w.Service.Operations.Get(w.Op.Name).Do() + + if err != nil { + return nil, "", err + } + + status := "PENDING" + if op.Done == true { + status = "DONE" + } + + log.Printf("[DEBUG] Got %q when asking for operation %q", status, w.Op.Name) + return op, status, nil + } +} + +func (w *CloudFunctionsOperationWaiter) Conf() *resource.StateChangeConf { + return &resource.StateChangeConf{ + Pending: []string{"PENDING"}, + Target: []string{"DONE"}, + Refresh: w.RefreshFunc(), + } +} + +func cloudFunctionsOperationWait(client *cloudfunctions.Service, + op *cloudfunctions.Operation, activity string) error { + return cloudFunctionsOperationWaitTime(client, op, activity, 4) +} + +func cloudFunctionsOperationWaitTime(client *cloudfunctions.Service, op *cloudfunctions.Operation, + activity string, timeoutMin int) error { + w := &CloudFunctionsOperationWaiter{ + Service: client, + Op: op, + } + + state := w.Conf() + state.Delay = 10 * time.Second + state.Timeout = time.Duration(timeoutMin) * time.Minute + state.MinTimeout = 2 * time.Second + opRaw, err := state.WaitForState() + if err != nil { + return fmt.Errorf("Error waiting for %s: %s", activity, err) + } + + resultOp := opRaw.(*cloudfunctions.Operation) + if resultOp.Error != nil { + return fmt.Errorf(resultOp.Error.Message) + } + + return nil +} diff --git a/google/config.go b/google/config.go index 9c1d3bbe694..65ac7bb966c 100644 --- a/google/config.go +++ b/google/config.go @@ -18,6 +18,7 @@ import ( "golang.org/x/oauth2/jwt" "google.golang.org/api/bigquery/v2" "google.golang.org/api/cloudbilling/v1" + "google.golang.org/api/cloudfunctions/v1" "google.golang.org/api/cloudkms/v1" "google.golang.org/api/cloudresourcemanager/v1" resourceManagerV2Beta1 "google.golang.org/api/cloudresourcemanager/v2beta1" @@ -64,6 +65,7 @@ type Config struct { clientIAM *iam.Service clientServiceMan *servicemanagement.APIService clientBigQuery *bigquery.Service + clientCloudFunctions *cloudfunctions.Service bigtableClientFactory *BigtableClientFactory } @@ -244,6 +246,13 @@ func (c *Config) loadAndValidate() error { } c.clientBigQuery.UserAgent = userAgent + log.Printf("[INFO] Instantiating Google Cloud CloudFunctions Client...") + c.clientCloudFunctions, err = cloudfunctions.New(client) + if err != nil { + return err + } + c.clientCloudFunctions.UserAgent = userAgent + c.bigtableClientFactory = &BigtableClientFactory{ UserAgent: userAgent, TokenSource: tokenSource, diff --git a/google/data_source_google_cloudfunctions_function.go b/google/data_source_google_cloudfunctions_function.go new file mode 100644 index 00000000000..88366a9250d --- /dev/null +++ b/google/data_source_google_cloudfunctions_function.go @@ -0,0 +1,45 @@ +package google + +import ( + "github.com/hashicorp/terraform/helper/schema" +) + +func dataSourceGoogleCloudFunctionsFunction() *schema.Resource { + // Generate datasource schema from resource + dsSchema := datasourceSchemaFromResourceSchema(resourceCloudFunctionsFunction().Schema) + + // Set 'Required' schema elements + addRequiredFieldsToSchema(dsSchema, "name") + + // Set 'Optional' schema elements + addOptionalFieldsToSchema(dsSchema, "project", "region") + + return &schema.Resource{ + Read: dataSourceGoogleCloudFunctionsFunctionRead, + Schema: dsSchema, + } +} + +func dataSourceGoogleCloudFunctionsFunctionRead(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + project, err := getProject(d, config) + if err != nil { + return err + } + + region, err := getRegion(d, config) + if err != nil { + return err + } + + cloudFuncId := &cloudFunctionId{ + Project: project, + Region: region, + Name: d.Get("name").(string), + } + + d.SetId(cloudFuncId.terraformId()) + + return resourceCloudFunctionsRead(d, meta) +} diff --git a/google/data_source_google_cloudfunctions_function_test.go b/google/data_source_google_cloudfunctions_function_test.go new file mode 100644 index 00000000000..e743e857ba4 --- /dev/null +++ b/google/data_source_google_cloudfunctions_function_test.go @@ -0,0 +1,154 @@ +package google + +import ( + "fmt" + "os" + "testing" + + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/terraform" +) + +func TestAccDataSourceGoogleCloudFunctionsFunction_basic(t *testing.T) { + t.Parallel() + + funcDataNameHttp := "data.google_cloudfunctions_function.function_http" + funcDataNamePubSub := "data.google_cloudfunctions_function.function_pubsub" + funcDataNameBucket := "data.google_cloudfunctions_function.function_bucket" + functionName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + bucketName := fmt.Sprintf("tf-test-bucket-%d", acctest.RandInt()) + topicName := fmt.Sprintf("tf-test-sub-%s", acctest.RandString(10)) + zipFilePath, err := createZIPArchiveForIndexJs(testHTTPTriggerPath) + if err != nil { + t.Fatal(err.Error()) + } + defer os.Remove(zipFilePath) // clean up + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFunctionsFunctionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceGoogleCloudFunctionsFunctionConfig(functionName, + bucketName, zipFilePath, topicName), + Check: resource.ComposeTestCheckFunc( + testAccDataSourceGoogleCloudFunctionsFunctionCheck(funcDataNameHttp, + "google_cloudfunctions_function.function_http"), + testAccDataSourceGoogleCloudFunctionsFunctionCheck(funcDataNamePubSub, + "google_cloudfunctions_function.function_pubsub"), + testAccDataSourceGoogleCloudFunctionsFunctionCheck(funcDataNameBucket, + "google_cloudfunctions_function.function_bucket"), + ), + }, + }, + }) +} + +func testAccDataSourceGoogleCloudFunctionsFunctionCheck(dataSourceName string, resourceName string) resource.TestCheckFunc { + return func(s *terraform.State) error { + ds, ok := s.RootModule().Resources[dataSourceName] + if !ok { + return fmt.Errorf("root module has no resource called %s", dataSourceName) + } + + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return fmt.Errorf("can't find %s in state", resourceName) + } + + dsAttr := ds.Primary.Attributes + rsAttr := rs.Primary.Attributes + + cloudFuncAttrToCheck := []string{ + "name", + "region", + "description", + "available_memory_mb", + "timeout", + "storage_bucket", + "storage_object", + "entry_point", + "trigger_http", + "trigger_bucket", + "trigger_topic", + } + + for _, attr := range cloudFuncAttrToCheck { + if dsAttr[attr] != rsAttr[attr] { + return fmt.Errorf( + "%s is %s; want %s", + attr, + dsAttr[attr], + rsAttr[attr], + ) + } + } + + return nil + } +} + +func testAccDataSourceGoogleCloudFunctionsFunctionConfig(functionName string, + bucketName string, zipFilePath string, topicName string) string { + return fmt.Sprintf(` +resource "google_storage_bucket" "bucket" { + name = "%s" +} + +resource "google_storage_bucket_object" "archive" { + name = "index.zip" + bucket = "${google_storage_bucket.bucket.name}" + source = "%s" +} + +resource "google_cloudfunctions_function" "function_http" { + name = "%s-http" + description = "test function" + available_memory_mb = 128 + source_archive_bucket = "${google_storage_bucket.bucket.name}" + source_archive_object = "${google_storage_bucket_object.archive.name}" + trigger_http = true + timeout = 61 + entry_point = "helloGET" +} + +resource "google_cloudfunctions_function" "function_bucket" { + name = "%s-bucket" + available_memory_mb = 128 + source_archive_bucket = "${google_storage_bucket.bucket.name}" + source_archive_object = "${google_storage_bucket_object.archive.name}" + trigger_bucket = "${google_storage_bucket.bucket.name}" + timeout = 61 + entry_point = "helloGET" +} + +resource "google_pubsub_topic" "sub" { + name = "%s" +} + +resource "google_cloudfunctions_function" "function_pubsub" { + name = "%s-pubsub" + available_memory_mb = 128 + source_archive_bucket = "${google_storage_bucket.bucket.name}" + source_archive_object = "${google_storage_bucket_object.archive.name}" + trigger_topic = "${google_pubsub_topic.sub.name}" + timeout = 61 + entry_point = "helloGET" +} + +data "google_cloudfunctions_function" "function_http" { + name = "${google_cloudfunctions_function.function_http.name}" +} + +data "google_cloudfunctions_function" "function_bucket" { + name = "${google_cloudfunctions_function.function_bucket.name}" +} + +data "google_cloudfunctions_function" "function_pubsub" { + name = "${google_cloudfunctions_function.function_pubsub.name}" +} +`, bucketName, zipFilePath, functionName, functionName, + topicName, functionName) +} diff --git a/google/provider.go b/google/provider.go index 871d538c410..24305f9cc60 100644 --- a/google/provider.go +++ b/google/provider.go @@ -63,6 +63,7 @@ func Provider() terraform.ResourceProvider { "google_billing_account": dataSourceGoogleBillingAccount(), "google_dns_managed_zone": dataSourceDnsManagedZone(), "google_client_config": dataSourceGoogleClientConfig(), + "google_cloudfunctions_function": dataSourceGoogleCloudFunctionsFunction(), "google_compute_address": dataSourceGoogleComputeAddress(), "google_compute_image": dataSourceGoogleComputeImage(), "google_compute_global_address": dataSourceGoogleComputeGlobalAddress(), @@ -86,6 +87,7 @@ func Provider() terraform.ResourceProvider { "google_bigquery_table": resourceBigQueryTable(), "google_bigtable_instance": resourceBigtableInstance(), "google_bigtable_table": resourceBigtableTable(), + "google_cloudfunctions_function": resourceCloudFunctionsFunction(), "google_compute_autoscaler": resourceComputeAutoscaler(), "google_compute_address": resourceComputeAddress(), "google_compute_backend_bucket": resourceComputeBackendBucket(), diff --git a/google/resource_cloudfunctions_function.go b/google/resource_cloudfunctions_function.go new file mode 100644 index 00000000000..ecaedd0b949 --- /dev/null +++ b/google/resource_cloudfunctions_function.go @@ -0,0 +1,443 @@ +package google + +import ( + "github.com/hashicorp/terraform/helper/schema" + "github.com/hashicorp/terraform/helper/validation" + "google.golang.org/api/cloudfunctions/v1" + + "fmt" + "log" + "regexp" + "strconv" + "strings" + "time" +) + +// Min is 1 second, max is 9 minutes 540 sec +const functionTimeOutMax = 540 +const functionTimeOutMin = 1 +const functionDefaultTimeout = 60 + +var functionAllowedMemory = map[int]bool{ + 128: true, + 256: true, + 512: true, + 1024: true, + 2048: true, +} + +const functionDefaultAllowedMemoryMb = 256 + +type cloudFunctionId struct { + Project string + Region string + Name string +} + +func (s *cloudFunctionId) cloudFunctionId() string { + return fmt.Sprintf("projects/%s/locations/%s/functions/%s", s.Project, s.Region, s.Name) +} + +func (s *cloudFunctionId) locationId() string { + return fmt.Sprintf("projects/%s/locations/%s", s.Project, s.Region) +} + +func (s *cloudFunctionId) terraformId() string { + return fmt.Sprintf("%s/%s/%s", s.Project, s.Region, s.Name) +} + +func parseCloudFunctionId(id string, config *Config) (*cloudFunctionId, error) { + parts := strings.Split(id, "/") + + cloudFuncIdRegex := regexp.MustCompile("^([a-z0-9-]+)/([a-z0-9-])+/([a-zA-Z0-9_-]{1,63})$") + + if cloudFuncIdRegex.MatchString(id) { + return &cloudFunctionId{ + Project: parts[0], + Region: parts[1], + Name: parts[2], + }, nil + } + + return nil, fmt.Errorf("Invalid CloudFunction id format, expecting " + + "`{projectId}/{regionId}/{cloudFunctionName}`") +} + +func joinMapKeys(mapToJoin *map[int]bool) string { + var keys []string + for key := range *mapToJoin { + keys = append(keys, strconv.Itoa(key)) + } + return strings.Join(keys, ",") +} + +func resourceCloudFunctionsFunction() *schema.Resource { + return &schema.Resource{ + Create: resourceCloudFunctionsCreate, + Read: resourceCloudFunctionsRead, + Update: resourceCloudFunctionsUpdate, + Delete: resourceCloudFunctionsDestroy, + + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(5 * time.Minute), + Read: schema.DefaultTimeout(5 * time.Minute), + Delete: schema.DefaultTimeout(5 * time.Minute), + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) { + value := v.(string) + + if len(value) > 48 { + errors = append(errors, fmt.Errorf( + "%q cannot be longer than 48 characters", k)) + } + if !regexp.MustCompile("^[a-zA-Z0-9-]+$").MatchString(value) { + errors = append(errors, fmt.Errorf( + "%q can only contain letters, numbers and hyphens", k)) + } + if !regexp.MustCompile("^[a-zA-Z]").MatchString(value) { + errors = append(errors, fmt.Errorf( + "%q must start with a letter", k)) + } + if !regexp.MustCompile("[a-zA-Z0-9]$").MatchString(value) { + errors = append(errors, fmt.Errorf( + "%q must end with a number or a letter", k)) + } + return + }, + }, + + "source_archive_bucket": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + "source_archive_object": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + "description": { + Type: schema.TypeString, + Optional: true, + }, + + "available_memory_mb": { + Type: schema.TypeInt, + Optional: true, + Default: functionDefaultAllowedMemoryMb, + ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) { + availableMemoryMB := v.(int) + + if functionAllowedMemory[availableMemoryMB] != true { + errors = append(errors, fmt.Errorf("Allowed values for memory (in MB) are: %s . Got %d", + joinMapKeys(&functionAllowedMemory), availableMemoryMB)) + } + return + }, + }, + + "timeout": { + Type: schema.TypeInt, + Optional: true, + Default: functionDefaultTimeout, + ValidateFunc: validation.IntBetween(functionTimeOutMin, functionTimeOutMax), + }, + + "entry_point": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + }, + + "labels": { + Type: schema.TypeMap, + Optional: true, + }, + + "trigger_bucket": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + ConflictsWith: []string{"trigger_http", "trigger_topic"}, + }, + + "trigger_http": { + Type: schema.TypeBool, + Optional: true, + ForceNew: true, + ConflictsWith: []string{"trigger_bucket", "trigger_topic"}, + }, + + "trigger_topic": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + ConflictsWith: []string{"trigger_http", "trigger_bucket"}, + }, + + "https_trigger_url": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + "project": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + + "region": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + // For now CloudFunctions are allowed only in us-central1 + // Please see https://cloud.google.com/about/locations/ + ValidateFunc: validation.StringInSlice([]string{"us-central1"}, true), + }, + }, + } +} + +func resourceCloudFunctionsCreate(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + project, err := getProject(d, config) + if err != nil { + return err + } + + region, err := getRegion(d, config) + if err != nil { + return err + } + + cloudFuncId := &cloudFunctionId{ + Project: project, + Region: region, + Name: d.Get("name").(string), + } + + function := &cloudfunctions.CloudFunction{ + Name: cloudFuncId.cloudFunctionId(), + } + + sourceArchiveBucket := d.Get("source_archive_bucket").(string) + sourceArchiveObj := d.Get("source_archive_object").(string) + function.SourceArchiveUrl = fmt.Sprintf("gs://%v/%v", sourceArchiveBucket, sourceArchiveObj) + + if v, ok := d.GetOk("available_memory_mb"); ok { + availableMemoryMb := v.(int) + function.AvailableMemoryMb = int64(availableMemoryMb) + } + + if v, ok := d.GetOk("description"); ok { + function.Description = v.(string) + } + + if v, ok := d.GetOk("entry_point"); ok { + function.EntryPoint = v.(string) + } + + if v, ok := d.GetOk("timeout"); ok { + function.Timeout = fmt.Sprintf("%vs", v.(int)) + } + + v, triggHttpOk := d.GetOk("trigger_http") + if triggHttpOk && v.(bool) { + function.HttpsTrigger = &cloudfunctions.HttpsTrigger{} + } + + v, triggTopicOk := d.GetOk("trigger_topic") + if triggTopicOk { + // Make PubSub event publish as in https://cloud.google.com/functions/docs/calling/pubsub + function.EventTrigger = &cloudfunctions.EventTrigger{ + // Other events are not supported + EventType: "providers/cloud.pubsub/eventTypes/topic.publish", + // Must be like projects/PROJECT_ID/topics/NAME + // Topic must be in same project as function + Resource: fmt.Sprintf("projects/%s/topics/%s", project, v.(string)), + } + } + + v, triggBucketOk := d.GetOk("trigger_bucket") + if triggBucketOk { + // Make Storage event as in https://cloud.google.com/functions/docs/calling/storage + function.EventTrigger = &cloudfunctions.EventTrigger{ + EventType: "providers/cloud.storage/eventTypes/object.change", + // Must be like projects/PROJECT_ID/buckets/NAME + // Bucket must be in same project as function + Resource: fmt.Sprintf("projects/%s/buckets/%s", project, v.(string)), + } + } + + if !triggHttpOk && !triggTopicOk && !triggBucketOk { + return fmt.Errorf("One of arguments [trigger_topic, trigger_bucket, trigger_http] is required: " + + "You must specify a trigger when deploying a new function.") + } + + if _, ok := d.GetOk("labels"); ok { + function.Labels = expandLabels(d) + } + + log.Printf("[DEBUG] Creating cloud function: %s", function.Name) + op, err := config.clientCloudFunctions.Projects.Locations.Functions.Create( + cloudFuncId.locationId(), function).Do() + if err != nil { + return err + } + + // Name of function should be unique + d.SetId(cloudFuncId.terraformId()) + + err = cloudFunctionsOperationWait(config.clientCloudFunctions, op, "Creating CloudFunctions Function") + if err != nil { + return err + } + + return resourceCloudFunctionsRead(d, meta) +} + +func resourceCloudFunctionsRead(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + cloudFuncId, err := parseCloudFunctionId(d.Id(), config) + if err != nil { + return err + } + + function, err := config.clientCloudFunctions.Projects.Locations.Functions.Get(cloudFuncId.cloudFunctionId()).Do() + if err != nil { + return handleNotFoundError(err, d, fmt.Sprintf("Target CloudFunctions Function %q", cloudFuncId.Name)) + } + + d.Set("name", cloudFuncId.Name) + d.Set("description", function.Description) + d.Set("entry_point", function.EntryPoint) + d.Set("available_memory_mb", function.AvailableMemoryMb) + sRemoved := strings.Replace(function.Timeout, "s", "", -1) + timeout, err := strconv.Atoi(sRemoved) + if err != nil { + return err + } + d.Set("timeout", timeout) + d.Set("labels", function.Labels) + if function.SourceArchiveUrl != "" { + sourceArr := strings.Split(function.SourceArchiveUrl, "/") + d.Set("source_archive_bucket", sourceArr[2]) + d.Set("source_archive_object", sourceArr[3]) + } + + if function.HttpsTrigger != nil { + d.Set("trigger_http", true) + d.Set("https_trigger_url", function.HttpsTrigger.Url) + } + + if function.EventTrigger != nil { + switch function.EventTrigger.EventType { + // From https://github.com/google/google-api-go-client/blob/master/cloudfunctions/v1/cloudfunctions-gen.go#L335 + case "providers/cloud.pubsub/eventTypes/topic.publish": + d.Set("trigger_topic", extractLastResourceFromUri(function.EventTrigger.Resource)) + case "providers/cloud.storage/eventTypes/object.change": + d.Set("trigger_bucket", extractLastResourceFromUri(function.EventTrigger.Resource)) + } + } + d.Set("region", cloudFuncId.Region) + d.Set("project", cloudFuncId.Project) + + return nil +} + +func resourceCloudFunctionsUpdate(d *schema.ResourceData, meta interface{}) error { + log.Printf("[DEBUG]: Updating google_cloudfunctions_function") + config := meta.(*Config) + + cloudFuncId, err := parseCloudFunctionId(d.Id(), config) + if err != nil { + return err + } + + d.Partial(true) + + function := cloudfunctions.CloudFunction{ + Name: cloudFuncId.cloudFunctionId(), + } + + var updateMaskArr []string + if d.HasChange("available_memory_mb") { + availableMemoryMb := d.Get("available_memory_mb").(int) + function.AvailableMemoryMb = int64(availableMemoryMb) + updateMaskArr = append(updateMaskArr, "availableMemoryMb") + } + + if d.HasChange("description") { + function.Description = d.Get("description").(string) + updateMaskArr = append(updateMaskArr, "description") + } + + if d.HasChange("timeout") { + function.Timeout = fmt.Sprintf("%vs", d.Get("timeout").(int)) + updateMaskArr = append(updateMaskArr, "timeout") + } + + if d.HasChange("labels") { + function.Labels = expandLabels(d) + updateMaskArr = append(updateMaskArr, "labels") + } + + if len(updateMaskArr) > 0 { + log.Printf("[DEBUG] Send Patch CloudFunction Configuration request: %#v", function) + updateMask := strings.Join(updateMaskArr, ",") + op, err := config.clientCloudFunctions.Projects.Locations.Functions.Patch(function.Name, &function). + UpdateMask(updateMask).Do() + + if err != nil { + return fmt.Errorf("Error while updating cloudfunction configuration: %s", err) + } + + err = cloudFunctionsOperationWait(config.clientCloudFunctions, op, + "Updating CloudFunctions Function") + if err != nil { + return err + } + } + d.Partial(false) + + return resourceCloudFunctionsRead(d, meta) +} + +func resourceCloudFunctionsDestroy(d *schema.ResourceData, meta interface{}) error { + config := meta.(*Config) + + cloudFuncId, err := parseCloudFunctionId(d.Id(), config) + if err != nil { + return err + } + + op, err := config.clientCloudFunctions.Projects.Locations.Functions.Delete(cloudFuncId.cloudFunctionId()).Do() + if err != nil { + return err + } + err = cloudFunctionsOperationWait(config.clientCloudFunctions, op, "Deleting CloudFunctions Function") + if err != nil { + return err + } + + d.SetId("") + + return nil +} diff --git a/google/resource_cloudfunctions_function_test.go b/google/resource_cloudfunctions_function_test.go new file mode 100644 index 00000000000..dec5f4658bf --- /dev/null +++ b/google/resource_cloudfunctions_function_test.go @@ -0,0 +1,471 @@ +package google + +import ( + "bytes" + "fmt" + "os" + "strings" + "testing" + + "archive/zip" + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/terraform" + "google.golang.org/api/cloudfunctions/v1" + "io/ioutil" +) + +const ( + FUNCTION_TRIGGER_HTTP = iota + FUNCTION_TRIGGER_TOPIC + FUNCTION_TRIGGER_BUCKET +) + +const testHTTPTriggerPath = "./test-fixtures/cloudfunctions/http_trigger.js" +const testPubSubTriggerPath = "./test-fixtures/cloudfunctions/pubsub_trigger.js" +const testBucketTriggerPath = "./test-fixtures/cloudfunctions/bucket_trigger.js" + +func TestAccCloudFunctionsFunction_basic(t *testing.T) { + t.Parallel() + + var function cloudfunctions.CloudFunction + + funcResourceName := "google_cloudfunctions_function.function" + functionName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + bucketName := fmt.Sprintf("tf-test-bucket-%d", acctest.RandInt()) + zipFilePath, err := createZIPArchiveForIndexJs(testHTTPTriggerPath) + if err != nil { + t.Fatal(err.Error()) + } + defer os.Remove(zipFilePath) // clean up + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFunctionsFunctionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCloudFunctionsFunction_basic(functionName, bucketName, zipFilePath), + Check: resource.ComposeTestCheckFunc( + testAccCloudFunctionsFunctionExists( + funcResourceName, &function), + resource.TestCheckResourceAttr(funcResourceName, + "name", functionName), + resource.TestCheckResourceAttr(funcResourceName, + "description", "test function"), + resource.TestCheckResourceAttr(funcResourceName, + "available_memory_mb", "128"), + testAccCloudFunctionsFunctionSource(fmt.Sprintf("gs://%s/index.zip", bucketName), &function), + testAccCloudFunctionsFunctionTrigger(FUNCTION_TRIGGER_HTTP, &function), + resource.TestCheckResourceAttr(funcResourceName, + "timeout", "61"), + resource.TestCheckResourceAttr(funcResourceName, + "entry_point", "helloGET"), + resource.TestCheckResourceAttr(funcResourceName, + "trigger_http", "true"), + testAccCloudFunctionsFunctionHasLabel("my-label", "my-label-value", &function), + ), + }, + { + ResourceName: funcResourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccCloudFunctionsFunction_update(t *testing.T) { + t.Parallel() + + var function cloudfunctions.CloudFunction + + funcResourceName := "google_cloudfunctions_function.function" + functionName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + bucketName := fmt.Sprintf("tf-test-bucket-%d", acctest.RandInt()) + zipFilePath, err := createZIPArchiveForIndexJs(testHTTPTriggerPath) + if err != nil { + t.Fatal(err.Error()) + } + defer os.Remove(zipFilePath) // clean up + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCloudFunctionsFunction_basic(functionName, bucketName, zipFilePath), + Check: resource.ComposeTestCheckFunc( + testAccCloudFunctionsFunctionExists( + funcResourceName, &function), + resource.TestCheckResourceAttr(funcResourceName, + "available_memory_mb", "128"), + testAccCloudFunctionsFunctionHasLabel("my-label", "my-label-value", &function), + ), + }, + { + Config: testAccCloudFunctionsFunction_updated(functionName, bucketName, zipFilePath), + Check: resource.ComposeTestCheckFunc( + testAccCloudFunctionsFunctionExists( + funcResourceName, &function), + resource.TestCheckResourceAttr(funcResourceName, + "available_memory_mb", "256"), + resource.TestCheckResourceAttr(funcResourceName, + "description", "test function updated"), + resource.TestCheckResourceAttr(funcResourceName, + "timeout", "91"), + testAccCloudFunctionsFunctionHasLabel("my-label", "my-updated-label-value", &function), + testAccCloudFunctionsFunctionHasLabel("a-new-label", "a-new-label-value", &function), + ), + }, + }, + }) +} + +func TestAccCloudFunctionsFunction_pubsub(t *testing.T) { + t.Parallel() + + var function cloudfunctions.CloudFunction + + funcResourceName := "google_cloudfunctions_function.function" + functionName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + bucketName := fmt.Sprintf("tf-test-bucket-%d", acctest.RandInt()) + topicName := fmt.Sprintf("tf-test-sub-%s", acctest.RandString(10)) + zipFilePath, err := createZIPArchiveForIndexJs(testPubSubTriggerPath) + if err != nil { + t.Fatal(err.Error()) + } + defer os.Remove(zipFilePath) // clean up + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFunctionsFunctionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCloudFunctionsFunction_pubsub(functionName, bucketName, + topicName, zipFilePath), + Check: resource.ComposeTestCheckFunc( + testAccCloudFunctionsFunctionExists( + funcResourceName, &function), + resource.TestCheckResourceAttr(funcResourceName, + "available_memory_mb", "128"), + testAccCloudFunctionsFunctionSource(fmt.Sprintf("gs://%s/index.zip", bucketName), &function), + testAccCloudFunctionsFunctionTrigger(FUNCTION_TRIGGER_TOPIC, &function), + resource.TestCheckResourceAttr(funcResourceName, + "timeout", "61"), + resource.TestCheckResourceAttr(funcResourceName, + "entry_point", "helloPubSub"), + resource.TestCheckResourceAttr(funcResourceName, + "trigger_topic", topicName), + ), + }, + { + ResourceName: funcResourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} +func TestAccCloudFunctionsFunction_bucket(t *testing.T) { + t.Parallel() + + var function cloudfunctions.CloudFunction + + funcResourceName := "google_cloudfunctions_function.function" + functionName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + bucketName := fmt.Sprintf("tf-test-bucket-%d", acctest.RandInt()) + zipFilePath, err := createZIPArchiveForIndexJs(testBucketTriggerPath) + if err != nil { + t.Fatal(err.Error()) + } + defer os.Remove(zipFilePath) // clean up + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFunctionsFunctionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCloudFunctionsFunction_bucket(functionName, bucketName, zipFilePath), + Check: resource.ComposeTestCheckFunc( + testAccCloudFunctionsFunctionExists( + funcResourceName, &function), + resource.TestCheckResourceAttr(funcResourceName, + "available_memory_mb", "128"), + testAccCloudFunctionsFunctionSource(fmt.Sprintf("gs://%s/index.zip", bucketName), &function), + testAccCloudFunctionsFunctionTrigger(FUNCTION_TRIGGER_BUCKET, &function), + resource.TestCheckResourceAttr(funcResourceName, + "timeout", "61"), + resource.TestCheckResourceAttr(funcResourceName, + "entry_point", "helloGCS"), + resource.TestCheckResourceAttr(funcResourceName, + "trigger_bucket", bucketName), + ), + }, + { + ResourceName: funcResourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckCloudFunctionsFunctionDestroy(s *terraform.State) error { + config := testAccProvider.Meta().(*Config) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "google_cloudfunctions_function" { + continue + } + + name := rs.Primary.Attributes["name"] + project := rs.Primary.Attributes["project"] + region := rs.Primary.Attributes["region"] + cloudFuncId := &cloudFunctionId{ + Project: project, + Region: region, + Name: name, + } + _, err := config.clientCloudFunctions.Projects.Locations.Functions.Get(cloudFuncId.cloudFunctionId()).Do() + if err == nil { + return fmt.Errorf("Function still exists") + } + + } + + return nil +} + +func testAccCloudFunctionsFunctionExists(n string, function *cloudfunctions.CloudFunction) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No ID is set") + } + config := testAccProvider.Meta().(*Config) + name := rs.Primary.Attributes["name"] + project := rs.Primary.Attributes["project"] + region := rs.Primary.Attributes["region"] + cloudFuncId := &cloudFunctionId{ + Project: project, + Region: region, + Name: name, + } + found, err := config.clientCloudFunctions.Projects.Locations.Functions.Get(cloudFuncId.cloudFunctionId()).Do() + if err != nil { + return fmt.Errorf("CloudFunctions Function not present") + } + + *function = *found + + return nil + } +} + +func testAccCloudFunctionsFunctionSource(n string, function *cloudfunctions.CloudFunction) resource.TestCheckFunc { + return func(s *terraform.State) error { + if n != function.SourceArchiveUrl { + return fmt.Errorf("Expected source to be %v, got %v", n, function.EntryPoint) + } + return nil + } +} + +func testAccCloudFunctionsFunctionTrigger(n int, function *cloudfunctions.CloudFunction) resource.TestCheckFunc { + return func(s *terraform.State) error { + switch n { + case FUNCTION_TRIGGER_HTTP: + if function.HttpsTrigger == nil { + return fmt.Errorf("Expected HttpsTrigger to be set") + } + case FUNCTION_TRIGGER_BUCKET: + if function.EventTrigger == nil { + return fmt.Errorf("Expected EventTrigger to be set") + } + if strings.Index(function.EventTrigger.EventType, "cloud.storage") == -1 { + return fmt.Errorf("Expected cloud.storage EventType, found %s", function.EventTrigger.EventType) + } + case FUNCTION_TRIGGER_TOPIC: + if function.EventTrigger == nil { + return fmt.Errorf("Expected EventTrigger to be set") + } + if strings.Index(function.EventTrigger.EventType, "cloud.pubsub") == -1 { + return fmt.Errorf("Expected cloud.pubsub EventType, found %s", function.EventTrigger.EventType) + } + default: + return fmt.Errorf("testAccCloudFunctionsFunctionTrigger expects only FUNCTION_TRIGGER_HTTP, " + + "FUNCTION_TRIGGER_BUCKET or FUNCTION_TRIGGER_TOPIC") + } + return nil + } +} + +func testAccCloudFunctionsFunctionHasLabel(key, value string, + function *cloudfunctions.CloudFunction) resource.TestCheckFunc { + return func(s *terraform.State) error { + val, ok := function.Labels[key] + if !ok { + return fmt.Errorf("Label with key %s not found", key) + } + + if val != value { + return fmt.Errorf("Label value did not match for key %s: expected %s but found %s", key, value, val) + } + return nil + } +} + +func createZIPArchiveForIndexJs(sourcePath string) (string, error) { + source, err := ioutil.ReadFile(sourcePath) + if err != nil { + return "", err + } + // Create a buffer to write our archive to. + buf := new(bytes.Buffer) + + // Create a new zip archive. + w := zip.NewWriter(buf) + + f, err := w.Create("index.js") + if err != nil { + return "", err + } + _, err = f.Write(source) + if err != nil { + return "", err + } + + // Make sure to check the error on Close. + err = w.Close() + if err != nil { + return "", err + } + // Create temp file to write zip to + tmpfile, err := ioutil.TempFile("", "zip") + if err != nil { + return "", err + } + + if _, err := tmpfile.Write(buf.Bytes()); err != nil { + return "", err + } + if err := tmpfile.Close(); err != nil { + return "", err + } + return tmpfile.Name(), nil +} + +func testAccCloudFunctionsFunction_basic(functionName string, bucketName string, zipFilePath string) string { + return fmt.Sprintf(` +resource "google_storage_bucket" "bucket" { + name = "%s" +} + +resource "google_storage_bucket_object" "archive" { + name = "index.zip" + bucket = "${google_storage_bucket.bucket.name}" + source = "%s" +} + +resource "google_cloudfunctions_function" "function" { + name = "%s" + description = "test function" + available_memory_mb = 128 + source_archive_bucket = "${google_storage_bucket.bucket.name}" + source_archive_object = "${google_storage_bucket_object.archive.name}" + trigger_http = true + timeout = 61 + entry_point = "helloGET" + labels { + my-label = "my-label-value" + } +} +`, bucketName, zipFilePath, functionName) +} + +func testAccCloudFunctionsFunction_updated(functionName string, bucketName string, zipFilePath string) string { + return fmt.Sprintf(` +resource "google_storage_bucket" "bucket" { + name = "%s" +} + +resource "google_storage_bucket_object" "archive" { + name = "index.zip" + bucket = "${google_storage_bucket.bucket.name}" + source = "%s" +} + +resource "google_cloudfunctions_function" "function" { + name = "%s" + description = "test function updated" + available_memory_mb = 256 + source_archive_bucket = "${google_storage_bucket.bucket.name}" + source_archive_object = "${google_storage_bucket_object.archive.name}" + trigger_http = true + timeout = 91 + entry_point = "helloGET" + labels { + my-label = "my-updated-label-value" + a-new-label = "a-new-label-value" + } +}`, bucketName, zipFilePath, functionName) +} + +func testAccCloudFunctionsFunction_pubsub(functionName string, bucketName string, + topic string, zipFilePath string) string { + return fmt.Sprintf(` +resource "google_storage_bucket" "bucket" { + name = "%s" +} + +resource "google_storage_bucket_object" "archive" { + name = "index.zip" + bucket = "${google_storage_bucket.bucket.name}" + source = "%s" +} + +resource "google_pubsub_topic" "sub" { + name = "%s" +} + +resource "google_cloudfunctions_function" "function" { + name = "%s" + available_memory_mb = 128 + source_archive_bucket = "${google_storage_bucket.bucket.name}" + source_archive_object = "${google_storage_bucket_object.archive.name}" + trigger_topic = "${google_pubsub_topic.sub.name}" + timeout = 61 + entry_point = "helloPubSub" +}`, bucketName, zipFilePath, topic, functionName) +} + +func testAccCloudFunctionsFunction_bucket(functionName string, bucketName string, + zipFilePath string) string { + return fmt.Sprintf(` +resource "google_storage_bucket" "bucket" { + name = "%s" +} + +resource "google_storage_bucket_object" "archive" { + name = "index.zip" + bucket = "${google_storage_bucket.bucket.name}" + source = "%s" +} + +resource "google_cloudfunctions_function" "function" { + name = "%s" + available_memory_mb = 128 + source_archive_bucket = "${google_storage_bucket.bucket.name}" + source_archive_object = "${google_storage_bucket_object.archive.name}" + trigger_bucket = "${google_storage_bucket.bucket.name}" + timeout = 61 + entry_point = "helloGCS" +}`, bucketName, zipFilePath, functionName) +} diff --git a/google/test-fixtures/cloudfunctions/bucket_trigger.js b/google/test-fixtures/cloudfunctions/bucket_trigger.js new file mode 100644 index 00000000000..93d66233ecc --- /dev/null +++ b/google/test-fixtures/cloudfunctions/bucket_trigger.js @@ -0,0 +1,21 @@ +/** + * Background Cloud Function to be triggered by Cloud Storage. + * + * @param {object} event The Cloud Functions event. + * @param {function} callback The callback function. + */ +exports.helloGCS = function (event, callback) { + const file = event.data; + + if (file.resourceState === 'not_exists') { + console.log(`File ${file.name} deleted.`); + } else if (file.metageneration === '1') { + // metageneration attribute is updated on metadata changes. + // on create value is 1 + console.log(`File ${file.name} uploaded.`); + } else { + console.log(`File ${file.name} metadata updated.`); + } + + callback(); +}; \ No newline at end of file diff --git a/google/test-fixtures/cloudfunctions/http_trigger.js b/google/test-fixtures/cloudfunctions/http_trigger.js new file mode 100644 index 00000000000..1b486f0986c --- /dev/null +++ b/google/test-fixtures/cloudfunctions/http_trigger.js @@ -0,0 +1,9 @@ +/** + * HTTP Cloud Function. + * + * @param {Object} req Cloud Function request context. + * @param {Object} res Cloud Function response context. + */ +exports.helloGET = function helloGET (req, res) { + res.send("Hello ${req.body.name || 'World'}!"); +}; diff --git a/google/test-fixtures/cloudfunctions/pubsub_trigger.js b/google/test-fixtures/cloudfunctions/pubsub_trigger.js new file mode 100644 index 00000000000..4a49705a457 --- /dev/null +++ b/google/test-fixtures/cloudfunctions/pubsub_trigger.js @@ -0,0 +1,14 @@ +/** + * Background Cloud Function to be triggered by Pub/Sub. + * + * @param {object} event The Cloud Functions event. + * @param {function} callback The callback function. + */ +exports.helloPubSub = function (event, callback) { + const pubsubMessage = event.data; + const name = pubsubMessage.data ? Buffer.from(pubsubMessage.data, 'base64').toString() : 'World'; + + console.log(`Hello, ${name}!`); + + callback(); +}; \ No newline at end of file diff --git a/vendor/google.golang.org/api/cloudfunctions/v1/cloudfunctions-api.json b/vendor/google.golang.org/api/cloudfunctions/v1/cloudfunctions-api.json new file mode 100644 index 00000000000..1726c80ddea --- /dev/null +++ b/vendor/google.golang.org/api/cloudfunctions/v1/cloudfunctions-api.json @@ -0,0 +1,942 @@ +{ + "protocol": "rest", + "icons": { + "x32": "http://www.google.com/images/icons/product/search-32.gif", + "x16": "http://www.google.com/images/icons/product/search-16.gif" + }, + "canonicalName": "Cloud Functions", + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/cloud-platform": { + "description": "View and manage your data across Google Cloud Platform services" + } + } + } + }, + "rootUrl": "https://cloudfunctions.googleapis.com/", + "ownerDomain": "google.com", + "name": "cloudfunctions", + "batchPath": "batch", + "fullyEncodeReservedExpansion": true, + "title": "Google Cloud Functions API", + "ownerName": "Google", + "resources": { + "operations": { + "methods": { + "list": { + "httpMethod": "GET", + "response": { + "$ref": "ListOperationsResponse" + }, + "parameterOrder": [], + "parameters": { + "filter": { + "type": "string", + "location": "query", + "description": "The standard list filter." + }, + "name": { + "location": "query", + "description": "The name of the operation's parent resource.", + "type": "string" + }, + "pageToken": { + "location": "query", + "description": "The standard list page token.", + "type": "string" + }, + "pageSize": { + "type": "integer", + "location": "query", + "description": "The standard list page size.", + "format": "int32" + } + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "flatPath": "v1/operations", + "id": "cloudfunctions.operations.list", + "path": "v1/operations", + "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`. To\noverride the binding, API services can add a binding such as\n`\"/v1/{name=users/*}/operations\"` to their service configuration.\nFor backwards compatibility, the default name includes the operations\ncollection id, however overriding users must ensure the name binding\nis the parent resource, without the operations collection id." + }, + "get": { + "httpMethod": "GET", + "response": { + "$ref": "Operation" + }, + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "required": true, + "type": "string", + "pattern": "^operations/[^/]+$", + "location": "path", + "description": "The name of the operation resource." + } + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "flatPath": "v1/operations/{operationsId}", + "id": "cloudfunctions.operations.get", + "path": "v1/{+name}", + "description": "Gets the latest state of a long-running operation. Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice." + } + } + }, + "projects": { + "resources": { + "locations": { + "methods": { + "list": { + "httpMethod": "GET", + "response": { + "$ref": "ListLocationsResponse" + }, + "parameterOrder": [ + "name" + ], + "parameters": { + "filter": { + "type": "string", + "location": "query", + "description": "The standard list filter." + }, + "name": { + "location": "path", + "description": "The resource that owns the locations collection, if applicable.", + "required": true, + "type": "string", + "pattern": "^projects/[^/]+$" + }, + "pageToken": { + "location": "query", + "description": "The standard list page token.", + "type": "string" + }, + "pageSize": { + "type": "integer", + "location": "query", + "description": "The standard list page size.", + "format": "int32" + } + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "flatPath": "v1/projects/{projectsId}/locations", + "id": "cloudfunctions.projects.locations.list", + "path": "v1/{+name}/locations", + "description": "Lists information about the supported locations for this service." + } + }, + "resources": { + "functions": { + "methods": { + "patch": { + "response": { + "$ref": "Operation" + }, + "parameterOrder": [ + "name" + ], + "httpMethod": "PATCH", + "parameters": { + "updateMask": { + "location": "query", + "description": "Required list of fields to be updated in this request.", + "format": "google-fieldmask", + "type": "string" + }, + "name": { + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + "location": "path", + "description": "A user-defined name of the function. Function names must be unique\nglobally and match pattern `projects/*/locations/*/functions/*`" + } + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", + "path": "v1/{+name}", + "id": "cloudfunctions.projects.locations.functions.patch", + "request": { + "$ref": "CloudFunction" + }, + "description": "Updates existing function." + }, + "get": { + "response": { + "$ref": "CloudFunction" + }, + "parameterOrder": [ + "name" + ], + "httpMethod": "GET", + "parameters": { + "name": { + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + "location": "path", + "description": "The name of the function which details should be obtained." + } + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", + "path": "v1/{+name}", + "id": "cloudfunctions.projects.locations.functions.get", + "description": "Returns a function with the given name from the requested project." + }, + "delete": { + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", + "id": "cloudfunctions.projects.locations.functions.delete", + "path": "v1/{+name}", + "description": "Deletes a function with the given name from the specified project. If the\ngiven function is used by some trigger, the trigger will be updated to\nremove this function.", + "httpMethod": "DELETE", + "response": { + "$ref": "Operation" + }, + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + "location": "path", + "description": "The name of the function which should be deleted." + } + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions", + "path": "v1/{+parent}/functions", + "id": "cloudfunctions.projects.locations.functions.list", + "description": "Returns a list of functions that belong to the requested project.", + "response": { + "$ref": "ListFunctionsResponse" + }, + "parameterOrder": [ + "parent" + ], + "httpMethod": "GET", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "parameters": { + "pageToken": { + "location": "query", + "description": "The value returned by the last\n`ListFunctionsResponse`; indicates that\nthis is a continuation of a prior `ListFunctions` call, and that the\nsystem should return the next page of data.", + "type": "string" + }, + "pageSize": { + "type": "integer", + "location": "query", + "description": "Maximum number of functions to return per call.", + "format": "int32" + }, + "parent": { + "location": "path", + "description": "The project and location from which the function should be listed,\nspecified in the format `projects/*/locations/*`\nIf you want to list functions in all locations, use \"-\" in place of a\nlocation.", + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+$" + } + } + }, + "call": { + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:call", + "path": "v1/{+name}:call", + "id": "cloudfunctions.projects.locations.functions.call", + "description": "Invokes synchronously deployed function. To be used for testing, very\nlimited traffic allowed.", + "request": { + "$ref": "CallFunctionRequest" + }, + "response": { + "$ref": "CallFunctionResponse" + }, + "parameterOrder": [ + "name" + ], + "httpMethod": "POST", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "parameters": { + "name": { + "location": "path", + "description": "The name of the function to be called.", + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$" + } + } + }, + "create": { + "httpMethod": "POST", + "parameterOrder": [ + "location" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "parameters": { + "location": { + "location": "path", + "description": "The project and location in which the function should be created, specified\nin the format `projects/*/locations/*`", + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+$" + } + }, + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions", + "id": "cloudfunctions.projects.locations.functions.create", + "path": "v1/{+location}/functions", + "description": "Creates a new function. If a function with the given name already exists in\nthe specified project, the long running operation will return\n`ALREADY_EXISTS` error.", + "request": { + "$ref": "CloudFunction" + } + }, + "generateUploadUrl": { + "description": "Returns a signed URL for uploading a function source code.\nFor more information about the signed URL usage see:\nhttps://cloud.google.com/storage/docs/access-control/signed-urls\nOnce the function source code upload is complete, the used signed\nURL should be provided in CreateFunction or UpdateFunction request\nas a reference to the function source code.", + "request": { + "$ref": "GenerateUploadUrlRequest" + }, + "response": { + "$ref": "GenerateUploadUrlResponse" + }, + "parameterOrder": [ + "parent" + ], + "httpMethod": "POST", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "parameters": { + "parent": { + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+$", + "location": "path", + "description": "The project and location in which the Google Cloud Storage signed URL\nshould be generated, specified in the format `projects/*/locations/*" + } + }, + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions:generateUploadUrl", + "path": "v1/{+parent}/functions:generateUploadUrl", + "id": "cloudfunctions.projects.locations.functions.generateUploadUrl" + }, + "generateDownloadUrl": { + "response": { + "$ref": "GenerateDownloadUrlResponse" + }, + "parameterOrder": [ + "name" + ], + "httpMethod": "POST", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "parameters": { + "name": { + "location": "path", + "description": "The name of function for which source code Google Cloud Storage signed\nURL should be generated.", + "required": true, + "type": "string", + "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$" + } + }, + "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:generateDownloadUrl", + "path": "v1/{+name}:generateDownloadUrl", + "id": "cloudfunctions.projects.locations.functions.generateDownloadUrl", + "description": "Returns a signed URL for downloading deployed function source code.\nThe URL is only valid for a limited period and should be used within\nminutes after generation.\nFor more information about the signed URL usage see:\nhttps://cloud.google.com/storage/docs/access-control/signed-urls", + "request": { + "$ref": "GenerateDownloadUrlRequest" + } + } + } + } + } + } + } + } + }, + "parameters": { + "upload_protocol": { + "type": "string", + "location": "query", + "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")." + }, + "prettyPrint": { + "type": "boolean", + "default": "true", + "location": "query", + "description": "Returns response with indentations and line breaks." + }, + "fields": { + "type": "string", + "location": "query", + "description": "Selector specifying which fields to include in a partial response." + }, + "uploadType": { + "type": "string", + "location": "query", + "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")." + }, + "$.xgafv": { + "location": "query", + "enum": [ + "1", + "2" + ], + "description": "V1 error format.", + "type": "string", + "enumDescriptions": [ + "v1 error format", + "v2 error format" + ] + }, + "callback": { + "type": "string", + "location": "query", + "description": "JSONP" + }, + "alt": { + "enum": [ + "json", + "media", + "proto" + ], + "type": "string", + "enumDescriptions": [ + "Responses with Content-Type of application/json", + "Media download with context-dependent Content-Type", + "Responses with Content-Type of application/x-protobuf" + ], + "location": "query", + "description": "Data format for response.", + "default": "json" + }, + "access_token": { + "type": "string", + "location": "query", + "description": "OAuth access token." + }, + "key": { + "location": "query", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "type": "string" + }, + "quotaUser": { + "type": "string", + "location": "query", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters." + }, + "pp": { + "type": "boolean", + "default": "true", + "location": "query", + "description": "Pretty-print response." + }, + "oauth_token": { + "type": "string", + "location": "query", + "description": "OAuth 2.0 token for the current user." + }, + "bearer_token": { + "type": "string", + "location": "query", + "description": "OAuth bearer token." + } + }, + "version": "v1", + "baseUrl": "https://cloudfunctions.googleapis.com/", + "servicePath": "", + "description": "API for managing lightweight user-provided functions executed in response to events.", + "kind": "discovery#restDescription", + "basePath": "", + "documentationLink": "https://cloud.google.com/functions", + "id": "cloudfunctions:v1", + "revision": "20171206", + "discoveryVersion": "v1", + "version_module": true, + "schemas": { + "OperationMetadataV1Beta2": { + "description": "Metadata describing an Operation", + "type": "object", + "properties": { + "type": { + "enum": [ + "OPERATION_UNSPECIFIED", + "CREATE_FUNCTION", + "UPDATE_FUNCTION", + "DELETE_FUNCTION" + ], + "description": "Type of operation.", + "type": "string", + "enumDescriptions": [ + "Unknown operation type.", + "Triggered by CreateFunction call", + "Triggered by UpdateFunction call", + "Triggered by DeleteFunction call." + ] + }, + "updateTime": { + "type": "string", + "description": "The last update timestamp of the operation.", + "format": "google-datetime" + }, + "target": { + "type": "string", + "description": "Target of the operation - for example\nprojects/project-1/locations/region-1/functions/function-1" + }, + "request": { + "additionalProperties": { + "type": "any", + "description": "Properties of the object. Contains field @type with type URL." + }, + "description": "The original request that started the operation.", + "type": "object" + }, + "versionId": { + "description": "Version id of the function created or updated by an API call.\nThis field is only pupulated for Create and Update operations.", + "format": "int64", + "type": "string" + } + }, + "id": "OperationMetadataV1Beta2" + }, + "Status": { + "type": "object", + "properties": { + "code": { + "description": "The status code, which should be an enum value of google.rpc.Code.", + "format": "int32", + "type": "integer" + }, + "message": { + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.", + "type": "string" + }, + "details": { + "type": "array", + "items": { + "additionalProperties": { + "type": "any", + "description": "Properties of the object. Contains field @type with type URL." + }, + "type": "object" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "id": "Status", + "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons." + }, + "CallFunctionRequest": { + "type": "object", + "properties": { + "data": { + "type": "string", + "description": "Input to be passed to the function." + } + }, + "id": "CallFunctionRequest", + "description": "Request for the `CallFunction` method." + }, + "SourceRepository": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The URL pointing to the hosted repository where the function is defined.\nThere are supported Cloud Source Repository URLs in the following\nformats:\n\nTo refer to a specific commit:\n`https://source.developers.google.com/projects/*/repos/*/revisions/*/paths/*`\nTo refer to a moveable alias (branch):\n`https://source.developers.google.com/projects/*/repos/*/moveable-aliases/*/paths/*`\nIn particular, to refer to HEAD use `master` moveable alias.\nTo refer to a specific fixed alias (tag):\n`https://source.developers.google.com/projects/*/repos/*/fixed-aliases/*/paths/*`\n\nYou may omit `paths/*` if you want to use the main directory." + }, + "deployedUrl": { + "type": "string", + "description": "Output only. The URL pointing to the hosted repository where the function\nwere defined at the time of deployment. It always points to a specific\ncommit in the format described above." + } + }, + "id": "SourceRepository", + "description": "Describes SourceRepository, used to represent parameters related to\nsource repository where a function is hosted." + }, + "CloudFunction": { + "type": "object", + "properties": { + "sourceUploadUrl": { + "type": "string", + "description": "The Google Cloud Storage signed URL used for source uploading, generated\nby google.cloud.functions.v1.GenerateUploadUrl" + }, + "eventTrigger": { + "$ref": "EventTrigger", + "description": "A source that fires events in response to a condition in another service." + }, + "status": { + "enum": [ + "CLOUD_FUNCTION_STATUS_UNSPECIFIED", + "ACTIVE", + "OFFLINE", + "DEPLOY_IN_PROGRESS", + "DELETE_IN_PROGRESS", + "UNKNOWN" + ], + "description": "Output only. Status of the function deployment.", + "type": "string", + "enumDescriptions": [ + "Not specified. Invalid state.", + "Function has been succesfully deployed and is serving.", + "Function deployment failed and the function isn’t serving.", + "Function is being created or updated.", + "Function is being deleted.", + "Function deployment failed and the function serving state is undefined.\nThe function should be updated or deleted to move it out of this state." + ] + }, + "timeout": { + "type": "string", + "description": "The function execution timeout. Execution is considered failed and\ncan be terminated if the function is not completed at the end of the\ntimeout period. Defaults to 60 seconds.", + "format": "google-duration" + }, + "availableMemoryMb": { + "description": "The amount of memory in MB available for a function.\nDefaults to 256MB.", + "format": "int32", + "type": "integer" + }, + "name": { + "description": "A user-defined name of the function. Function names must be unique\nglobally and match pattern `projects/*/locations/*/functions/*`", + "type": "string" + }, + "versionId": { + "type": "string", + "description": "Output only.\nThe version identifier of the Cloud Function. Each deployment attempt\nresults in a new version of a function being created.", + "format": "int64" + }, + "sourceArchiveUrl": { + "type": "string", + "description": "The Google Cloud Storage URL, starting with gs://, pointing to the zip\narchive which contains the function." + }, + "sourceRepository": { + "$ref": "SourceRepository", + "description": "**Beta Feature**\n\nThe source repository where a function is hosted." + }, + "entryPoint": { + "type": "string", + "description": "The name of the function (as defined in source code) that will be\nexecuted. Defaults to the resource name suffix, if not specified. For\nbackward compatibility, if function with given name is not found, then the\nsystem will try to use function named \"function\".\nFor Node.js this is name of a function exported by the module specified\nin `source_location`." + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels associated with this Cloud Function." + }, + "updateTime": { + "type": "string", + "description": "Output only. The last update timestamp of a Cloud Function.", + "format": "google-datetime" + }, + "httpsTrigger": { + "$ref": "HttpsTrigger", + "description": "An HTTPS endpoint type of source that can be triggered via URL." + }, + "serviceAccountEmail": { + "type": "string", + "description": "Output only. The email of the function's service account." + }, + "description": { + "type": "string", + "description": "User-provided description of a function." + } + }, + "id": "CloudFunction", + "description": "Describes a Cloud Function that contains user computation executed in\nresponse to an event. It encapsulate function and triggers configurations." + }, + "HttpsTrigger": { + "description": "Describes HttpsTrigger, could be used to connect web hooks to function.", + "type": "object", + "properties": { + "url": { + "description": "Output only. The deployed url for the function.", + "type": "string" + } + }, + "id": "HttpsTrigger" + }, + "Location": { + "description": "A resource that represents Google Cloud Platform location.", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Resource name for the location, which may vary between implementations.\nFor example: `\"projects/example-project/locations/us-east1\"`" + }, + "locationId": { + "description": "The canonical id for this location. For example: `\"us-east1\"`.", + "type": "string" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "Service-specific metadata. For example the available capacity at the given\nlocation." + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Cross-service attributes for the location. For example\n\n {\"cloud.googleapis.com/region\": \"us-east1\"}", + "type": "object" + } + }, + "id": "Location" + }, + "GenerateDownloadUrlResponse": { + "description": "Response of `GenerateDownloadUrl` method.", + "type": "object", + "properties": { + "downloadUrl": { + "description": "The generated Google Cloud Storage signed URL that should be used for\nfunction source code download.", + "type": "string" + } + }, + "id": "GenerateDownloadUrlResponse" + }, + "Retry": { + "type": "object", + "properties": {}, + "id": "Retry", + "description": "Describes the retry policy in case of function's execution failure.\nA function execution will be retried on any failure.\nA failed execution will be retried up to 7 days with an exponential backoff\n(capped at 10 seconds).\nRetried execution is charged as any other execution." + }, + "GenerateUploadUrlRequest": { + "type": "object", + "properties": {}, + "id": "GenerateUploadUrlRequest", + "description": "Request of `GenerateSourceUploadUrl` method." + }, + "ListOperationsResponse": { + "type": "object", + "properties": { + "operations": { + "description": "A list of operations that matches the specified filter in the request.", + "type": "array", + "items": { + "$ref": "Operation" + } + }, + "nextPageToken": { + "type": "string", + "description": "The standard List next-page token." + } + }, + "id": "ListOperationsResponse", + "description": "The response message for Operations.ListOperations." + }, + "GenerateUploadUrlResponse": { + "type": "object", + "properties": { + "uploadUrl": { + "type": "string", + "description": "The generated Google Cloud Storage signed URL that should be used for a\nfunction source code upload. The uploaded file should be a zip archive\nwhich contains a function." + } + }, + "id": "GenerateUploadUrlResponse", + "description": "Response of `GenerateSourceUploadUrl` method." + }, + "ListFunctionsResponse": { + "type": "object", + "properties": { + "nextPageToken": { + "description": "If not empty, indicates that there may be more functions that match\nthe request; this value should be passed in a new\ngoogle.cloud.functions.v1.ListFunctionsRequest\nto get more functions.", + "type": "string" + }, + "functions": { + "type": "array", + "items": { + "$ref": "CloudFunction" + }, + "description": "The functions that match the request." + } + }, + "id": "ListFunctionsResponse", + "description": "Response for the `ListFunctions` method." + }, + "CallFunctionResponse": { + "description": "Response of `CallFunction` method.", + "type": "object", + "properties": { + "executionId": { + "description": "Execution id of function invocation.", + "type": "string" + }, + "result": { + "description": "Result populated for successful execution of synchronous function. Will\nnot be populated if function does not return a result through context.", + "type": "string" + }, + "error": { + "description": "Either system or user-function generated error. Set if execution\nwas not successful.", + "type": "string" + } + }, + "id": "CallFunctionResponse" + }, + "ListLocationsResponse": { + "type": "object", + "properties": { + "nextPageToken": { + "type": "string", + "description": "The standard List next-page token." + }, + "locations": { + "type": "array", + "items": { + "$ref": "Location" + }, + "description": "A list of locations that matches the specified filter in the request." + } + }, + "id": "ListLocationsResponse", + "description": "The response message for Locations.ListLocations." + }, + "EventTrigger": { + "description": "Describes EventTrigger, used to request events be sent from another\nservice.", + "type": "object", + "properties": { + "eventType": { + "type": "string", + "description": "Required. The type of event to observe. For example:\n`providers/cloud.storage/eventTypes/object.change` and\n`providers/cloud.pubsub/eventTypes/topic.publish`.\n\nEvent types match pattern `providers/*/eventTypes/*.*`.\nThe pattern contains:\n 1. namespace: For example, `cloud.storage` and\n `google.firebase.analytics`.\n 2. resource type: The type of resource on which event occurs. For\n example, the Google Cloud Storage API includes the type `object`.\n 3. action: The action that generates the event. For example, action for\n a Google Cloud Storage Object is 'change'.\nThese parts are lower case." + }, + "resource": { + "description": "Required. The resource(s) from which to observe events, for example,\n`projects/_/buckets/myBucket`.\n\nNot all syntactically correct values are accepted by all services. For\nexample:\n\n1. The authorization model must support it. Google Cloud Functions\n only allows EventTriggers to be deployed that observe resources in the\n same project as the `CloudFunction`.\n2. The resource type must match the pattern expected for an\n `event_type`. For example, an `EventTrigger` that has an\n `event_type` of \"google.pubsub.topic.publish\" should have a resource\n that matches Google Cloud Pub/Sub topics.\n\nAdditionally, some services may support short names when creating an\n`EventTrigger`. These will always be returned in the normalized \"long\"\nformat.\n\nSee each *service's* documentation for supported formats.", + "type": "string" + }, + "service": { + "type": "string", + "description": "The hostname of the service that should be observed.\n\nIf no string is provided, the default service implementing the API will\nbe used. For example, `storage.googleapis.com` is the default for all\nevent types in the `google.storage` namespace." + }, + "failurePolicy": { + "$ref": "FailurePolicy", + "description": "Specifies policy for failed executions." + } + }, + "id": "EventTrigger" + }, + "OperationMetadataV1": { + "description": "Metadata describing an Operation", + "type": "object", + "properties": { + "updateTime": { + "description": "The last update timestamp of the operation.", + "format": "google-datetime", + "type": "string" + }, + "target": { + "description": "Target of the operation - for example\nprojects/project-1/locations/region-1/functions/function-1", + "type": "string" + }, + "request": { + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "The original request that started the operation.", + "type": "object" + }, + "versionId": { + "description": "Version id of the function created or updated by an API call.\nThis field is only pupulated for Create and Update operations.", + "format": "int64", + "type": "string" + }, + "type": { + "type": "string", + "enumDescriptions": [ + "Unknown operation type.", + "Triggered by CreateFunction call", + "Triggered by UpdateFunction call", + "Triggered by DeleteFunction call." + ], + "enum": [ + "OPERATION_UNSPECIFIED", + "CREATE_FUNCTION", + "UPDATE_FUNCTION", + "DELETE_FUNCTION" + ], + "description": "Type of operation." + } + }, + "id": "OperationMetadataV1" + }, + "GenerateDownloadUrlRequest": { + "type": "object", + "properties": { + "versionId": { + "description": "The optional version of function. If not set, default, current version\nis used.", + "format": "uint64", + "type": "string" + } + }, + "id": "GenerateDownloadUrlRequest", + "description": "Request of `GenerateDownloadUrl` method." + }, + "FailurePolicy": { + "description": "Describes the policy in case of function's execution failure.\nIf empty, then defaults to ignoring failures (i.e. not retrying them).", + "type": "object", + "properties": { + "retry": { + "$ref": "Retry", + "description": "If specified, then the function will be retried in case of a failure." + } + }, + "id": "FailurePolicy" + }, + "Operation": { + "type": "object", + "properties": { + "response": { + "type": "object", + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "The normal response of the operation in case of success. If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`. If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource. For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name. For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`." + }, + "name": { + "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.", + "type": "string" + }, + "error": { + "$ref": "Status", + "description": "The error result of the operation in case of failure or cancellation." + }, + "metadata": { + "type": "object", + "additionalProperties": { + "description": "Properties of the object. Contains field @type with type URL.", + "type": "any" + }, + "description": "Service-specific metadata associated with the operation. It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata. Any method that returns a\nlong-running operation should document the metadata type, if any." + }, + "done": { + "type": "boolean", + "description": "If the value is `false`, it means the operation is still in progress.\nIf `true`, the operation is completed, and either `error` or `response` is\navailable." + } + }, + "id": "Operation", + "description": "This resource represents a long-running operation that is the result of a\nnetwork API call." + } + } +} diff --git a/vendor/google.golang.org/api/cloudfunctions/v1/cloudfunctions-gen.go b/vendor/google.golang.org/api/cloudfunctions/v1/cloudfunctions-gen.go new file mode 100644 index 00000000000..4e1f95e6bb1 --- /dev/null +++ b/vendor/google.golang.org/api/cloudfunctions/v1/cloudfunctions-gen.go @@ -0,0 +1,2804 @@ +// Package cloudfunctions provides access to the Google Cloud Functions API. +// +// See https://cloud.google.com/functions +// +// Usage example: +// +// import "google.golang.org/api/cloudfunctions/v1" +// ... +// cloudfunctionsService, err := cloudfunctions.New(oauthHttpClient) +package cloudfunctions // import "google.golang.org/api/cloudfunctions/v1" + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + context "golang.org/x/net/context" + ctxhttp "golang.org/x/net/context/ctxhttp" + gensupport "google.golang.org/api/gensupport" + googleapi "google.golang.org/api/googleapi" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = gensupport.MarshalJSON +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace +var _ = context.Canceled +var _ = ctxhttp.Do + +const apiId = "cloudfunctions:v1" +const apiName = "cloudfunctions" +const apiVersion = "v1" +const basePath = "https://cloudfunctions.googleapis.com/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data across Google Cloud Platform services + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Operations = NewOperationsService(s) + s.Projects = NewProjectsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + UserAgent string // optional additional User-Agent fragment + + Operations *OperationsService + + Projects *ProjectsService +} + +func (s *Service) userAgent() string { + if s.UserAgent == "" { + return googleapi.UserAgent + } + return googleapi.UserAgent + " " + s.UserAgent +} + +func NewOperationsService(s *Service) *OperationsService { + rs := &OperationsService{s: s} + return rs +} + +type OperationsService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + rs.Locations = NewProjectsLocationsService(s) + return rs +} + +type ProjectsService struct { + s *Service + + Locations *ProjectsLocationsService +} + +func NewProjectsLocationsService(s *Service) *ProjectsLocationsService { + rs := &ProjectsLocationsService{s: s} + rs.Functions = NewProjectsLocationsFunctionsService(s) + return rs +} + +type ProjectsLocationsService struct { + s *Service + + Functions *ProjectsLocationsFunctionsService +} + +func NewProjectsLocationsFunctionsService(s *Service) *ProjectsLocationsFunctionsService { + rs := &ProjectsLocationsFunctionsService{s: s} + return rs +} + +type ProjectsLocationsFunctionsService struct { + s *Service +} + +// CallFunctionRequest: Request for the `CallFunction` method. +type CallFunctionRequest struct { + // Data: Input to be passed to the function. + Data string `json:"data,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Data") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Data") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *CallFunctionRequest) MarshalJSON() ([]byte, error) { + type NoMethod CallFunctionRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// CallFunctionResponse: Response of `CallFunction` method. +type CallFunctionResponse struct { + // Error: Either system or user-function generated error. Set if + // execution + // was not successful. + Error string `json:"error,omitempty"` + + // ExecutionId: Execution id of function invocation. + ExecutionId string `json:"executionId,omitempty"` + + // Result: Result populated for successful execution of synchronous + // function. Will + // not be populated if function does not return a result through + // context. + Result string `json:"result,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Error") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Error") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *CallFunctionResponse) MarshalJSON() ([]byte, error) { + type NoMethod CallFunctionResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// CloudFunction: Describes a Cloud Function that contains user +// computation executed in +// response to an event. It encapsulate function and triggers +// configurations. +type CloudFunction struct { + // AvailableMemoryMb: The amount of memory in MB available for a + // function. + // Defaults to 256MB. + AvailableMemoryMb int64 `json:"availableMemoryMb,omitempty"` + + // Description: User-provided description of a function. + Description string `json:"description,omitempty"` + + // EntryPoint: The name of the function (as defined in source code) that + // will be + // executed. Defaults to the resource name suffix, if not specified. + // For + // backward compatibility, if function with given name is not found, + // then the + // system will try to use function named "function". + // For Node.js this is name of a function exported by the module + // specified + // in `source_location`. + EntryPoint string `json:"entryPoint,omitempty"` + + // EventTrigger: A source that fires events in response to a condition + // in another service. + EventTrigger *EventTrigger `json:"eventTrigger,omitempty"` + + // HttpsTrigger: An HTTPS endpoint type of source that can be triggered + // via URL. + HttpsTrigger *HttpsTrigger `json:"httpsTrigger,omitempty"` + + // Labels: Labels associated with this Cloud Function. + Labels map[string]string `json:"labels,omitempty"` + + // Name: A user-defined name of the function. Function names must be + // unique + // globally and match pattern `projects/*/locations/*/functions/*` + Name string `json:"name,omitempty"` + + // ServiceAccountEmail: Output only. The email of the function's service + // account. + ServiceAccountEmail string `json:"serviceAccountEmail,omitempty"` + + // SourceArchiveUrl: The Google Cloud Storage URL, starting with gs://, + // pointing to the zip + // archive which contains the function. + SourceArchiveUrl string `json:"sourceArchiveUrl,omitempty"` + + // SourceRepository: **Beta Feature** + // + // The source repository where a function is hosted. + SourceRepository *SourceRepository `json:"sourceRepository,omitempty"` + + // SourceUploadUrl: The Google Cloud Storage signed URL used for source + // uploading, generated + // by google.cloud.functions.v1.GenerateUploadUrl + SourceUploadUrl string `json:"sourceUploadUrl,omitempty"` + + // Status: Output only. Status of the function deployment. + // + // Possible values: + // "CLOUD_FUNCTION_STATUS_UNSPECIFIED" - Not specified. Invalid state. + // "ACTIVE" - Function has been succesfully deployed and is serving. + // "OFFLINE" - Function deployment failed and the function isn’t + // serving. + // "DEPLOY_IN_PROGRESS" - Function is being created or updated. + // "DELETE_IN_PROGRESS" - Function is being deleted. + // "UNKNOWN" - Function deployment failed and the function serving + // state is undefined. + // The function should be updated or deleted to move it out of this + // state. + Status string `json:"status,omitempty"` + + // Timeout: The function execution timeout. Execution is considered + // failed and + // can be terminated if the function is not completed at the end of + // the + // timeout period. Defaults to 60 seconds. + Timeout string `json:"timeout,omitempty"` + + // UpdateTime: Output only. The last update timestamp of a Cloud + // Function. + UpdateTime string `json:"updateTime,omitempty"` + + // VersionId: Output only. + // The version identifier of the Cloud Function. Each deployment + // attempt + // results in a new version of a function being created. + VersionId int64 `json:"versionId,omitempty,string"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "AvailableMemoryMb") + // to unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AvailableMemoryMb") to + // include in API requests with the JSON null value. By default, fields + // with empty values are omitted from API requests. However, any field + // with an empty value appearing in NullFields will be sent to the + // server as null. It is an error if a field in this list has a + // non-empty value. This may be used to include null fields in Patch + // requests. + NullFields []string `json:"-"` +} + +func (s *CloudFunction) MarshalJSON() ([]byte, error) { + type NoMethod CloudFunction + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// EventTrigger: Describes EventTrigger, used to request events be sent +// from another +// service. +type EventTrigger struct { + // EventType: Required. The type of event to observe. For + // example: + // `providers/cloud.storage/eventTypes/object.change` + // and + // `providers/cloud.pubsub/eventTypes/topic.publish`. + // + // Event types match pattern `providers/*/eventTypes/*.*`. + // The pattern contains: + // 1. namespace: For example, `cloud.storage` and + // `google.firebase.analytics`. + // 2. resource type: The type of resource on which event occurs. For + // example, the Google Cloud Storage API includes the type + // `object`. + // 3. action: The action that generates the event. For example, action + // for + // a Google Cloud Storage Object is 'change'. + // These parts are lower case. + EventType string `json:"eventType,omitempty"` + + // FailurePolicy: Specifies policy for failed executions. + FailurePolicy *FailurePolicy `json:"failurePolicy,omitempty"` + + // Resource: Required. The resource(s) from which to observe events, for + // example, + // `projects/_/buckets/myBucket`. + // + // Not all syntactically correct values are accepted by all services. + // For + // example: + // + // 1. The authorization model must support it. Google Cloud Functions + // only allows EventTriggers to be deployed that observe resources in + // the + // same project as the `CloudFunction`. + // 2. The resource type must match the pattern expected for an + // `event_type`. For example, an `EventTrigger` that has an + // `event_type` of "google.pubsub.topic.publish" should have a + // resource + // that matches Google Cloud Pub/Sub topics. + // + // Additionally, some services may support short names when creating + // an + // `EventTrigger`. These will always be returned in the normalized + // "long" + // format. + // + // See each *service's* documentation for supported formats. + Resource string `json:"resource,omitempty"` + + // Service: The hostname of the service that should be observed. + // + // If no string is provided, the default service implementing the API + // will + // be used. For example, `storage.googleapis.com` is the default for + // all + // event types in the `google.storage` namespace. + Service string `json:"service,omitempty"` + + // ForceSendFields is a list of field names (e.g. "EventType") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "EventType") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *EventTrigger) MarshalJSON() ([]byte, error) { + type NoMethod EventTrigger + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// FailurePolicy: Describes the policy in case of function's execution +// failure. +// If empty, then defaults to ignoring failures (i.e. not retrying +// them). +type FailurePolicy struct { + // Retry: If specified, then the function will be retried in case of a + // failure. + Retry *Retry `json:"retry,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Retry") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Retry") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *FailurePolicy) MarshalJSON() ([]byte, error) { + type NoMethod FailurePolicy + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// GenerateDownloadUrlRequest: Request of `GenerateDownloadUrl` method. +type GenerateDownloadUrlRequest struct { + // VersionId: The optional version of function. If not set, default, + // current version + // is used. + VersionId uint64 `json:"versionId,omitempty,string"` + + // ForceSendFields is a list of field names (e.g. "VersionId") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "VersionId") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GenerateDownloadUrlRequest) MarshalJSON() ([]byte, error) { + type NoMethod GenerateDownloadUrlRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// GenerateDownloadUrlResponse: Response of `GenerateDownloadUrl` +// method. +type GenerateDownloadUrlResponse struct { + // DownloadUrl: The generated Google Cloud Storage signed URL that + // should be used for + // function source code download. + DownloadUrl string `json:"downloadUrl,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "DownloadUrl") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DownloadUrl") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GenerateDownloadUrlResponse) MarshalJSON() ([]byte, error) { + type NoMethod GenerateDownloadUrlResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// GenerateUploadUrlRequest: Request of `GenerateSourceUploadUrl` +// method. +type GenerateUploadUrlRequest struct { +} + +// GenerateUploadUrlResponse: Response of `GenerateSourceUploadUrl` +// method. +type GenerateUploadUrlResponse struct { + // UploadUrl: The generated Google Cloud Storage signed URL that should + // be used for a + // function source code upload. The uploaded file should be a zip + // archive + // which contains a function. + UploadUrl string `json:"uploadUrl,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "UploadUrl") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "UploadUrl") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GenerateUploadUrlResponse) MarshalJSON() ([]byte, error) { + type NoMethod GenerateUploadUrlResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// HttpsTrigger: Describes HttpsTrigger, could be used to connect web +// hooks to function. +type HttpsTrigger struct { + // Url: Output only. The deployed url for the function. + Url string `json:"url,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Url") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Url") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *HttpsTrigger) MarshalJSON() ([]byte, error) { + type NoMethod HttpsTrigger + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListFunctionsResponse: Response for the `ListFunctions` method. +type ListFunctionsResponse struct { + // Functions: The functions that match the request. + Functions []*CloudFunction `json:"functions,omitempty"` + + // NextPageToken: If not empty, indicates that there may be more + // functions that match + // the request; this value should be passed in a + // new + // google.cloud.functions.v1.ListFunctionsRequest + // to get more functions. + NextPageToken string `json:"nextPageToken,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Functions") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Functions") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListFunctionsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListFunctionsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListLocationsResponse: The response message for +// Locations.ListLocations. +type ListLocationsResponse struct { + // Locations: A list of locations that matches the specified filter in + // the request. + Locations []*Location `json:"locations,omitempty"` + + // NextPageToken: The standard List next-page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Locations") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Locations") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListLocationsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListLocationsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// ListOperationsResponse: The response message for +// Operations.ListOperations. +type ListOperationsResponse struct { + // NextPageToken: The standard List next-page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Operations: A list of operations that matches the specified filter in + // the request. + Operations []*Operation `json:"operations,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "NextPageToken") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "NextPageToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *ListOperationsResponse) MarshalJSON() ([]byte, error) { + type NoMethod ListOperationsResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Location: A resource that represents Google Cloud Platform location. +type Location struct { + // Labels: Cross-service attributes for the location. For example + // + // {"cloud.googleapis.com/region": "us-east1"} + Labels map[string]string `json:"labels,omitempty"` + + // LocationId: The canonical id for this location. For example: + // "us-east1". + LocationId string `json:"locationId,omitempty"` + + // Metadata: Service-specific metadata. For example the available + // capacity at the given + // location. + Metadata googleapi.RawMessage `json:"metadata,omitempty"` + + // Name: Resource name for the location, which may vary between + // implementations. + // For example: "projects/example-project/locations/us-east1" + Name string `json:"name,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Labels") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Labels") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Location) MarshalJSON() ([]byte, error) { + type NoMethod Location + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Operation: This resource represents a long-running operation that is +// the result of a +// network API call. +type Operation struct { + // Done: If the value is `false`, it means the operation is still in + // progress. + // If `true`, the operation is completed, and either `error` or + // `response` is + // available. + Done bool `json:"done,omitempty"` + + // Error: The error result of the operation in case of failure or + // cancellation. + Error *Status `json:"error,omitempty"` + + // Metadata: Service-specific metadata associated with the operation. + // It typically + // contains progress information and common metadata such as create + // time. + // Some services might not provide such metadata. Any method that + // returns a + // long-running operation should document the metadata type, if any. + Metadata googleapi.RawMessage `json:"metadata,omitempty"` + + // Name: The server-assigned name, which is only unique within the same + // service that + // originally returns it. If you use the default HTTP mapping, + // the + // `name` should have the format of `operations/some/unique/name`. + Name string `json:"name,omitempty"` + + // Response: The normal response of the operation in case of success. + // If the original + // method returns no data on success, such as `Delete`, the response + // is + // `google.protobuf.Empty`. If the original method is + // standard + // `Get`/`Create`/`Update`, the response should be the resource. For + // other + // methods, the response should have the type `XxxResponse`, where + // `Xxx` + // is the original method name. For example, if the original method + // name + // is `TakeSnapshot()`, the inferred response type + // is + // `TakeSnapshotResponse`. + Response googleapi.RawMessage `json:"response,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Done") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Done") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Operation) MarshalJSON() ([]byte, error) { + type NoMethod Operation + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// OperationMetadataV1: Metadata describing an Operation +type OperationMetadataV1 struct { + // Request: The original request that started the operation. + Request googleapi.RawMessage `json:"request,omitempty"` + + // Target: Target of the operation - for + // example + // projects/project-1/locations/region-1/functions/function-1 + Target string `json:"target,omitempty"` + + // Type: Type of operation. + // + // Possible values: + // "OPERATION_UNSPECIFIED" - Unknown operation type. + // "CREATE_FUNCTION" - Triggered by CreateFunction call + // "UPDATE_FUNCTION" - Triggered by UpdateFunction call + // "DELETE_FUNCTION" - Triggered by DeleteFunction call. + Type string `json:"type,omitempty"` + + // UpdateTime: The last update timestamp of the operation. + UpdateTime string `json:"updateTime,omitempty"` + + // VersionId: Version id of the function created or updated by an API + // call. + // This field is only pupulated for Create and Update operations. + VersionId int64 `json:"versionId,omitempty,string"` + + // ForceSendFields is a list of field names (e.g. "Request") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Request") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *OperationMetadataV1) MarshalJSON() ([]byte, error) { + type NoMethod OperationMetadataV1 + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// OperationMetadataV1Beta2: Metadata describing an Operation +type OperationMetadataV1Beta2 struct { + // Request: The original request that started the operation. + Request googleapi.RawMessage `json:"request,omitempty"` + + // Target: Target of the operation - for + // example + // projects/project-1/locations/region-1/functions/function-1 + Target string `json:"target,omitempty"` + + // Type: Type of operation. + // + // Possible values: + // "OPERATION_UNSPECIFIED" - Unknown operation type. + // "CREATE_FUNCTION" - Triggered by CreateFunction call + // "UPDATE_FUNCTION" - Triggered by UpdateFunction call + // "DELETE_FUNCTION" - Triggered by DeleteFunction call. + Type string `json:"type,omitempty"` + + // UpdateTime: The last update timestamp of the operation. + UpdateTime string `json:"updateTime,omitempty"` + + // VersionId: Version id of the function created or updated by an API + // call. + // This field is only pupulated for Create and Update operations. + VersionId int64 `json:"versionId,omitempty,string"` + + // ForceSendFields is a list of field names (e.g. "Request") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Request") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *OperationMetadataV1Beta2) MarshalJSON() ([]byte, error) { + type NoMethod OperationMetadataV1Beta2 + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Retry: Describes the retry policy in case of function's execution +// failure. +// A function execution will be retried on any failure. +// A failed execution will be retried up to 7 days with an exponential +// backoff +// (capped at 10 seconds). +// Retried execution is charged as any other execution. +type Retry struct { +} + +// SourceRepository: Describes SourceRepository, used to represent +// parameters related to +// source repository where a function is hosted. +type SourceRepository struct { + // DeployedUrl: Output only. The URL pointing to the hosted repository + // where the function + // were defined at the time of deployment. It always points to a + // specific + // commit in the format described above. + DeployedUrl string `json:"deployedUrl,omitempty"` + + // Url: The URL pointing to the hosted repository where the function is + // defined. + // There are supported Cloud Source Repository URLs in the + // following + // formats: + // + // To refer to a specific + // commit: + // `https://source.developers.google.com/projects/*/repos/*/revis + // ions/*/paths/*` + // To refer to a moveable alias + // (branch): + // `https://source.developers.google.com/projects/*/repos/*/mov + // eable-aliases/*/paths/*` + // In particular, to refer to HEAD use `master` moveable alias. + // To refer to a specific fixed alias + // (tag): + // `https://source.developers.google.com/projects/*/repos/*/fixed- + // aliases/*/paths/*` + // + // You may omit `paths/*` if you want to use the main directory. + Url string `json:"url,omitempty"` + + // ForceSendFields is a list of field names (e.g. "DeployedUrl") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "DeployedUrl") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *SourceRepository) MarshalJSON() ([]byte, error) { + type NoMethod SourceRepository + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// Status: The `Status` type defines a logical error model that is +// suitable for different +// programming environments, including REST APIs and RPC APIs. It is +// used by +// [gRPC](https://github.com/grpc). The error model is designed to +// be: +// +// - Simple to use and understand for most users +// - Flexible enough to meet unexpected needs +// +// # Overview +// +// The `Status` message contains three pieces of data: error code, error +// message, +// and error details. The error code should be an enum value +// of +// google.rpc.Code, but it may accept additional error codes if needed. +// The +// error message should be a developer-facing English message that +// helps +// developers *understand* and *resolve* the error. If a localized +// user-facing +// error message is needed, put the localized message in the error +// details or +// localize it in the client. The optional error details may contain +// arbitrary +// information about the error. There is a predefined set of error +// detail types +// in the package `google.rpc` that can be used for common error +// conditions. +// +// # Language mapping +// +// The `Status` message is the logical representation of the error +// model, but it +// is not necessarily the actual wire format. When the `Status` message +// is +// exposed in different client libraries and different wire protocols, +// it can be +// mapped differently. For example, it will likely be mapped to some +// exceptions +// in Java, but more likely mapped to some error codes in C. +// +// # Other uses +// +// The error model and the `Status` message can be used in a variety +// of +// environments, either with or without APIs, to provide a +// consistent developer experience across different +// environments. +// +// Example uses of this error model include: +// +// - Partial errors. If a service needs to return partial errors to the +// client, +// it may embed the `Status` in the normal response to indicate the +// partial +// errors. +// +// - Workflow errors. A typical workflow has multiple steps. Each step +// may +// have a `Status` message for error reporting. +// +// - Batch operations. If a client uses batch request and batch +// response, the +// `Status` message should be used directly inside batch response, +// one for +// each error sub-response. +// +// - Asynchronous operations. If an API call embeds asynchronous +// operation +// results in its response, the status of those operations should +// be +// represented directly using the `Status` message. +// +// - Logging. If some API errors are stored in logs, the message +// `Status` could +// be used directly after any stripping needed for security/privacy +// reasons. +type Status struct { + // Code: The status code, which should be an enum value of + // google.rpc.Code. + Code int64 `json:"code,omitempty"` + + // Details: A list of messages that carry the error details. There is a + // common set of + // message types for APIs to use. + Details []googleapi.RawMessage `json:"details,omitempty"` + + // Message: A developer-facing error message, which should be in + // English. Any + // user-facing error message should be localized and sent in + // the + // google.rpc.Status.details field, or localized by the client. + Message string `json:"message,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Code") to + // unconditionally include in API requests. By default, fields with + // empty values are omitted from API requests. However, any non-pointer, + // non-interface field appearing in ForceSendFields will be sent to the + // server regardless of whether the field is empty or not. This may be + // used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Code") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *Status) MarshalJSON() ([]byte, error) { + type NoMethod Status + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// method id "cloudfunctions.operations.get": + +type OperationsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Gets the latest state of a long-running operation. Clients can +// use this +// method to poll the operation result at intervals as recommended by +// the API +// service. +func (r *OperationsService) Get(name string) *OperationsGetCall { + c := &OperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *OperationsGetCall) Fields(s ...googleapi.Field) *OperationsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *OperationsGetCall) IfNoneMatch(entityTag string) *OperationsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *OperationsGetCall) Context(ctx context.Context) *OperationsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *OperationsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *OperationsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.operations.get" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *OperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the latest state of a long-running operation. Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.", + // "flatPath": "v1/operations/{operationsId}", + // "httpMethod": "GET", + // "id": "cloudfunctions.operations.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the operation resource.", + // "location": "path", + // "pattern": "^operations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudfunctions.operations.list": + +type OperationsListCall struct { + s *Service + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists operations that match the specified filter in the +// request. If the +// server doesn't support this method, it returns +// `UNIMPLEMENTED`. +// +// NOTE: the `name` binding allows API services to override the +// binding +// to use different resource name schemes, such as `users/*/operations`. +// To +// override the binding, API services can add a binding such +// as +// "/v1/{name=users/*}/operations" to their service configuration. +// For backwards compatibility, the default name includes the +// operations +// collection id, however overriding users must ensure the name +// binding +// is the parent resource, without the operations collection id. +func (r *OperationsService) List() *OperationsListCall { + c := &OperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *OperationsListCall) Filter(filter string) *OperationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// Name sets the optional parameter "name": The name of the operation's +// parent resource. +func (c *OperationsListCall) Name(name string) *OperationsListCall { + c.urlParams_.Set("name", name) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *OperationsListCall) PageSize(pageSize int64) *OperationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *OperationsListCall) PageToken(pageToken string) *OperationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *OperationsListCall) Fields(s ...googleapi.Field) *OperationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *OperationsListCall) IfNoneMatch(entityTag string) *OperationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *OperationsListCall) Context(ctx context.Context) *OperationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *OperationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *OperationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/operations") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header = reqHeaders + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.operations.list" call. +// Exactly one of *ListOperationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListOperationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *OperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &ListOperationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`. To\noverride the binding, API services can add a binding such as\n`\"/v1/{name=users/*}/operations\"` to their service configuration.\nFor backwards compatibility, the default name includes the operations\ncollection id, however overriding users must ensure the name binding\nis the parent resource, without the operations collection id.", + // "flatPath": "v1/operations", + // "httpMethod": "GET", + // "id": "cloudfunctions.operations.list", + // "parameterOrder": [], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The name of the operation's parent resource.", + // "location": "query", + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/operations", + // "response": { + // "$ref": "ListOperationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *OperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "cloudfunctions.projects.locations.list": + +type ProjectsLocationsListCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Lists information about the supported locations for this +// service. +func (r *ProjectsLocationsService) List(name string) *ProjectsLocationsListCall { + c := &ProjectsLocationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Filter sets the optional parameter "filter": The standard list +// filter. +func (c *ProjectsLocationsListCall) Filter(filter string) *ProjectsLocationsListCall { + c.urlParams_.Set("filter", filter) + return c +} + +// PageSize sets the optional parameter "pageSize": The standard list +// page size. +func (c *ProjectsLocationsListCall) PageSize(pageSize int64) *ProjectsLocationsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The standard list +// page token. +func (c *ProjectsLocationsListCall) PageToken(pageToken string) *ProjectsLocationsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsListCall) Context(ctx context.Context) *ProjectsLocationsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/locations") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.list" call. +// Exactly one of *ListLocationsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListLocationsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsListCall) Do(opts ...googleapi.CallOption) (*ListLocationsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &ListLocationsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists information about the supported locations for this service.", + // "flatPath": "v1/projects/{projectsId}/locations", + // "httpMethod": "GET", + // "id": "cloudfunctions.projects.locations.list", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "filter": { + // "description": "The standard list filter.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The resource that owns the locations collection, if applicable.", + // "location": "path", + // "pattern": "^projects/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "pageSize": { + // "description": "The standard list page size.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The standard list page token.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}/locations", + // "response": { + // "$ref": "ListLocationsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsListCall) Pages(ctx context.Context, f func(*ListLocationsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "cloudfunctions.projects.locations.functions.call": + +type ProjectsLocationsFunctionsCallCall struct { + s *Service + name string + callfunctionrequest *CallFunctionRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Call: Invokes synchronously deployed function. To be used for +// testing, very +// limited traffic allowed. +func (r *ProjectsLocationsFunctionsService) Call(name string, callfunctionrequest *CallFunctionRequest) *ProjectsLocationsFunctionsCallCall { + c := &ProjectsLocationsFunctionsCallCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.callfunctionrequest = callfunctionrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsCallCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsCallCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsCallCall) Context(ctx context.Context) *ProjectsLocationsFunctionsCallCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsCallCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsCallCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.callfunctionrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:call") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.call" call. +// Exactly one of *CallFunctionResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *CallFunctionResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsCallCall) Do(opts ...googleapi.CallOption) (*CallFunctionResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &CallFunctionResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Invokes synchronously deployed function. To be used for testing, very\nlimited traffic allowed.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:call", + // "httpMethod": "POST", + // "id": "cloudfunctions.projects.locations.functions.call", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the function to be called.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:call", + // "request": { + // "$ref": "CallFunctionRequest" + // }, + // "response": { + // "$ref": "CallFunctionResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudfunctions.projects.locations.functions.create": + +type ProjectsLocationsFunctionsCreateCall struct { + s *Service + location string + cloudfunction *CloudFunction + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Create: Creates a new function. If a function with the given name +// already exists in +// the specified project, the long running operation will +// return +// `ALREADY_EXISTS` error. +func (r *ProjectsLocationsFunctionsService) Create(location string, cloudfunction *CloudFunction) *ProjectsLocationsFunctionsCreateCall { + c := &ProjectsLocationsFunctionsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.location = location + c.cloudfunction = cloudfunction + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsCreateCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsCreateCall) Context(ctx context.Context) *ProjectsLocationsFunctionsCreateCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsCreateCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsCreateCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.cloudfunction) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+location}/functions") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "location": c.location, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.create" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new function. If a function with the given name already exists in\nthe specified project, the long running operation will return\n`ALREADY_EXISTS` error.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions", + // "httpMethod": "POST", + // "id": "cloudfunctions.projects.locations.functions.create", + // "parameterOrder": [ + // "location" + // ], + // "parameters": { + // "location": { + // "description": "The project and location in which the function should be created, specified\nin the format `projects/*/locations/*`", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+location}/functions", + // "request": { + // "$ref": "CloudFunction" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudfunctions.projects.locations.functions.delete": + +type ProjectsLocationsFunctionsDeleteCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Delete: Deletes a function with the given name from the specified +// project. If the +// given function is used by some trigger, the trigger will be updated +// to +// remove this function. +func (r *ProjectsLocationsFunctionsService) Delete(name string) *ProjectsLocationsFunctionsDeleteCall { + c := &ProjectsLocationsFunctionsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsDeleteCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsDeleteCall) Context(ctx context.Context) *ProjectsLocationsFunctionsDeleteCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsDeleteCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsDeleteCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.delete" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a function with the given name from the specified project. If the\ngiven function is used by some trigger, the trigger will be updated to\nremove this function.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", + // "httpMethod": "DELETE", + // "id": "cloudfunctions.projects.locations.functions.delete", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the function which should be deleted.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudfunctions.projects.locations.functions.generateDownloadUrl": + +type ProjectsLocationsFunctionsGenerateDownloadUrlCall struct { + s *Service + name string + generatedownloadurlrequest *GenerateDownloadUrlRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// GenerateDownloadUrl: Returns a signed URL for downloading deployed +// function source code. +// The URL is only valid for a limited period and should be used +// within +// minutes after generation. +// For more information about the signed URL usage +// see: +// https://cloud.google.com/storage/docs/access-control/signed-urls +func (r *ProjectsLocationsFunctionsService) GenerateDownloadUrl(name string, generatedownloadurlrequest *GenerateDownloadUrlRequest) *ProjectsLocationsFunctionsGenerateDownloadUrlCall { + c := &ProjectsLocationsFunctionsGenerateDownloadUrlCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.generatedownloadurlrequest = generatedownloadurlrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsGenerateDownloadUrlCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsGenerateDownloadUrlCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsGenerateDownloadUrlCall) Context(ctx context.Context) *ProjectsLocationsFunctionsGenerateDownloadUrlCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsGenerateDownloadUrlCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsGenerateDownloadUrlCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.generatedownloadurlrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:generateDownloadUrl") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.generateDownloadUrl" call. +// Exactly one of *GenerateDownloadUrlResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *GenerateDownloadUrlResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsGenerateDownloadUrlCall) Do(opts ...googleapi.CallOption) (*GenerateDownloadUrlResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &GenerateDownloadUrlResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a signed URL for downloading deployed function source code.\nThe URL is only valid for a limited period and should be used within\nminutes after generation.\nFor more information about the signed URL usage see:\nhttps://cloud.google.com/storage/docs/access-control/signed-urls", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:generateDownloadUrl", + // "httpMethod": "POST", + // "id": "cloudfunctions.projects.locations.functions.generateDownloadUrl", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of function for which source code Google Cloud Storage signed\nURL should be generated.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:generateDownloadUrl", + // "request": { + // "$ref": "GenerateDownloadUrlRequest" + // }, + // "response": { + // "$ref": "GenerateDownloadUrlResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudfunctions.projects.locations.functions.generateUploadUrl": + +type ProjectsLocationsFunctionsGenerateUploadUrlCall struct { + s *Service + parent string + generateuploadurlrequest *GenerateUploadUrlRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// GenerateUploadUrl: Returns a signed URL for uploading a function +// source code. +// For more information about the signed URL usage +// see: +// https://cloud.google.com/storage/docs/access-control/signed-urls +// +// Once the function source code upload is complete, the used signed +// URL should be provided in CreateFunction or UpdateFunction request +// as a reference to the function source code. +func (r *ProjectsLocationsFunctionsService) GenerateUploadUrl(parent string, generateuploadurlrequest *GenerateUploadUrlRequest) *ProjectsLocationsFunctionsGenerateUploadUrlCall { + c := &ProjectsLocationsFunctionsGenerateUploadUrlCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + c.generateuploadurlrequest = generateuploadurlrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsGenerateUploadUrlCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsGenerateUploadUrlCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsGenerateUploadUrlCall) Context(ctx context.Context) *ProjectsLocationsFunctionsGenerateUploadUrlCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsGenerateUploadUrlCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsGenerateUploadUrlCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.generateuploadurlrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/functions:generateUploadUrl") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.generateUploadUrl" call. +// Exactly one of *GenerateUploadUrlResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *GenerateUploadUrlResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsGenerateUploadUrlCall) Do(opts ...googleapi.CallOption) (*GenerateUploadUrlResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &GenerateUploadUrlResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a signed URL for uploading a function source code.\nFor more information about the signed URL usage see:\nhttps://cloud.google.com/storage/docs/access-control/signed-urls\nOnce the function source code upload is complete, the used signed\nURL should be provided in CreateFunction or UpdateFunction request\nas a reference to the function source code.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions:generateUploadUrl", + // "httpMethod": "POST", + // "id": "cloudfunctions.projects.locations.functions.generateUploadUrl", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "parent": { + // "description": "The project and location in which the Google Cloud Storage signed URL\nshould be generated, specified in the format `projects/*/locations/*", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/functions:generateUploadUrl", + // "request": { + // "$ref": "GenerateUploadUrlRequest" + // }, + // "response": { + // "$ref": "GenerateUploadUrlResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudfunctions.projects.locations.functions.get": + +type ProjectsLocationsFunctionsGetCall struct { + s *Service + name string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// Get: Returns a function with the given name from the requested +// project. +func (r *ProjectsLocationsFunctionsService) Get(name string) *ProjectsLocationsFunctionsGetCall { + c := &ProjectsLocationsFunctionsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsGetCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsFunctionsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsFunctionsGetCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsGetCall) Context(ctx context.Context) *ProjectsLocationsFunctionsGetCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsGetCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsGetCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.get" call. +// Exactly one of *CloudFunction or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *CloudFunction.ServerResponse.Header or (if a response was returned +// at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsGetCall) Do(opts ...googleapi.CallOption) (*CloudFunction, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &CloudFunction{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a function with the given name from the requested project.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", + // "httpMethod": "GET", + // "id": "cloudfunctions.projects.locations.functions.get", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "The name of the function which details should be obtained.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "response": { + // "$ref": "CloudFunction" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "cloudfunctions.projects.locations.functions.list": + +type ProjectsLocationsFunctionsListCall struct { + s *Service + parent string + urlParams_ gensupport.URLParams + ifNoneMatch_ string + ctx_ context.Context + header_ http.Header +} + +// List: Returns a list of functions that belong to the requested +// project. +func (r *ProjectsLocationsFunctionsService) List(parent string) *ProjectsLocationsFunctionsListCall { + c := &ProjectsLocationsFunctionsListCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.parent = parent + return c +} + +// PageSize sets the optional parameter "pageSize": Maximum number of +// functions to return per call. +func (c *ProjectsLocationsFunctionsListCall) PageSize(pageSize int64) *ProjectsLocationsFunctionsListCall { + c.urlParams_.Set("pageSize", fmt.Sprint(pageSize)) + return c +} + +// PageToken sets the optional parameter "pageToken": The value returned +// by the last +// `ListFunctionsResponse`; indicates that +// this is a continuation of a prior `ListFunctions` call, and that +// the +// system should return the next page of data. +func (c *ProjectsLocationsFunctionsListCall) PageToken(pageToken string) *ProjectsLocationsFunctionsListCall { + c.urlParams_.Set("pageToken", pageToken) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsListCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// IfNoneMatch sets the optional parameter which makes the operation +// fail if the object's ETag matches the given value. This is useful for +// getting updates only after the object has changed since the last +// request. Use googleapi.IsNotModified to check whether the response +// error from Do is the result of In-None-Match. +func (c *ProjectsLocationsFunctionsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsFunctionsListCall { + c.ifNoneMatch_ = entityTag + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsListCall) Context(ctx context.Context) *ProjectsLocationsFunctionsListCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsListCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsListCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + if c.ifNoneMatch_ != "" { + reqHeaders.Set("If-None-Match", c.ifNoneMatch_) + } + var body io.Reader = nil + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/functions") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "parent": c.parent, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.list" call. +// Exactly one of *ListFunctionsResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *ListFunctionsResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsListCall) Do(opts ...googleapi.CallOption) (*ListFunctionsResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &ListFunctionsResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a list of functions that belong to the requested project.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions", + // "httpMethod": "GET", + // "id": "cloudfunctions.projects.locations.functions.list", + // "parameterOrder": [ + // "parent" + // ], + // "parameters": { + // "pageSize": { + // "description": "Maximum number of functions to return per call.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value returned by the last\n`ListFunctionsResponse`; indicates that\nthis is a continuation of a prior `ListFunctions` call, and that the\nsystem should return the next page of data.", + // "location": "query", + // "type": "string" + // }, + // "parent": { + // "description": "The project and location from which the function should be listed,\nspecified in the format `projects/*/locations/*`\nIf you want to list functions in all locations, use \"-\" in place of a\nlocation.", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+parent}/functions", + // "response": { + // "$ref": "ListFunctionsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// Pages invokes f for each page of results. +// A non-nil error returned from f will halt the iteration. +// The provided context supersedes any context provided to the Context method. +func (c *ProjectsLocationsFunctionsListCall) Pages(ctx context.Context, f func(*ListFunctionsResponse) error) error { + c.ctx_ = ctx + defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point + for { + x, err := c.Do() + if err != nil { + return err + } + if err := f(x); err != nil { + return err + } + if x.NextPageToken == "" { + return nil + } + c.PageToken(x.NextPageToken) + } +} + +// method id "cloudfunctions.projects.locations.functions.patch": + +type ProjectsLocationsFunctionsPatchCall struct { + s *Service + name string + cloudfunction *CloudFunction + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// Patch: Updates existing function. +func (r *ProjectsLocationsFunctionsService) Patch(name string, cloudfunction *CloudFunction) *ProjectsLocationsFunctionsPatchCall { + c := &ProjectsLocationsFunctionsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.cloudfunction = cloudfunction + return c +} + +// UpdateMask sets the optional parameter "updateMask": Required list of +// fields to be updated in this request. +func (c *ProjectsLocationsFunctionsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsFunctionsPatchCall { + c.urlParams_.Set("updateMask", updateMask) + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsLocationsFunctionsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsFunctionsPatchCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsLocationsFunctionsPatchCall) Context(ctx context.Context) *ProjectsLocationsFunctionsPatchCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsLocationsFunctionsPatchCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsLocationsFunctionsPatchCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.cloudfunction) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}") + urls += "?" + c.urlParams_.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header = reqHeaders + googleapi.Expand(req.URL, map[string]string{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "cloudfunctions.projects.locations.functions.patch" call. +// Exactly one of *Operation or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *Operation.ServerResponse.Header or (if a response was returned at +// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified +// to check whether the returned error was because +// http.StatusNotModified was returned. +func (c *ProjectsLocationsFunctionsPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &Operation{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates existing function.", + // "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}", + // "httpMethod": "PATCH", + // "id": "cloudfunctions.projects.locations.functions.patch", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "A user-defined name of the function. Function names must be unique\nglobally and match pattern `projects/*/locations/*/functions/*`", + // "location": "path", + // "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$", + // "required": true, + // "type": "string" + // }, + // "updateMask": { + // "description": "Required list of fields to be updated in this request.", + // "format": "google-fieldmask", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v1/{+name}", + // "request": { + // "$ref": "CloudFunction" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} diff --git a/vendor/vendor.json b/vendor/vendor.json index 2b5769fa34d..0b1bbdcb0ec 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1235,6 +1235,12 @@ "revision": "c8d75a8ec737f9b8b1ed2676c28feedbe21f543f", "revisionTime": "2016-11-21T18:05:46Z" }, + { + "checksumSHA1": "M6qPoWx14U0JlqP2c/Mvx9fYmDo=", + "path": "google.golang.org/api/cloudfunctions/v1", + "revision": "f4694fe510ef1f58a08157aa15e795ffea4d4766", + "revisionTime": "2017-12-15T00:04:04Z" + }, { "checksumSHA1": "/cYz9AiKwLEO61OdoLnKi2uiOeQ=", "path": "google.golang.org/api/cloudkms/v1",