mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-01 16:21:06 +00:00
Fixed attached disk update test @ beta (#3506)
Signed-off-by: Modular Magician <magic-modules@google.com>
This commit is contained in:
parent
754ff5787a
commit
6345dd2dc5
@ -18,7 +18,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -29,14 +28,6 @@ import (
|
|||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
computeDiskUserRegexString = "^(?:https://www.googleapis.com/compute/v1/projects/)?(" + ProjectRegex + ")/zones/([-_a-zA-Z0-9]*)/instances/([-_a-zA-Z0-9]*)$"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
computeDiskUserRegex = regexp.MustCompile(computeDiskUserRegexString)
|
|
||||||
)
|
|
||||||
|
|
||||||
// Is the new disk size smaller than the old one?
|
// Is the new disk size smaller than the old one?
|
||||||
func isDiskShrinkage(old, new, _ interface{}) bool {
|
func isDiskShrinkage(old, new, _ interface{}) bool {
|
||||||
// It's okay to remove size entirely.
|
// It's okay to remove size entirely.
|
||||||
@ -775,13 +766,11 @@ func resourceComputeDiskDelete(d *schema.ResourceData, meta interface{}) error {
|
|||||||
|
|
||||||
for _, instance := range convertStringArr(v) {
|
for _, instance := range convertStringArr(v) {
|
||||||
self := d.Get("self_link").(string)
|
self := d.Get("self_link").(string)
|
||||||
if !computeDiskUserRegex.MatchString(instance) {
|
instanceProject, instanceZone, instanceName, err := GetLocationalResourcePropertiesFromSelfLinkString(instance)
|
||||||
return fmt.Errorf("Unknown user %q of disk %q", instance, self)
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
matches := computeDiskUserRegex.FindStringSubmatch(instance)
|
|
||||||
instanceProject := matches[1]
|
|
||||||
instanceZone := matches[2]
|
|
||||||
instanceName := matches[3]
|
|
||||||
i, err := config.clientCompute.Instances.Get(instanceProject, instanceZone, instanceName).Do()
|
i, err := config.clientCompute.Instances.Get(instanceProject, instanceZone, instanceName).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
|
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
|
||||||
|
@ -437,38 +437,6 @@ func TestAccComputeDisk_deleteDetachIGM(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAccComputeDisk_computeDiskUserRegex(t *testing.T) {
|
|
||||||
|
|
||||||
shouldPass := []string{
|
|
||||||
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/project-id/zones/us-central1/instances/123",
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/123123/zones/us-central1/instances/123",
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/hashicorptest.net:project-123/zones/us-central1/instances/123",
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/123/zones/456/instances/789",
|
|
||||||
}
|
|
||||||
|
|
||||||
shouldFail := []string{
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/project#/zones/us-central1/instances/123",
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/project/zones/us-central#/instances/123",
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/project/zones/us-central1/instances/?",
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/foo.com:bar:baz/zones/us-central1/instances/?",
|
|
||||||
"https://www.googleapis.com/compute/v1/projects/foo.com:/zones/us-central1/instances/?",
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, element := range shouldPass {
|
|
||||||
if !computeDiskUserRegex.MatchString(element) {
|
|
||||||
t.Error("computeDiskUserRegex should match on '" + element + "' but doesn't")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, element := range shouldFail {
|
|
||||||
if computeDiskUserRegex.MatchString(element) {
|
|
||||||
t.Error("computeDiskUserRegex shouldn't match on '" + element + "' but does")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func testAccCheckComputeDiskExists(n, p string, disk *compute.Disk) resource.TestCheckFunc {
|
func testAccCheckComputeDiskExists(n, p string, disk *compute.Disk) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
rs, ok := s.RootModule().Resources[n]
|
rs, ok := s.RootModule().Resources[n]
|
||||||
|
@ -510,13 +510,11 @@ func resourceComputeRegionDiskDelete(d *schema.ResourceData, meta interface{}) e
|
|||||||
|
|
||||||
for _, instance := range convertStringArr(v) {
|
for _, instance := range convertStringArr(v) {
|
||||||
self := d.Get("self_link").(string)
|
self := d.Get("self_link").(string)
|
||||||
if !computeDiskUserRegex.MatchString(instance) {
|
instanceProject, instanceZone, instanceName, err := GetLocationalResourcePropertiesFromSelfLinkString(instance)
|
||||||
return fmt.Errorf("Unknown user %q of disk %q", instance, self)
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
matches := computeDiskUserRegex.FindStringSubmatch(instance)
|
|
||||||
instanceProject := matches[1]
|
|
||||||
instanceZone := matches[2]
|
|
||||||
instanceName := matches[3]
|
|
||||||
i, err := config.clientCompute.Instances.Get(instanceProject, instanceZone, instanceName).Do()
|
i, err := config.clientCompute.Instances.Get(instanceProject, instanceZone, instanceName).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
|
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
|
||||||
|
@ -106,15 +106,7 @@ func GetRegionalResourcePropertiesFromSelfLinkOrSchema(d *schema.ResourceData, c
|
|||||||
|
|
||||||
func getResourcePropertiesFromSelfLinkOrSchema(d *schema.ResourceData, config *Config, locationType LocationType) (string, string, string, error) {
|
func getResourcePropertiesFromSelfLinkOrSchema(d *schema.ResourceData, config *Config, locationType LocationType) (string, string, string, error) {
|
||||||
if selfLink, ok := d.GetOk("self_link"); ok {
|
if selfLink, ok := d.GetOk("self_link"); ok {
|
||||||
parsed, err := url.Parse(selfLink.(string))
|
return GetLocationalResourcePropertiesFromSelfLinkString(selfLink.(string))
|
||||||
if err != nil {
|
|
||||||
return "", "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
s := strings.Split(parsed.Path, "/")
|
|
||||||
// https://www.googleapis.com/compute/beta/projects/project_name/regions/region_name/instanceGroups/foobarbaz
|
|
||||||
// => project_name, region_name, foobarbaz
|
|
||||||
return s[4], s[6], s[8], nil
|
|
||||||
} else {
|
} else {
|
||||||
project, err := getProject(d, config)
|
project, err := getProject(d, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -142,3 +134,14 @@ func getResourcePropertiesFromSelfLinkOrSchema(d *schema.ResourceData, config *C
|
|||||||
return project, location, name, nil
|
return project, location, name, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// given a full locational (non-global) self link, returns the project + region/zone + name or an error
|
||||||
|
func GetLocationalResourcePropertiesFromSelfLinkString(selfLink string) (string, string, string, error) {
|
||||||
|
parsed, err := url.Parse(selfLink)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
s := strings.Split(parsed.Path, "/")
|
||||||
|
return s[4], s[6], s[8], nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user