mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-07-05 17:52:38 +00:00
Add labels to google_compute_disk (#344)
* Remove redundant '(Computed)' text * Add support for setting labels on compute_disk * Fix minor spacing issue in test
This commit is contained in:
parent
9e5f4bb33c
commit
772a5f28f9
|
@ -91,11 +91,24 @@ func resourceComputeDisk() *schema.Resource {
|
|||
Default: "pd-standard",
|
||||
ForceNew: true,
|
||||
},
|
||||
|
||||
"users": &schema.Schema{
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
Elem: &schema.Schema{Type: schema.TypeString},
|
||||
},
|
||||
|
||||
"labels": &schema.Schema{
|
||||
Type: schema.TypeMap,
|
||||
Optional: true,
|
||||
Elem: &schema.Schema{Type: schema.TypeString},
|
||||
Set: schema.HashString,
|
||||
},
|
||||
|
||||
"label_fingerprint": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -173,6 +186,10 @@ func resourceComputeDiskCreate(d *schema.ResourceData, meta interface{}) error {
|
|||
disk.DiskEncryptionKey.RawKey = v.(string)
|
||||
}
|
||||
|
||||
if _, ok := d.GetOk("labels"); ok {
|
||||
disk.Labels = expandLabels(d)
|
||||
}
|
||||
|
||||
op, err := config.clientCompute.Disks.Insert(
|
||||
project, d.Get("zone").(string), disk).Do()
|
||||
if err != nil {
|
||||
|
@ -196,7 +213,7 @@ func resourceComputeDiskUpdate(d *schema.ResourceData, meta interface{}) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
d.Partial(true)
|
||||
if d.HasChange("size") {
|
||||
rb := &compute.DisksResizeRequest{
|
||||
SizeGb: int64(d.Get("size").(int)),
|
||||
|
@ -206,12 +223,33 @@ func resourceComputeDiskUpdate(d *schema.ResourceData, meta interface{}) error {
|
|||
if err != nil {
|
||||
return fmt.Errorf("Error resizing disk: %s", err)
|
||||
}
|
||||
d.SetPartial("size")
|
||||
|
||||
err = computeOperationWait(config, op, project, "Resizing Disk")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if d.HasChange("labels") {
|
||||
zslr := compute.ZoneSetLabelsRequest{
|
||||
Labels: expandLabels(d),
|
||||
LabelFingerprint: d.Get("label_fingerprint").(string),
|
||||
}
|
||||
op, err := config.clientCompute.Disks.SetLabels(
|
||||
project, d.Get("zone").(string), d.Id(), &zslr).Do()
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error when setting labels: %s", err)
|
||||
}
|
||||
d.SetPartial("labels")
|
||||
|
||||
err = computeOperationWait(config, op, project, "Setting labels on disk")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
d.Partial(false)
|
||||
|
||||
return resourceComputeDiskRead(d, meta)
|
||||
}
|
||||
|
||||
|
@ -266,6 +304,8 @@ func resourceComputeDiskRead(d *schema.ResourceData, meta interface{}) error {
|
|||
|
||||
d.Set("image", disk.SourceImage)
|
||||
d.Set("snapshot", disk.SourceSnapshot)
|
||||
d.Set("labels", disk.Labels)
|
||||
d.Set("label_fingerprint", disk.LabelFingerprint)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -26,13 +26,15 @@ func TestAccComputeDisk_basic(t *testing.T) {
|
|||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckComputeDiskExists(
|
||||
"google_compute_disk.foobar", &disk),
|
||||
testAccCheckComputeDiskHasLabel(&disk, "my-label", "my-label-value"),
|
||||
testAccCheckComputeDiskHasLabelFingerprint(&disk, "google_compute_disk.foobar"),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccComputeDisk_updateSize(t *testing.T) {
|
||||
func TestAccComputeDisk_update(t *testing.T) {
|
||||
diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
|
||||
var disk compute.Disk
|
||||
|
||||
|
@ -46,14 +48,19 @@ func TestAccComputeDisk_updateSize(t *testing.T) {
|
|||
testAccCheckComputeDiskExists(
|
||||
"google_compute_disk.foobar", &disk),
|
||||
resource.TestCheckResourceAttr("google_compute_disk.foobar", "size", "50"),
|
||||
testAccCheckComputeDiskHasLabel(&disk, "my-label", "my-label-value"),
|
||||
testAccCheckComputeDiskHasLabelFingerprint(&disk, "google_compute_disk.foobar"),
|
||||
),
|
||||
},
|
||||
{
|
||||
Config: testAccComputeDisk_resized(diskName),
|
||||
Config: testAccComputeDisk_updated(diskName),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckComputeDiskExists(
|
||||
"google_compute_disk.foobar", &disk),
|
||||
resource.TestCheckResourceAttr("google_compute_disk.foobar", "size", "100"),
|
||||
testAccCheckComputeDiskHasLabel(&disk, "my-label", "my-updated-label-value"),
|
||||
testAccCheckComputeDiskHasLabel(&disk, "a-new-label", "a-new-label-value"),
|
||||
testAccCheckComputeDiskHasLabelFingerprint(&disk, "google_compute_disk.foobar"),
|
||||
),
|
||||
},
|
||||
},
|
||||
|
@ -194,6 +201,37 @@ func testAccCheckComputeDiskExists(n string, disk *compute.Disk) resource.TestCh
|
|||
}
|
||||
}
|
||||
|
||||
func testAccCheckComputeDiskHasLabel(disk *compute.Disk, key, value string) resource.TestCheckFunc {
|
||||
return func(s *terraform.State) error {
|
||||
val, ok := disk.Labels[key]
|
||||
if !ok {
|
||||
return fmt.Errorf("Label with key %s not found", key)
|
||||
}
|
||||
|
||||
if val != value {
|
||||
return fmt.Errorf("Label value did not match for key %s: expected %s but found %s", key, value, val)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func testAccCheckComputeDiskHasLabelFingerprint(disk *compute.Disk, resourceName string) resource.TestCheckFunc {
|
||||
return func(s *terraform.State) error {
|
||||
state := s.RootModule().Resources[resourceName]
|
||||
if state == nil {
|
||||
return fmt.Errorf("Unable to find resource named %s", resourceName)
|
||||
}
|
||||
|
||||
labelFingerprint := state.Primary.Attributes["label_fingerprint"]
|
||||
if labelFingerprint != disk.LabelFingerprint {
|
||||
return fmt.Errorf("Label fingerprints do not match: api returned %s but state has %s",
|
||||
disk.LabelFingerprint, labelFingerprint)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func testAccCheckEncryptionKey(n string, disk *compute.Disk) resource.TestCheckFunc {
|
||||
return func(s *terraform.State) error {
|
||||
rs, ok := s.RootModule().Resources[n]
|
||||
|
@ -244,10 +282,13 @@ resource "google_compute_disk" "foobar" {
|
|||
size = 50
|
||||
type = "pd-ssd"
|
||||
zone = "us-central1-a"
|
||||
labels {
|
||||
my-label = "my-label-value"
|
||||
}
|
||||
}`, diskName)
|
||||
}
|
||||
|
||||
func testAccComputeDisk_resized(diskName string) string {
|
||||
func testAccComputeDisk_updated(diskName string) string {
|
||||
return fmt.Sprintf(`
|
||||
resource "google_compute_disk" "foobar" {
|
||||
name = "%s"
|
||||
|
@ -255,6 +296,10 @@ resource "google_compute_disk" "foobar" {
|
|||
size = 100
|
||||
type = "pd-ssd"
|
||||
zone = "us-central1-a"
|
||||
labels {
|
||||
my-label = "my-updated-label-value"
|
||||
a-new-label = "a-new-label-value"
|
||||
}
|
||||
}`, diskName)
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,9 @@ resource "google_compute_disk" "default" {
|
|||
type = "pd-ssd"
|
||||
zone = "us-central1-a"
|
||||
image = "debian-8-jessie-v20170523"
|
||||
labels {
|
||||
environment = "dev"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -57,6 +60,8 @@ The following arguments are supported:
|
|||
|
||||
* `type` - (Optional) The GCE disk type.
|
||||
|
||||
* `labels` - (Optional) A set of key/value label pairs to assign to the image.
|
||||
|
||||
## Attributes Reference
|
||||
|
||||
In addition to the arguments listed above, the following computed attributes are
|
||||
|
@ -69,7 +74,9 @@ exported:
|
|||
|
||||
* `self_link` - The URI of the created resource.
|
||||
|
||||
* `users` - (Computed) The Users of the created resource.
|
||||
* `users` - The Users of the created resource.
|
||||
|
||||
* `label_fingerprint` - The fingerprint of the assigned labels.
|
||||
|
||||
## Import
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user