0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-04 04: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 * `private_key` - (Required) The PEM encoded private key
###### Attributes ###### 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) ##### DNS (proxmox_virtual_environment_dns)

View File

@ -26,3 +26,39 @@ resource "tls_self_signed_cert" "proxmox_virtual_environment_certificate" {
"server_auth", "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 ( import (
"fmt" "fmt"
"strings" "strings"
"time"
"github.com/danitso/terraform-provider-proxmox/proxmox" "github.com/danitso/terraform-provider-proxmox/proxmox"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
@ -16,11 +17,20 @@ const (
dvResourceVirtualEnvironmentCertificateCertificateChain = "" dvResourceVirtualEnvironmentCertificateCertificateChain = ""
dvResourceVirtualEnvironmentCertificateOverwrite = false dvResourceVirtualEnvironmentCertificateOverwrite = false
mkResourceVirtualEnvironmentCertificateCertificate = "certificate" mkResourceVirtualEnvironmentCertificateCertificate = "certificate"
mkResourceVirtualEnvironmentCertificateCertificateChain = "certificate_chain" mkResourceVirtualEnvironmentCertificateCertificateChain = "certificate_chain"
mkResourceVirtualEnvironmentCertificateNodeName = "node_name" mkResourceVirtualEnvironmentCertificateFileName = "file_name"
mkResourceVirtualEnvironmentCertificateOverwrite = "overwrite" mkResourceVirtualEnvironmentCertificateIssuer = "issuer"
mkResourceVirtualEnvironmentCertificatePrivateKey = "private_key" 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 { func resourceVirtualEnvironmentCertificate() *schema.Resource {
@ -37,6 +47,21 @@ func resourceVirtualEnvironmentCertificate() *schema.Resource {
Optional: true, Optional: true,
Default: dvResourceVirtualEnvironmentCertificateCertificateChain, 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{ mkResourceVirtualEnvironmentCertificateNodeName: &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Description: "The node name", Description: "The node name",
@ -55,6 +80,37 @@ func resourceVirtualEnvironmentCertificate() *schema.Resource {
Required: true, Required: true,
Sensitive: 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, Create: resourceVirtualEnvironmentCertificateCreate,
Read: resourceVirtualEnvironmentCertificateRead, Read: resourceVirtualEnvironmentCertificateRead,
@ -147,6 +203,74 @@ func resourceVirtualEnvironmentCertificateRead(d *schema.ResourceData, m interfa
d.Set(mkResourceVirtualEnvironmentCertificateCertificate, newCertificate) d.Set(mkResourceVirtualEnvironmentCertificateCertificate, newCertificate)
d.Set(mkResourceVirtualEnvironmentCertificateCertificateChain, newCertificateChain) 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, mkResourceVirtualEnvironmentCertificateCertificateChain,
}) })
testComputedAttributes(t, s, []string{
mkResourceVirtualEnvironmentCertificateExpirationDate,
mkResourceVirtualEnvironmentCertificateFileName,
mkResourceVirtualEnvironmentCertificateIssuer,
mkResourceVirtualEnvironmentCertificatePublicKeySize,
mkResourceVirtualEnvironmentCertificatePublicKeyType,
mkResourceVirtualEnvironmentCertificateSSLFingerprint,
mkResourceVirtualEnvironmentCertificateStartDate,
mkResourceVirtualEnvironmentCertificateSubject,
mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames,
})
testSchemaValueTypes(t, s, []string{ testSchemaValueTypes(t, s, []string{
mkResourceVirtualEnvironmentCertificateCertificate, mkResourceVirtualEnvironmentCertificateCertificate,
mkResourceVirtualEnvironmentCertificateCertificateChain, mkResourceVirtualEnvironmentCertificateCertificateChain,
mkResourceVirtualEnvironmentCertificateExpirationDate,
mkResourceVirtualEnvironmentCertificateFileName,
mkResourceVirtualEnvironmentCertificateIssuer,
mkResourceVirtualEnvironmentCertificateNodeName, mkResourceVirtualEnvironmentCertificateNodeName,
mkResourceVirtualEnvironmentCertificatePrivateKey, mkResourceVirtualEnvironmentCertificatePrivateKey,
mkResourceVirtualEnvironmentCertificatePublicKeySize,
mkResourceVirtualEnvironmentCertificatePublicKeyType,
mkResourceVirtualEnvironmentCertificateSSLFingerprint,
mkResourceVirtualEnvironmentCertificateStartDate,
mkResourceVirtualEnvironmentCertificateSubject,
mkResourceVirtualEnvironmentCertificateSubjectAlternativeNames,
}, []schema.ValueType{ }, []schema.ValueType{
schema.TypeString, schema.TypeString,
schema.TypeString, schema.TypeString,
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,
}) })
} }