From 3555c7b89bd9dd598b2584399cac14861057eef2 Mon Sep 17 00:00:00 2001 From: hellertang Date: Fri, 9 May 2025 19:45:17 +0800 Subject: [PATCH 1/2] add private key --- .../services/cvm/resource_tc_key_pair.go | 33 ++++++++++++++++--- website/docs/r/key_pair.html.markdown | 3 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/tencentcloud/services/cvm/resource_tc_key_pair.go b/tencentcloud/services/cvm/resource_tc_key_pair.go index c768504a77..355c0b591a 100644 --- a/tencentcloud/services/cvm/resource_tc_key_pair.go +++ b/tencentcloud/services/cvm/resource_tc_key_pair.go @@ -66,11 +66,21 @@ func ResourceTencentCloudKeyPair() *schema.Resource { Optional: true, Description: "Tags of the key pair.", }, + "private_key": { + Type: schema.TypeString, + Computed: true, + Description: "Content of private key in a key pair. Tencent Cloud do not keep private keys. Please keep it properly.", + }, + "created_time": { + Type: schema.TypeString, + Computed: true, + Description: "Creation time, which follows the `ISO8601` standard and uses `UTC` time in the format of `YYYY-MM-DDThh:mm:ssZ`.", + }, }, } } -func cvmCreateKeyPair(ctx context.Context, d *schema.ResourceData, meta interface{}) (keyId string, err error) { +func cvmCreateKeyPair(ctx context.Context, d *schema.ResourceData, meta interface{}) (keyId, privateKey string, err error) { logId := tccommon.GetLogId(ctx) request := cvm.NewCreateKeyPairRequest() response := cvm.NewCreateKeyPairResponse() @@ -98,6 +108,9 @@ func cvmCreateKeyPair(ctx context.Context, d *schema.ResourceData, meta interfac } keyId = *response.Response.KeyPair.KeyId + if response.Response.KeyPair.PrivateKey != nil { + privateKey = *response.Response.KeyPair.PrivateKey + } return } @@ -139,20 +152,24 @@ func resourceTencentCloudKeyPairCreate(d *schema.ResourceData, meta interface{}) logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( - keyId string - err error + keyId, privateKey string + err error ) if _, ok := d.GetOk("public_key"); ok { keyId, err = cvmCreateKeyPairByImportPublicKey(ctx, d, meta) } else { - keyId, err = cvmCreateKeyPair(ctx, d, meta) + keyId, privateKey, err = cvmCreateKeyPair(ctx, d, meta) } if err != nil { return err } d.SetId(keyId) + if privateKey != "" { + _ = d.Set("private_key", privateKey) + } + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := svctag.NewTagService(tcClient) @@ -204,6 +221,14 @@ func resourceTencentCloudKeyPairRead(d *schema.ResourceData, meta interface{}) e _ = d.Set("public_key", publicKey) } + if keyPair.PrivateKey != nil { + _ = d.Set("private_key", keyPair.PrivateKey) + } + + if keyPair.CreatedTime != nil { + _ = d.Set("created_time", keyPair.CreatedTime) + } + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := svctag.NewTagService(client) diff --git a/website/docs/r/key_pair.html.markdown b/website/docs/r/key_pair.html.markdown index 664d0214fa..32919a39c5 100644 --- a/website/docs/r/key_pair.html.markdown +++ b/website/docs/r/key_pair.html.markdown @@ -38,7 +38,8 @@ The following arguments are supported: In addition to all arguments above, the following attributes are exported: * `id` - ID of the resource. - +* `created_time` - Creation time, which follows the `ISO8601` standard and uses `UTC` time in the format of `YYYY-MM-DDThh:mm:ssZ`. +* `private_key` - Content of private key in a key pair. Tencent Cloud do not keep private keys. Please keep it properly. ## Import From eb2c6cf9df7ba24ef534fc746c817fd3f5e217d9 Mon Sep 17 00:00:00 2001 From: hellertang Date: Fri, 9 May 2025 19:48:52 +0800 Subject: [PATCH 2/2] add changelog --- .changelog/3353.txt | 3 +++ tencentcloud/services/cvm/resource_tc_key_pair.md | 10 +++++++++- website/docs/r/key_pair.html.markdown | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .changelog/3353.txt diff --git a/.changelog/3353.txt b/.changelog/3353.txt new file mode 100644 index 0000000000..310c29a7eb --- /dev/null +++ b/.changelog/3353.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_key_pair: add computed attr `private_key` and `create_time` +``` \ No newline at end of file diff --git a/tencentcloud/services/cvm/resource_tc_key_pair.md b/tencentcloud/services/cvm/resource_tc_key_pair.md index 055653545b..41e7eb8b07 100644 --- a/tencentcloud/services/cvm/resource_tc_key_pair.md +++ b/tencentcloud/services/cvm/resource_tc_key_pair.md @@ -4,7 +4,15 @@ Example Usage ```hcl resource "tencentcloud_key_pair" "foo" { - key_name = "terraform_test" + key_name = "terraform_test" +} + +output "private_key" { + value = tencentcloud_key_pair.foo.private_key +} + +output "create_time" { + value = tencentcloud_key_pair.foo.created_time } resource "tencentcloud_key_pair" "foo1" { diff --git a/website/docs/r/key_pair.html.markdown b/website/docs/r/key_pair.html.markdown index 32919a39c5..100fece1b4 100644 --- a/website/docs/r/key_pair.html.markdown +++ b/website/docs/r/key_pair.html.markdown @@ -18,6 +18,14 @@ resource "tencentcloud_key_pair" "foo" { key_name = "terraform_test" } +output "private_key" { + value = tencentcloud_key_pair.foo.private_key +} + +output "create_time" { + value = tencentcloud_key_pair.foo.created_time +} + resource "tencentcloud_key_pair" "foo1" { key_name = "terraform_test" public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDjd8fTnp7Dcuj4mLaQxf9Zs/ORgUL9fQxRCNKkPgP1paTy1I513maMX126i36Lxxl3+FUB52oVbo/FgwlIfX8hyCnv8MCxqnuSDozf1CD0/wRYHcTWAtgHQHBPCC2nJtod6cVC3kB18KeV4U7zsxmwFeBIxojMOOmcOBuh7+trRw=="