0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-02 03:22:59 +00:00

Additional certificate attributes

This commit is contained in:
Dan Petersen 2020-01-01 22:58:22 +01:00
parent 9de2bfbe98
commit 1eb0fe0a34
4 changed files with 204 additions and 6 deletions

View File

@ -261,7 +261,15 @@ This data source doesn't accept arguments.
* `private_key` - (Required) The PEM encoded private key
###### Attributes
This resource doesn't expose any additional attributes.
* `expiration_date` - The expiration date (RFC 3339)
* `file_name` - The file name
* `issuer` - The issuer
* `public_key_size` - The public key size
* `public_key_type` - The public key type
* `ssl_fingerprint` - The SSL fingerprint
* `start_date` - The start date (RFC 3339)
* `subject` - The subject
* `subject_alternative_names` - The subject alternative names
##### DNS (proxmox_virtual_environment_dns)

View File

@ -26,3 +26,39 @@ resource "tls_self_signed_cert" "proxmox_virtual_environment_certificate" {
"server_auth",
]
}
output "resource_proxmox_virtual_environment_certificate_example_expiration_date" {
value = "${proxmox_virtual_environment_certificate.example.expiration_date}"
}
output "resource_proxmox_virtual_environment_certificate_example_file_name" {
value = "${proxmox_virtual_environment_certificate.example.file_name}"
}
output "resource_proxmox_virtual_environment_certificate_example_issuer" {
value = "${proxmox_virtual_environment_certificate.example.issuer}"
}
output "resource_proxmox_virtual_environment_certificate_example_public_key_size" {
value = "${proxmox_virtual_environment_certificate.example.public_key_size}"
}
output "resource_proxmox_virtual_environment_certificate_example_public_key_type" {
value = "${proxmox_virtual_environment_certificate.example.public_key_type}"
}
output "resource_proxmox_virtual_environment_certificate_example_ssl_fingerprint" {
value = "${proxmox_virtual_environment_certificate.example.ssl_fingerprint}"
}
output "resource_proxmox_virtual_environment_certificate_example_start_date" {
value = "${proxmox_virtual_environment_certificate.example.start_date}"
}
output "resource_proxmox_virtual_environment_certificate_example_subject" {
value = "${proxmox_virtual_environment_certificate.example.subject}"
}
output "resource_proxmox_virtual_environment_certificate_example_subject_alternative_names" {
value = "${proxmox_virtual_environment_certificate.example.subject_alternative_names}"
}

View File

