prereqs for regional disks (#1753)

In testing an upcoming `google_compute_region_disk` resource, I had to make these changes. Checking them in separately so that when the magician runs, these changes will already be a part of TF.
This commit is contained in:
Dana Hoffman 2018-07-10 17:10:05 -07:00 committed by GitHub
parent bbed86dd0b
commit a6198a0b60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 62 additions and 14 deletions

View File

@ -1,6 +1,7 @@
package google
import (
computeBeta "google.golang.org/api/compute/v0.beta"
"google.golang.org/api/compute/v1"
)
@ -13,3 +14,13 @@ func readDiskType(c *Config, zone *compute.Zone, project, name string) (*compute
return nil, err
}
}
// readRegionDiskType finds the disk type with the given name.
func readRegionDiskType(c *Config, region *compute.Region, project, name string) (*computeBeta.DiskType, error) {
diskType, err := c.clientComputeBeta.RegionDiskTypes.Get(project, region.Name, name).Do()
if err == nil && diskType != nil && diskType.SelfLink != "" {
return diskType, nil
} else {
return nil, err
}
}

View File

@ -46,6 +46,10 @@ func ParseDiskFieldValue(disk string, d TerraformResourceData, config *Config) (
return parseZonalFieldValue("disks", disk, "project", "zone", d, config, false)
}
func ParseRegionDiskFieldValue(disk string, d TerraformResourceData, config *Config) (*RegionalFieldValue, error) {
return parseRegionalFieldValue("disks", disk, "project", "region", "zone", d, config, false)
}
func ParseOrganizationCustomRoleName(role string) (*OrganizationFieldValue, error) {
return parseOrganizationFieldValue("roles", role, false)
}

View File

@ -251,7 +251,7 @@ func resourceComputeInstance() *schema.Resource {
"source": &schema.Schema{
Type: schema.TypeString,
Required: true,
DiffSuppressFunc: linkDiffSuppress,
DiffSuppressFunc: compareSelfLinkOrResourceName,
},
"device_name": &schema.Schema{
@ -863,11 +863,22 @@ func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error
continue
}
disk := v.(map[string]interface{})
source, err := ParseDiskFieldValue(disk["source"].(string), d, config)
if err != nil {
return err
s := disk["source"].(string)
var sourceLink string
if strings.Contains(s, "regions/") {
source, err := ParseRegionDiskFieldValue(disk["source"].(string), d, config)
if err != nil {
return err
}
sourceLink = source.RelativeLink()
} else {
source, err := ParseDiskFieldValue(disk["source"].(string), d, config)
if err != nil {
return err
}
sourceLink = source.RelativeLink()
}
attachedDiskSources[source.RelativeLink()] = i
attachedDiskSources[sourceLink] = i
}
attachedDisks := make([]map[string]interface{}, d.Get("attached_disk.#").(int))
@ -878,11 +889,21 @@ func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error
} else if disk.Type == "SCRATCH" {
scratchDisks = append(scratchDisks, flattenScratchDisk(disk))
} else {
source, err := ParseDiskFieldValue(disk.Source, d, config)
if err != nil {
return err
var sourceLink string
if strings.Contains(disk.Source, "regions/") {
source, err := ParseRegionDiskFieldValue(disk.Source, d, config)
if err != nil {
return err
}
sourceLink = source.RelativeLink()
} else {
source, err := ParseDiskFieldValue(disk.Source, d, config)
if err != nil {
return err
}
sourceLink = source.RelativeLink()
}
adIndex, inConfig := attachedDiskSources[source.RelativeLink()]
adIndex, inConfig := attachedDiskSources[sourceLink]
di := map[string]interface{}{
"source": ConvertSelfLinkToV1(disk.Source),
"device_name": disk.DeviceName,
@ -1408,13 +1429,24 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
func expandAttachedDisk(diskConfig map[string]interface{}, d *schema.ResourceData, meta interface{}) (*computeBeta.AttachedDisk, error) {
config := meta.(*Config)
source, err := ParseDiskFieldValue(diskConfig["source"].(string), d, config)
if err != nil {
return nil, err
s := diskConfig["source"].(string)
var sourceLink string
if strings.Contains(s, "regions/") {
source, err := ParseRegionDiskFieldValue(s, d, config)
if err != nil {
return nil, err
}
sourceLink = source.RelativeLink()
} else {
source, err := ParseDiskFieldValue(s, d, config)
if err != nil {
return nil, err
}
sourceLink = source.RelativeLink()
}
disk := &computeBeta.AttachedDisk{
Source: source.RelativeLink(),
Source: sourceLink,
}
if v, ok := diskConfig["mode"]; ok {

View File

@ -206,7 +206,8 @@ The `disk` block supports:
read-write mode.
* `source` - (Required if source_image not set) The name of the disk (such as
those managed by `google_compute_disk`) to attach.
those managed by `google_compute_disk`) to attach. This cannot be a regional
disk.
* `disk_type` - (Optional) The GCE disk type. Can be either `"pd-ssd"`,
`"local-ssd"`, or `"pd-standard"`.