
cRud resourceHouseRead()
In addition to the workflow of the Read operation, we will look into an interesting aspect of Terraform which is easy to miss out as it is not written anywhere in the code.
func resourceHouseRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
var diags diag.Diagnostics
config := m.(*Config)
homeUUID := d.Id()
// Construct the HTTP Request
url := config.Endpoint+"/u/"+config.UserUuid+"/homes/"+homeUUID
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return diag.FromErr(err)
}
// Set Headers
req.Header.Set("Authorization", "Bearer "+config.Token)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
// Send HTTP request
client := http.Client{}
resp, err := client.Do(req)
if err != nil {
return diag.FromErr(err)
}
defer resp.Body.Close()
var responseData map[string]interface{}
if resp.StatusCode == http.StatusOK {
// parse response JSON
if err := json.NewDecoder(resp.Body).Decode(&responseData); err != nil {
return diag.FromErr(err)
}
d.Set("name",responseData["name"].(string))
d.Set("description",responseData["description"].(string))
d.Set("domain_name",responseData["domain_name"].(string))
d.Set("content_version",responseData["content_version"].(float64))
} else if resp.StatusCode != http.StatusNotFound {
d.SetId("")
} else if resp.StatusCode != http.StatusOK {
return diag.FromErr(fmt.Errorf("failed to read home resource, status_code: %d, status: %s, body %s", resp.StatusCode, resp.Status, responseData))
}
return diags
}Multiverse of Madness: multiple States


Last updated