Skip to content

Commit 203efc5

Browse files
Migrate partially resource_compute_instance_template.go.tmpl resources to use direct HTTP rather than a client library (#17304)
Co-authored-by: Igor Nadenenko <nadenenko@google.com>
1 parent 11df7d9 commit 203efc5

1 file changed

Lines changed: 61 additions & 9 deletions

File tree

mmv1/third_party/terraform/services/compute/resource_compute_instance_template.go.tmpl

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package compute
33

44
import (
55
"context"
6+
"encoding/json"
67
"fmt"
78
"reflect"
89
"strings"
@@ -1800,15 +1801,35 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac
18001801
Name: itName,
18011802
}
18021803

1803-
op, err := NewClient(config, userAgent).InstanceTemplates.Insert(project, instanceTemplate).Do()
1804+
itBytes, err := json.Marshal(instanceTemplate)
1805+
if err != nil {
1806+
return fmt.Errorf("Error marshaling instance template: %s", err)
1807+
}
1808+
var itBody map[string]interface{}
1809+
if err := json.Unmarshal(itBytes, &itBody); err != nil {
1810+
return fmt.Errorf("Error unmarshaling instance template: %s", err)
1811+
}
1812+
1813+
url, err := tpgresource.ReplaceVars(d, config, "{{"{{"}}ComputeBasePath{{"}}"}}projects/{{"{{"}}project{{"}}"}}/global/instanceTemplates")
1814+
if err != nil {
1815+
return err
1816+
}
1817+
op, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
1818+
Config: config,
1819+
Method: "POST",
1820+
Project: project,
1821+
RawURL: url,
1822+
UserAgent: userAgent,
1823+
Body: itBody,
1824+
})
18041825
if err != nil {
18051826
return fmt.Errorf("Error creating instance template: %s", err)
18061827
}
18071828

18081829
// Store the ID now
18091830
d.SetId(fmt.Sprintf("projects/%s/global/instanceTemplates/%s", project, instanceTemplate.Name))
18101831
// And also the unique ID
1811-
d.Set("self_link_unique", fmt.Sprintf("%v?uniqueId=%v", d.Id(), op.TargetId))
1832+
d.Set("self_link_unique", fmt.Sprintf("%v?uniqueId=%v", d.Id(), op["targetId"]))
18121833

18131834
err = ComputeOperationWaitTime(config, op, project, "Creating Instance Template", userAgent, d.Timeout(schema.TimeoutCreate))
18141835
if err != nil {
@@ -2096,14 +2117,35 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
20962117
}
20972118

20982119
splits := strings.Split(idStr, "/")
2099-
{{- if eq $.TargetVersionName "ga" }}
2100-
instanceTemplate, err := NewClient(config, userAgent).InstanceTemplates.Get(project, splits[len(splits)-1]).Do()
2101-
{{- else }}
2102-
instanceTemplate, err := NewClient(config, userAgent).InstanceTemplates.Get(project, splits[len(splits)-1]).View("FULL").Do()
2103-
{{- end }}
2120+
baseUrl, err := tpgresource.ReplaceVars(d, config, "{{"{{"}}ComputeBasePath{{"}}"}}projects/{{"{{"}}project{{"}}"}}/global/instanceTemplates")
2121+
if err != nil {
2122+
return err
2123+
}
2124+
url := fmt.Sprintf("%s/%s", baseUrl, splits[len(splits)-1])
2125+
{{- if ne $.TargetVersionName "ga" }}
2126+
url, err = transport_tpg.AddQueryParams(url, map[string]string{"view": "FULL"})
2127+
if err != nil {
2128+
return err
2129+
}
2130+
{{- end }}
2131+
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
2132+
Config: config,
2133+
Method: "GET",
2134+
Project: project,
2135+
RawURL: url,
2136+
UserAgent: userAgent,
2137+
})
21042138
if err != nil {
21052139
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("Instance Template %q", d.Get("name").(string)))
21062140
}
2141+
itBytes, err := json.Marshal(res)
2142+
if err != nil {
2143+
return fmt.Errorf("Error marshaling instance template response: %s", err)
2144+
}
2145+
var instanceTemplate compute.InstanceTemplate
2146+
if err := json.Unmarshal(itBytes, &instanceTemplate); err != nil {
2147+
return fmt.Errorf("Error unmarshaling instance template response: %s", err)
2148+
}
21072149
// Set the metadata fingerprint if there is one.
21082150
if instanceTemplate.Properties.Metadata != nil {
21092151
if err = d.Set("metadata_fingerprint", instanceTemplate.Properties.Metadata.Fingerprint); err != nil {
@@ -2344,8 +2386,18 @@ func resourceComputeInstanceTemplateDelete(d *schema.ResourceData, meta interfac
23442386
}
23452387

23462388
splits := strings.Split(d.Id(), "/")
2347-
op, err := NewClient(config, userAgent).InstanceTemplates.Delete(
2348-
project, splits[len(splits)-1]).Do()
2389+
baseUrl, err := tpgresource.ReplaceVars(d, config, "{{"{{"}}ComputeBasePath{{"}}"}}projects/{{"{{"}}project{{"}}"}}/global/instanceTemplates")
2390+
if err != nil {
2391+
return err
2392+
}
2393+
url := fmt.Sprintf("%s/%s", baseUrl, splits[len(splits)-1])
2394+
op, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
2395+
Config: config,
2396+
Method: "DELETE",
2397+
Project: project,
2398+
RawURL: url,
2399+
UserAgent: userAgent,
2400+
})
23492401
if err != nil {
23502402
return fmt.Errorf("Error deleting instance template: %s", err)
23512403
}

0 commit comments

Comments
 (0)