|
| 1 | +userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent) |
| 2 | +if err != nil { |
| 3 | + return err |
| 4 | +} |
| 5 | + |
| 6 | +obj := make(map[string]interface{}) |
| 7 | +admissionPolicyProp, err := expandStorageAnywhereCacheAdmissionPolicy(d.Get("admission_policy"), d, config) |
| 8 | +if err != nil { |
| 9 | + return err |
| 10 | +} else if v, ok := d.GetOkExists("admission_policy"); !tpgresource.IsEmptyValue(reflect.ValueOf(admissionPolicyProp)) && (ok || !reflect.DeepEqual(v, admissionPolicyProp)) { |
| 11 | + obj["admissionPolicy"] = admissionPolicyProp |
| 12 | +} |
| 13 | +ttlProp, err := expandStorageAnywhereCacheTtl(d.Get("ttl"), d, config) |
| 14 | +if err != nil { |
| 15 | + return err |
| 16 | +} else if v, ok := d.GetOkExists("ttl"); !tpgresource.IsEmptyValue(reflect.ValueOf(ttlProp)) && (ok || !reflect.DeepEqual(v, ttlProp)) { |
| 17 | + obj["ttl"] = ttlProp |
| 18 | +} |
| 19 | +zoneProp, err := expandStorageAnywhereCacheZone(d.Get("zone"), d, config) |
| 20 | +if err != nil { |
| 21 | + return err |
| 22 | +} else if v, ok := d.GetOkExists("zone"); !tpgresource.IsEmptyValue(reflect.ValueOf(zoneProp)) && (ok || !reflect.DeepEqual(v, zoneProp)) { |
| 23 | + obj["zone"] = zoneProp |
| 24 | +} |
| 25 | + |
| 26 | +url, err := tpgresource.ReplaceVars(d, config, "{{"{{StorageBasePath}}b/{{bucket}}/anywhereCaches/"}}") |
| 27 | +if err != nil { |
| 28 | + return err |
| 29 | +} |
| 30 | + |
| 31 | +log.Printf("[DEBUG] Creating new AnywhereCache: %#v", obj) |
| 32 | +billingProject := "" |
| 33 | + |
| 34 | +// err == nil indicates that the billing_project value was found |
| 35 | +if bp, err := tpgresource.GetBillingProject(d, config); err == nil { |
| 36 | + billingProject = bp |
| 37 | +} |
| 38 | + |
| 39 | +headers := make(http.Header) |
| 40 | +res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ |
| 41 | + Config: config, |
| 42 | + Method: "POST", |
| 43 | + Project: billingProject, |
| 44 | + RawURL: url, |
| 45 | + UserAgent: userAgent, |
| 46 | + Body: obj, |
| 47 | + Timeout: d.Timeout(schema.TimeoutCreate), |
| 48 | + Headers: headers, |
| 49 | +}) |
| 50 | +if err != nil { |
| 51 | + return fmt.Errorf("Error creating AnywhereCache: %s", err) |
| 52 | +} |
| 53 | + |
| 54 | +// Store the ID now |
| 55 | +id, err := tpgresource.ReplaceVars(d, config, "{{"b/{{bucket}}/anywhereCaches/{{anywhere_cache_id}}"}}") |
| 56 | +if err != nil { |
| 57 | + return fmt.Errorf("Error constructing id: %s", err) |
| 58 | +} |
| 59 | +d.SetId(id) |
| 60 | + |
| 61 | +// Use the resource in the operation response to populate |
| 62 | +// identity fields and d.Id() before read |
| 63 | +var opRes map[string]interface{} |
| 64 | +err = StorageOperationWaitTimeWithResponse( |
| 65 | + config, res, &opRes, "Creating AnywhereCache", userAgent, |
| 66 | + d.Timeout(schema.TimeoutCreate)) |
| 67 | +if err != nil { |
| 68 | + // The resource didn't actually create |
| 69 | + d.SetId("") |
| 70 | + |
| 71 | + return fmt.Errorf("Error waiting to create AnywhereCache: %s", err) |
| 72 | +} |
| 73 | + |
| 74 | +nameVal, ok := opRes["name"].(string) |
| 75 | +if !ok { |
| 76 | + return fmt.Errorf("opRes['name'] is not a string: %v", opRes["name"]) |
| 77 | +} |
| 78 | + |
| 79 | +nameParts := strings.Split(nameVal, "/") |
| 80 | +if len(nameParts) != 6 || nameParts[0] != "projects" || nameParts[2] != "buckets" || nameParts[4] != "anywhereCaches" { |
| 81 | + return fmt.Errorf("error parsing the anywhereCacheId from %s", nameVal) |
| 82 | +} |
| 83 | + |
| 84 | +anywhereCacheID := nameParts[5] |
| 85 | +if err := d.Set("anywhere_cache_id", anywhereCacheID); err != nil { |
| 86 | + return err |
| 87 | +} |
| 88 | + |
| 89 | +// This may have caused the ID to update - update it if so. |
| 90 | +id, err = tpgresource.ReplaceVars(d, config, "{{"b/{{bucket}}/anywhereCaches/{{anywhere_cache_id}}"}}") |
| 91 | +if err != nil { |
| 92 | + return fmt.Errorf("Error constructing id: %s", err) |
| 93 | +} |
| 94 | +d.SetId(id) |
| 95 | + |
| 96 | +log.Printf("[DEBUG] Finished creating AnywhereCache %q: %#v", d.Id(), res) |
| 97 | + |
| 98 | +return resourceStorageAnywhereCacheRead(d, meta) |
0 commit comments