Merge pull request #14774 from hashicorp/paddy_fix_12278_rebase

provider/google: enable use of URI as snapshot name when creating a disk
This commit is contained in:
Paddy 2017-05-23 14:43:46 -07:00 committed by GitHub
commit 8db702938e
2 changed files with 64 additions and 9 deletions

View File

@ -3,6 +3,7 @@ package google
import ( import (
"fmt" "fmt"
"log" "log"
"regexp"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
"google.golang.org/api/compute/v1" "google.golang.org/api/compute/v1"
@ -129,6 +130,10 @@ func resourceComputeDiskCreate(d *schema.ResourceData, meta interface{}) error {
if v, ok := d.GetOk("snapshot"); ok { if v, ok := d.GetOk("snapshot"); ok {
snapshotName := v.(string) snapshotName := v.(string)
match, _ := regexp.MatchString("^https://www.googleapis.com/compute", snapshotName)
if match {
disk.SourceSnapshot = snapshotName
} else {
log.Printf("[DEBUG] Loading snapshot: %s", snapshotName) log.Printf("[DEBUG] Loading snapshot: %s", snapshotName)
snapshotData, err := config.clientCompute.Snapshots.Get( snapshotData, err := config.clientCompute.Snapshots.Get(
project, snapshotName).Do() project, snapshotName).Do()
@ -138,9 +143,9 @@ func resourceComputeDiskCreate(d *schema.ResourceData, meta interface{}) error {
"Error loading snapshot '%s': %s", "Error loading snapshot '%s': %s",
snapshotName, err) snapshotName, err)
} }
disk.SourceSnapshot = snapshotData.SelfLink disk.SourceSnapshot = snapshotData.SelfLink
} }
}
if v, ok := d.GetOk("disk_encryption_key_raw"); ok { if v, ok := d.GetOk("disk_encryption_key_raw"); ok {
disk.DiskEncryptionKey = &compute.CustomerEncryptionKey{} disk.DiskEncryptionKey = &compute.CustomerEncryptionKey{}

View File

@ -2,6 +2,7 @@ package google
import ( import (
"fmt" "fmt"
"os"
"testing" "testing"
"github.com/hashicorp/terraform/helper/acctest" "github.com/hashicorp/terraform/helper/acctest"
@ -30,6 +31,30 @@ func TestAccComputeDisk_basic(t *testing.T) {
}) })
} }
func TestAccComputeDisk_fromSnapshotURI(t *testing.T) {
diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
firstDiskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
snapshotName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
var xpn_host = os.Getenv("GOOGLE_XPN_HOST_PROJECT")
var disk compute.Disk
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeDiskDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeDisk_fromSnapshotURI(firstDiskName, snapshotName, diskName, xpn_host),
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeDiskExists(
"google_compute_disk.seconddisk", &disk),
),
},
},
})
}
func TestAccComputeDisk_encryption(t *testing.T) { func TestAccComputeDisk_encryption(t *testing.T) {
diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
var disk compute.Disk var disk compute.Disk
@ -130,6 +155,31 @@ resource "google_compute_disk" "foobar" {
}`, diskName) }`, diskName)
} }
func testAccComputeDisk_fromSnapshotURI(firstDiskName, snapshotName, diskName, xpn_host string) string {
return fmt.Sprintf(`
resource "google_compute_disk" "foobar" {
name = "%s"
image = "debian-8-jessie-v20160803"
size = 50
type = "pd-ssd"
zone = "us-central1-a"
project = "%s"
}
resource "google_compute_snapshot" "snapdisk" {
name = "%s"
source_disk = "${google_compute_disk.foobar.name}"
zone = "us-central1-a"
project = "%s"
}
resource "google_compute_disk" "seconddisk" {
name = "%s"
snapshot = "${google_compute_snapshot.snapdisk.self_link}"
type = "pd-ssd"
zone = "us-central1-a"
}`, firstDiskName, xpn_host, snapshotName, xpn_host, diskName)
}
func testAccComputeDisk_encryption(diskName string) string { func testAccComputeDisk_encryption(diskName string) string {
return fmt.Sprintf(` return fmt.Sprintf(`
resource "google_compute_disk" "foobar" { resource "google_compute_disk" "foobar" {