@ -7,6 +7,7 @@ package proxmoxtf
import (
"fmt"
"strings"
"time"
"github.com/danitso/terraform-provider-proxmox/proxmox"
"github.com/hashicorp/terraform/helper/schema"
@ -18,9 +19,18 @@ const (
mkResourceVirtualEnvironmentCertificateCertificate = "certificate"
mkResourceVirtualEnvironmentCertificateCertificateChain = "certificate_chain"
mkResourceVirtualEnvironmentCertificateFileName = "file_name"
mkResourceVirtualEnvironmentCertificateIssuer = "issuer"
mkResourceVirtualEnvironmentCertificateNodeName = "node_name"
mkResourceVirtualEnvironmentCertificateExpirationDate = "expiration_date"
mkResourceVirtualEnvironmentCertificateOverwrite = "overwrite"
mkResourceVirtualEnvironmentCertificatePrivateKey = "private_key"
mkResourceVirtualEnvironmentCertificatePublicKeySize = "public_key_size"
mkResourceVirtualEnvironmentCertificatePublicKeyType = "public_key_type"
mkResourceVirtualEnvironmentCertificateSSLFingerprint = "ssl_fingerprint"
mkResourceVirtualEnvironmentCertificateStartDate = "start_date"
mkResourceVirtualEnvironmentCertificateSubject = "subject"
mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames = "subject_alternative_names"
)
func resourceVirtualEnvironmentCertificate() *schema.Resource {
@ -37,6 +47,21 @@ func resourceVirtualEnvironmentCertificate() *schema.Resource {
Optional: true,
Default: dvResourceVirtualEnvironmentCertificateCertificateChain,
},
mkResourceVirtualEnvironmentCertificateExpirationDate: &schema.Schema{
Type: schema.TypeString,
Description: "The expiration date",
Computed: true,
},
mkResourceVirtualEnvironmentCertificateFileName: &schema.Schema{
Type: schema.TypeString,
Description: "The file name",
Computed: true,
},
mkResourceVirtualEnvironmentCertificateIssuer: &schema.Schema{
Type: schema.TypeString,
Description: "The issuer",
Computed: true,
},
mkResourceVirtualEnvironmentCertificateNodeName: &schema.Schema{
Type: schema.TypeString,
Description: "The node name",
@ -55,6 +80,37 @@ func resourceVirtualEnvironmentCertificate() *schema.Resource {
Required: true,
Sensitive: true,
},
mkResourceVirtualEnvironmentCertificatePublicKeySize: &schema.Schema{
Type: schema.TypeInt,
Description: "The public key size",
Computed: true,
},
mkResourceVirtualEnvironmentCertificatePublicKeyType: &schema.Schema{
Type: schema.TypeString,
Description: "The public key type",
Computed: true,
},
mkResourceVirtualEnvironmentCertificateSSLFingerprint: &schema.Schema{
Type: schema.TypeString,
Description: "The SSL fingerprint",
Computed: true,
},
mkResourceVirtualEnvironmentCertificateStartDate: &schema.Schema{
Type: schema.TypeString,
Description: "The start date",
Computed: true,
},
mkResourceVirtualEnvironmentCertificateSubject: &schema.Schema{
Type: schema.TypeString,
Description: "The subject",
Computed: true,
},
mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames: &schema.Schema{
Type: schema.TypeList,
Description: "The subject alternative names",
Computed: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
},
Create: resourceVirtualEnvironmentCertificateCreate,
Read: resourceVirtualEnvironmentCertificateRead,
@ -147,6 +203,74 @@ func resourceVirtualEnvironmentCertificateRead(d *schema.ResourceData, m interfa
d.Set(mkResourceVirtualEnvironmentCertificateCertificate, newCertificate)
d.Set(mkResourceVirtualEnvironmentCertificateCertificateChain, newCertificateChain)
}
d.Set(mkResourceVirtualEnvironmentCertificateFileName, *c.FileName)
if c.NotAfter != nil {
t := time.Time(*c.NotAfter)
d.Set(mkResourceVirtualEnvironmentCertificateExpirationDate, t.UTC().Format(time.RFC3339))
} else {
d.Set(mkResourceVirtualEnvironmentCertificateExpirationDate, "")
}
if c.Issuer != nil {
d.Set(mkResourceVirtualEnvironmentCertificateIssuer, *c.Issuer)
} else {
d.Set(mkResourceVirtualEnvironmentCertificateIssuer, "")
}
if c.PublicKeyBits != nil {
d.Set(mkResourceVirtualEnvironmentCertificatePublicKeySize, *c.PublicKeyBits)
} else {
d.Set(mkResourceVirtualEnvironmentCertificatePublicKeySize, 0)
}
if c.PublicKeyType != nil {
pkType := *c.PublicKeyType
for _, pkt := range []string{"ecdsa", "dsa", "rsa"} {
if strings.Contains(pkType, pkt) {
pkType = pkt
}
}
d.Set(mkResourceVirtualEnvironmentCertificatePublicKeyType, pkType)
} else {
d.Set(mkResourceVirtualEnvironmentCertificatePublicKeyType, "")
}
if c.Fingerprint != nil {
d.Set(mkResourceVirtualEnvironmentCertificateSSLFingerprint, *c.Fingerprint)
} else {
d.Set(mkResourceVirtualEnvironmentCertificateSSLFingerprint, "")
}
if c.NotBefore != nil {
t := time.Time(*c.NotBefore)
d.Set(mkResourceVirtualEnvironmentCertificateStartDate, t.UTC().Format(time.RFC3339))
} else {
d.Set(mkResourceVirtualEnvironmentCertificateStartDate, "")
}
if c.Subject != nil {
d.Set(mkResourceVirtualEnvironmentCertificateSubject, *c.Subject)
} else {
d.Set(mkResourceVirtualEnvironmentCertificateSubject, "")
}
if c.SubjectAlternativeNames != nil {
sanList := make([]interface{}, len(*c.SubjectAlternativeNames))
for i, san := range *c.SubjectAlternativeNames {
sanList[i] = san
}
d.Set(mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames, sanList)
} else {
d.Set(mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames, []interface{}{})
}
}
}

View File

@ -33,15 +33,45 @@ func TestResourceVirtualEnvironmentCertificateSchema(t *testing.T) {
mkResourceVirtualEnvironmentCertificateCertificateChain,
})
testComputedAttributes(t, s, []string{
mkResourceVirtualEnvironmentCertificateExpirationDate,
mkResourceVirtualEnvironmentCertificateFileName,
mkResourceVirtualEnvironmentCertificateIssuer,
mkResourceVirtualEnvironmentCertificatePublicKeySize,
mkResourceVirtualEnvironmentCertificatePublicKeyType,
mkResourceVirtualEnvironmentCertificateSSLFingerprint,
mkResourceVirtualEnvironmentCertificateStartDate,
mkResourceVirtualEnvironmentCertificateSubject,
mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames,
})
testSchemaValueTypes(t, s, []string{
mkResourceVirtualEnvironmentCertificateCertificate,
mkResourceVirtualEnvironmentCertificateCertificateChain,
mkResourceVirtualEnvironmentCertificateExpirationDate,
mkResourceVirtualEnvironmentCertificateFileName,
mkResourceVirtualEnvironmentCertificateIssuer,
mkResourceVirtualEnvironmentCertificateNodeName,
mkResourceVirtualEnvironmentCertificatePrivateKey,
mkResourceVirtualEnvironmentCertificatePublicKeySize,
mkResourceVirtualEnvironmentCertificatePublicKeyType,
mkResourceVirtualEnvironmentCertificateSSLFingerprint,
mkResourceVirtualEnvironmentCertificateStartDate,
mkResourceVirtualEnvironmentCertificateSubject,
mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames,
}, []schema.ValueType{
schema.TypeString,
schema.TypeString,
schema.TypeString,
schema.TypeString,
schema.TypeString,
schema.TypeString,
schema.TypeString,
schema.TypeInt,
schema.TypeString,
schema.TypeString,
schema.TypeString,
schema.TypeString,
schema.TypeList,
})
}