Skip to content

Commit e172196

Browse files
r/key_vault_key: updating the latest version during updates
1 parent a49a2c1 commit e172196

File tree

2 files changed

+154
-1
lines changed

2 files changed

+154
-1
lines changed

azurerm/internal/services/keyvault/key_vault_key_resource.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ func resourceArmKeyVaultKeyUpdate(d *schema.ResourceData, meta interface{}) erro
313313
parameters.KeyAttributes.Expires = &expirationUnixTime
314314
}
315315

316-
if _, err = client.UpdateKey(ctx, id.KeyVaultBaseUrl, id.Name, id.Version, parameters); err != nil {
316+
if _, err = client.UpdateKey(ctx, id.KeyVaultBaseUrl, id.Name, "", parameters); err != nil {
317317
return err
318318
}
319319

azurerm/internal/services/keyvault/tests/key_vault_key_resource_test.go

+153
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import (
44
"fmt"
55
"log"
66
"testing"
7+
"time"
78

9+
"github.com/Azure/azure-sdk-for-go/services/keyvault/2016-10-01/keyvault"
10+
"github.com/Azure/go-autorest/autorest/date"
811
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
912
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/acceptance"
1013
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
@@ -218,6 +221,37 @@ func TestAccAzureRMKeyVaultKey_update(t *testing.T) {
218221
})
219222
}
220223

224+
func TestAccAzureRMKeyVaultKey_updatedExternally(t *testing.T) {
225+
data := acceptance.BuildTestData(t, "azurerm_key_vault_key", "test")
226+
227+
resource.ParallelTest(t, resource.TestCase{
228+
PreCheck: func() { acceptance.PreCheck(t) },
229+
Providers: acceptance.SupportedProviders,
230+
CheckDestroy: testCheckAzureRMKeyVaultKeyDestroy,
231+
Steps: []resource.TestStep{
232+
{
233+
Config: testAccAzureRMKeyVaultKey_basicEC(data),
234+
Check: resource.ComposeTestCheckFunc(
235+
testCheckAzureRMKeyVaultKeyExists(data.ResourceName),
236+
updateExpiryDateForKeyVaultKey(data.ResourceName, "2029-02-02T12:59:00Z"),
237+
),
238+
ExpectNonEmptyPlan: true,
239+
},
240+
{
241+
Config: testAccAzureRMKeyVaultKey_basicECUpdatedExternally(data),
242+
Check: resource.ComposeTestCheckFunc(
243+
testCheckAzureRMKeyVaultKeyExists(data.ResourceName),
244+
),
245+
},
246+
{
247+
Config: testAccAzureRMKeyVaultKey_basicECUpdatedExternally(data),
248+
PlanOnly: true,
249+
},
250+
data.ImportStep("key_size"),
251+
},
252+
})
253+
}
254+
221255
func TestAccAzureRMKeyVaultKey_disappears(t *testing.T) {
222256
data := acceptance.BuildTestData(t, "azurerm_key_vault_key", "test")
223257

@@ -340,6 +374,60 @@ func testCheckAzureRMKeyVaultKeyExists(resourceName string) resource.TestCheckFu
340374
}
341375
}
342376

