mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-04 17:51:11 +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",
|
Default: "pd-standard",
|
||||||
ForceNew: true,
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
"users": &schema.Schema{
|
"users": &schema.Schema{
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Schema{Type: schema.TypeString},
|
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)
|
disk.DiskEncryptionKey.RawKey = v.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, ok := d.GetOk("labels"); ok {
|
||||||
|
disk.Labels = expandLabels(d)
|
||||||
|
}
|
||||||
|
|
||||||
op, err := config.clientCompute.Disks.Insert(
|
op, err := config.clientCompute.Disks.Insert(
|
||||||
project, d.Get("zone").(string), disk).Do()
|
project, d.Get("zone").(string), disk).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -196,7 +213,7 @@ func resourceComputeDiskUpdate(d *schema.ResourceData, meta interface{}) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
d.Partial(true)
|
||||||
if d.HasChange("size") {
|
if d.HasChange("size") {
|
||||||
rb := &compute.DisksResizeRequest{
|
rb := &compute.DisksResizeRequest{
|
||||||
SizeGb: int64(d.Get("size").(int)),
|
SizeGb: int64(d.Get("size").(int)),
|
||||||
@ -206,12 +223,33 @@ func resourceComputeDiskUpdate(d *schema.ResourceData, meta interface{}) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error resizing disk: %s", err)
|
return fmt.Errorf("Error resizing disk: %s", err)
|
||||||
}
|
}
|
||||||
|
d.SetPartial("size")
|
||||||
|
|
||||||
err = computeOperationWait(config, op, project, "Resizing Disk")
|
err = computeOperationWait(config, op, project, "Resizing Disk")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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)
|
return resourceComputeDiskRead(d, meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,6 +304,8 @@ func resourceComputeDiskRead(d *schema.ResourceData, meta interface{}) error {
|
|||||||
|
|
||||||
d.Set("image", disk.SourceImage)
|
d.Set("image", disk.SourceImage)
|
||||||
d.Set("snapshot", disk.SourceSnapshot)
|
d.Set("snapshot", disk.SourceSnapshot)
|
||||||
|
d.Set("labels", disk.Labels)
|
||||||
|
d.Set("label_fingerprint", disk.LabelFingerprint)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -26,13 +26,15 @@ func TestAccComputeDisk_basic(t *testing.T) {
|
|||||||
Check: resource.ComposeTestCheckFunc(
|
Check: resource.ComposeTestCheckFunc(
|
||||||
testAccCheckComputeDiskExists(
|
testAccCheckComputeDiskExists(
|
||||||
"google_compute_disk.foobar", &disk),
|
"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))
|
diskName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
|
||||||
var disk compute.Disk
|
var disk compute.Disk
|
||||||
|
|
||||||
@ -46,14 +48,19 @@ func TestAccComputeDisk_updateSize(t *testing.T) {
|
|||||||
testAccCheckComputeDiskExists(
|
testAccCheckComputeDiskExists(
|
||||||
"google_compute_disk.foobar", &disk),
|
"google_compute_disk.foobar", &disk),
|
||||||
resource.TestCheckResourceAttr("google_compute_disk.foobar", "size", "50"),
|
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(
|
Check: resource.ComposeTestCheckFunc(
|
||||||
testAccCheckComputeDiskExists(
|
testAccCheckComputeDiskExists(
|
||||||
"google_compute_disk.foobar", &disk),
|
"google_compute_disk.foobar", &disk),
|
||||||
resource.TestCheckResourceAttr("google_compute_disk.foobar", "size", "100"),
|
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 {
|
func testAccCheckEncryptionKey(n 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]
|
||||||
@ -244,10 +282,13 @@ resource "google_compute_disk" "foobar" {
|
|||||||
size = 50
|
size = 50
|
||||||
type = "pd-ssd"
|
type = "pd-ssd"
|
||||||
zone = "us-central1-a"
|
zone = "us-central1-a"
|
||||||
|
labels {
|
||||||
|
my-label = "my-label-value"
|
||||||
|
}
|
||||||
}`, diskName)
|
}`, diskName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testAccComputeDisk_resized(diskName string) string {
|
func testAccComputeDisk_updated(diskName string) string {
|
||||||
return fmt.Sprintf(`
|
return fmt.Sprintf(`
|
||||||
resource "google_compute_disk" "foobar" {
|
resource "google_compute_disk" "foobar" {
|
||||||
name = "%s"
|
name = "%s"
|
||||||
@ -255,6 +296,10 @@ resource "google_compute_disk" "foobar" {
|
|||||||
size = 100
|
size = 100
|
||||||
type = "pd-ssd"
|
type = "pd-ssd"
|
||||||
zone = "us-central1-a"
|
zone = "us-central1-a"
|
||||||
|
labels {
|
||||||
|
my-label = "my-updated-label-value"
|
||||||
|
a-new-label = "a-new-label-value"
|
||||||
|
}
|
||||||
}`, diskName)
|
}`, diskName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,9 @@ resource "google_compute_disk" "default" {
|
|||||||
type = "pd-ssd"
|
type = "pd-ssd"
|
||||||
zone = "us-central1-a"
|
zone = "us-central1-a"
|
||||||
image = "debian-8-jessie-v20170523"
|
image = "debian-8-jessie-v20170523"
|
||||||
|
labels {
|
||||||
|
environment = "dev"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -57,6 +60,8 @@ The following arguments are supported:
|
|||||||
|
|
||||||
* `type` - (Optional) The GCE disk type.
|
* `type` - (Optional) The GCE disk type.
|
||||||
|
|
||||||
|
* `labels` - (Optional) A set of key/value label pairs to assign to the image.
|
||||||
|
|
||||||
## Attributes Reference
|
## Attributes Reference
|
||||||
|
|
||||||
In addition to the arguments listed above, the following computed attributes are
|
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.
|
* `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
|
## Import
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user