Skip to content

Commit ad57048

Browse files
Added google_apigee_api resource (#12036) (#8567)
[upstream:fc0e3024fda3fa86755fb3489c2501b27ea2a217] Signed-off-by: Modular Magician <[email protected]>
1 parent 4fe748f commit ad57048

10 files changed

+965
-74
lines changed

Diff for: .changelog/12036.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
`google_apigee_api`
3+
```

Diff for: google-beta/provider/provider_mmv1_resources.go

+1
Original file line numberDiff line numberDiff line change
@@ -1343,6 +1343,7 @@ var generatedResources = map[string]*schema.Resource{
13431343
var handwrittenResources = map[string]*schema.Resource{
13441344
// ####### START handwritten resources ###########
13451345
"google_app_engine_application": appengine.ResourceAppEngineApplication(),
1346+
"google_apigee_api": apigee.ResourceApigeeApi(),
13461347
"google_apigee_sharedflow": apigee.ResourceApigeeSharedFlow(),
13471348
"google_apigee_sharedflow_deployment": apigee.ResourceApigeeSharedFlowDeployment(),
13481349
"google_apigee_flowhook": apigee.ResourceApigeeFlowhook(),

Diff for: google-beta/services/apigee/apigee_utils.go

+74-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@
33
package apigee
44

55
import (
6+
"encoding/json"
67
"fmt"
7-
"log"
8-
98
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
109
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
1110
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
11+
"google.golang.org/api/googleapi"
12+
"io"
13+
"log"
14+
"net/http"
15+
"time"
1216
)
1317

1418
func resourceApigeeNatAddressActivate(config *transport_tpg.Config, d *schema.ResourceData, billingProject string, userAgent string) error {
@@ -47,3 +51,71 @@ func resourceApigeeNatAddressActivate(config *transport_tpg.Config, d *schema.Re
4751
}
4852
return nil
4953
}
54+
55+
// sendRequestRawBodyWithTimeout is derived from sendRequestWithTimeout with direct pass through of request body
56+
func sendRequestRawBodyWithTimeout(config *transport_tpg.Config, method, project, rawurl, userAgent string, body io.Reader, contentType string, timeout time.Duration, errorRetryPredicates ...transport_tpg.RetryErrorPredicateFunc) (map[string]interface{}, error) {
57+
log.Printf("[DEBUG] sendRequestRawBodyWithTimeout start")
58+
reqHeaders := make(http.Header)
59+
reqHeaders.Set("User-Agent", userAgent)
60+
reqHeaders.Set("Content-Type", contentType)
61+
62+
if config.UserProjectOverride && project != "" {
63+
// Pass the project into this fn instead of parsing it from the URL because
64+
// both project names and URLs can have colons in them.
65+
reqHeaders.Set("X-Goog-User-Project", project)
66+
}
67+
68+
if timeout == 0 {
69+
timeout = time.Duration(1) * time.Minute
70+
}
71+
72+
var res *http.Response
73+
74+
log.Printf("[DEBUG] sendRequestRawBodyWithTimeout sending request")
75+
76+
err := transport_tpg.Retry(transport_tpg.RetryOptions{
77+
RetryFunc: func() error {
78+
req, err := http.NewRequest(method, rawurl, body)
79+
if err != nil {
80+
return err
81+
}
82+
83+
req.Header = reqHeaders
84+
res, err = config.Client.Do(req)
85+
if err != nil {
86+
return err
87+
}
88+
89+
if err := googleapi.CheckResponse(res); err != nil {
90+
googleapi.CloseBody(res)
91+
return err
92+
}
93+
94+
return nil
95+
},
96+
Timeout: timeout,
97+
ErrorRetryPredicates: errorRetryPredicates,
98+
})
99+
if err != nil {
100+
return nil, err
101+
}
102+
103+
if res == nil {
104+
return nil, fmt.Errorf("Unable to parse server response. This is most likely a terraform problem, please file a bug at https://github.com/hashicorp/terraform-provider-google/issues.")
105+
}
106+
107+
// The defer call must be made outside of the retryFunc otherwise it's closed too soon.
108+
defer googleapi.CloseBody(res)
109+
110+
// 204 responses will have no body, so we're going to error with "EOF" if we
111+
// try to parse it. Instead, we can just return nil.
112+
if res.StatusCode == 204 {
113+
return nil, nil
114+
}
115+
result := make(map[string]interface{})
116+
if err := json.NewDecoder(res.Body).Decode(&result); err != nil {
117+
return nil, err
118+
}
119+
log.Printf("[DEBUG] sendRequestRawBodyWithTimeout returning")
120+
return result, nil
121+
}

0 commit comments

Comments
 (0)