377+
func updateExpiryDateForKeyVaultKey(resourceName string, expiryDate string) resource.TestCheckFunc {
378+
return func(s *terraform.State) error {
379+
client := acceptance.AzureProvider.Meta().(*clients.Client).KeyVault.ManagementClient
380+
vaultClient := acceptance.AzureProvider.Meta().(*clients.Client).KeyVault.VaultsClient
381+
ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext
382+
383+
// Ensure we have enough information in state to look up in API
384+
rs, ok := s.RootModule().Resources[resourceName]
385+
if !ok {
386+
return fmt.Errorf("Not found: %s", resourceName)
387+
}
388+
name := rs.Primary.Attributes["name"]
389+
keyVaultId := rs.Primary.Attributes["key_vault_id"]
390+
vaultBaseUrl, err := azure.GetKeyVaultBaseUrlFromID(ctx, vaultClient, keyVaultId)
391+
if err != nil {
392+
return fmt.Errorf("Error looking up Secret %q vault url from id %q: %+v", name, keyVaultId, err)
393+
}
394+
395+
ok, err = azure.KeyVaultExists(ctx, acceptance.AzureProvider.Meta().(*clients.Client).KeyVault.VaultsClient, keyVaultId)
396+
if err != nil {
397+
return fmt.Errorf("Error checking if key vault %q for Key %q in Vault at url %q exists: %v", keyVaultId, name, vaultBaseUrl, err)
398+
}
399+
if !ok {
400+
log.Printf("[DEBUG] Key %q Key Vault %q was not found in Key Vault at URI %q ", name, keyVaultId, vaultBaseUrl)
401+
return nil
402+
}
403+
404+
expirationDate, err := time.Parse(time.RFC3339, expiryDate)
405+
if err != nil {
406+
return err
407+
}
408+
expirationUnixTime := date.UnixTime(expirationDate)
409+
update := keyvault.KeyUpdateParameters{
410+
KeyAttributes: &keyvault.KeyAttributes{
411+
Expires: &expirationUnixTime,
412+
},
413+
}
414+
if _, err = client.UpdateKey(ctx, vaultBaseUrl, name, "", update); err != nil {
415+
return fmt.Errorf("updating secret: %+v", err)
416+
}
417+
418+
resp, err := client.GetKey(ctx, vaultBaseUrl, name, "")
419+
if err != nil {
420+
if utils.ResponseWasNotFound(resp.Response) {
421+
return fmt.Errorf("Bad: Key Vault Key %q (resource group: %q) does not exist", name, vaultBaseUrl)
422+
}
423+
424+
return fmt.Errorf("Bad: Get on keyVaultManagementClient: %+v", err)
425+
}
426+
427+
return nil
428+
}
429+
}
430+
343431
func testCheckAzureRMKeyVaultKeyDisappears(resourceName string) resource.TestCheckFunc {
344432
return func(s *terraform.State) error {
345433
client := acceptance.AzureProvider.Meta().(*clients.Client).KeyVault.ManagementClient
@@ -411,6 +499,7 @@ resource "azurerm_key_vault" "test" {
411499
"create",
412500
"delete",
413501
"get",
502+
"update",
414503
]
415504
416505
secret_permissions = [
@@ -439,6 +528,70 @@ resource "azurerm_key_vault_key" "test" {
439528
`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString)
440529
}
441530

531+
func testAccAzureRMKeyVaultKey_basicECUpdatedExternally(data acceptance.TestData) string {
532+
return fmt.Sprintf(`
533+
provider "azurerm" {
534+
features {}
535+
}
536+
537+
data "azurerm_client_config" "current" {
538+
}
539+
540+
resource "azurerm_resource_group" "test" {
541+
name = "acctestRG-%d"
542+
location = "%s"
543+
}
544+
545+
resource "azurerm_key_vault" "test" {
546+
name = "acctestkv-%s"
547+
location = azurerm_resource_group.test.location
548+
resource_group_name = azurerm_resource_group.test.name
549+
tenant_id = data.azurerm_client_config.current.tenant_id
550+
551+
sku_name = "premium"
552+
553+
access_policy {
554+
tenant_id = data.azurerm_client_config.current.tenant_id
555+
object_id = data.azurerm_client_config.current.object_id
556+
557+
key_permissions = [
558+
"create",
559+
"delete",
560+
"get",
561+
"update",
562+
]
563+
564+
secret_permissions = [
565+
"get",
566+
"delete",
567+
"set",
568+
]
569+
}
570+
571+
tags = {
572+
environment = "Production"
573+
}
574+
}
575+
576+
resource "azurerm_key_vault_key" "test" {
577+
name = "key-%s"
578+
key_vault_id = azurerm_key_vault.test.id
579+
key_type = "EC"
580+
key_size = 2048
581+
expiration_date = "2029-02-02T12:59:00Z"
582+
583+
key_opts = [
584+
"sign",
585+
"verify",
586+
]
587+
588+
tags = {
589+
Rick = "Morty"
590+
}
591+
}
592+
`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString)
593+
}
594+
442595
func testAccAzureRMKeyVaultKey_requiresImport(data acceptance.TestData) string {
443596
template := testAccAzureRMKeyVaultKey_basicEC(data)
444597
return fmt.Sprintf(`

0 commit comments

Comments
 (0)