mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-07-01 07:42:40 +00:00
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:
parent
bbed86dd0b
commit
a6198a0b60
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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"`.
|
||||
|
|
Loading…
Reference in New Issue
Block a user