-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New Data Source: azurerm_key_vault_secret_versions
#27393
base: main
Are you sure you want to change the base?
New Data Source: azurerm_key_vault_secret_versions
#27393
Conversation
Thank you so much for taking the time to put this together! We really appreciate your contribution. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this PR @ned1313! I left a few suggestions in-line, mind taking a look?
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
"github.com/hashicorp/terraform-provider-azurerm/internal/sdk" | ||
keyVaultValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/keyvault/validate" | ||
"github.com/tombuildsstuff/kermit/sdk/keyvault/7.4/keyvault" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should reference kermit from jackofallops
"github.com/tombuildsstuff/kermit/sdk/keyvault/7.4/keyvault" | |
"github.com/jackofallops/kermit/sdk/keyvault/7.4/keyvault" |
func (r KeyVaultSecretVersionsDataSource) Read() sdk.ResourceFunc { | ||
return sdk.ResourceFunc{ | ||
Timeout: 5 * time.Minute, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maxResults32 := int32(model.MaxResults) | ||
|
||
resp, err := client.GetSecretVersions(ctx, *keyVaultUri, model.Name, &maxResults32) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this variable is only referenced once we would prefer to use the pointer.To
function to pass the casted results directly into the function call
maxResults32 := int32(model.MaxResults) | |
resp, err := client.GetSecretVersions(ctx, *keyVaultUri, model.Name, &maxResults32) | |
resp, err := client.GetSecretVersions(ctx, *keyVaultUri, model.Name, pointer.To(int32(model.MaxResults))) |
} | ||
} | ||
|
||
metadata.ResourceData.SetId(fmt.Sprintf("%s/%s", model.KeyVaultId, model.Name)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can generate the ID using existing functions in the keyvault package, we can then use the SetID
method on metadata
metadata.ResourceData.SetId(fmt.Sprintf("%s/%s", model.KeyVaultId, model.Name)) | |
id := keyVaultParse.NewSecretVersionlessID(keyVaultId.SubscriptionId, keyVaultId.ResourceGroupName, keyVaultId.VaultName, model.Name) | |
metadata.SetID(id) |
var item secretVersionModel | ||
item.Uri = *v.ID | ||
item.ID = (*v.ID)[strings.LastIndex(*v.ID, "/")+1:] | ||
item.CreatedDate = time.Time(*v.Attributes.Created).Format(time.RFC3339) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We're nil checking the other dates/times below before casting, I think we should do that here as well
item.CreatedDate = time.Time(*v.Attributes.Created).Format(time.RFC3339) | |
createdDate := v.Attributes.Created; createdDate != nil { | |
item.CreatedDate = time.Time(*createdDate).Format(time.RFC3339) | |
} |
|
||
func expandSecretVersion(v *keyvault.SecretItem) secretVersionModel { | ||
var item secretVersionModel | ||
item.Uri = *v.ID |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From what I understand it's highly unlikely for keyvault that these fields are not returned or empty, but we can still use pointer.From
to do a nil check on this for us to prevent any potential crashes
item.Uri = *v.ID | |
item.Uri = pointer.From(v.ID) |
item.Uri = *v.ID | ||
item.ID = (*v.ID)[strings.LastIndex(*v.ID, "/")+1:] | ||
item.CreatedDate = time.Time(*v.Attributes.Created).Format(time.RFC3339) | ||
item.Enabled = *v.Attributes.Enabled |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same for this
item.Enabled = *v.Attributes.Enabled | |
item.Enabled = pointer.From(v.Attributes.Enabled) |
func expandSecretVersion(v *keyvault.SecretItem) secretVersionModel { | ||
var item secretVersionModel | ||
item.Uri = *v.ID | ||
item.ID = (*v.ID)[strings.LastIndex(*v.ID, "/")+1:] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it'd be good to only do this transformation if v.ID
is not nil or an empty string to prevent a potential panic
|
||
# Data Source: azurerm_key_vault_secret_versions | ||
|
||
Use this data source to access information about an existing Key Vault Secret's versions. The secret version values is not included. The `key_vault_secret` data source can be used to retrieve the value of a given secret version using it's `id`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With the introduction of ephemeral resources we might want to point users towards the ephemeral resource instead of the data source
Use this data source to access information about an existing Key Vault Secret's versions. The secret version values is not included. The `key_vault_secret` data source can be used to retrieve the value of a given secret version using it's `id`. | |
Use this data source to access information about an existing Key Vault Secret's versions. The secret version values are not included. The `azurerm_key_vault_secret` ephemeral resource can be used to retrieve the value of a given secret version using it's `id` without storing the information in state. Alternatively the `azurerm_key_vault_secret` data source can be used to retrieve this information, but will store this information in state. |
* `name` - (Required) The name of the Key Vault Secret to retrieve versions from. | ||
|
||
--- | ||
|
||
* `max_results` - (Optional) Maximum number of versions to retrieve. Defaults to `25`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A space here is sufficient
* `name` - (Required) The name of the Key Vault Secret to retrieve versions from. | |
--- | |
* `max_results` - (Optional) Maximum number of versions to retrieve. Defaults to `25`. | |
* `name` - (Required) The name of the Key Vault Secret to retrieve versions from. | |
* `max_results` - (Optional) Maximum number of versions to retrieve. Defaults to `25`. |
Do we also have corresponding / related PRs / Issues open for keyvault secret version resource? |
Community Note
Description
This is a new data source that will retrieve the versions of an existing Key Vault Secret. The returned value is called
versions
and is a list of each version and its attributes. It does not include the secret value for each version. The number of returned results can be set with themax_results
argument that defaults to25
.PR Checklist
For example: “
resource_name_here
- description of change e.g. adding propertynew_property_name_here
”Testing
Change Log
Below please provide what should go into the changelog (if anything) conforming to the Changelog Format documented here.
azurerm_key_vault_secret_versions
- new data source to retrieve versions of a secret [GH-00000]This is a (please select all that apply):
Related Issue(s)
Fixes #27347