Skip to content

Commit

Permalink
refactor: Use bundle instead of SDK for Cert Manager
Browse files Browse the repository at this point in the history
  • Loading branch information
adeatcu-ionos committed Jan 28, 2025
1 parent 94064b2 commit ee3de0a
Show file tree
Hide file tree
Showing 65 changed files with 3,394 additions and 5,739 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ require (
github.com/iancoleman/strcase v0.3.0
github.com/ionos-cloud/sdk-go-api-gateway v1.0.0
github.com/ionos-cloud/sdk-go-bundle/products/cdn/v2 v2.1.0
github.com/ionos-cloud/sdk-go-bundle/products/cert/v2 v2.1.0
github.com/ionos-cloud/sdk-go-bundle/products/logging/v2 v2.1.1
github.com/ionos-cloud/sdk-go-bundle/products/monitoring/v2 v2.0.0
github.com/ionos-cloud/sdk-go-bundle/products/vpn/v2 v2.0.2
github.com/ionos-cloud/sdk-go-bundle/shared v0.1.1
github.com/ionos-cloud/sdk-go-cert-manager v1.3.0
github.com/ionos-cloud/sdk-go-container-registry v1.2.0
github.com/ionos-cloud/sdk-go-dataplatform v1.1.1
github.com/ionos-cloud/sdk-go-dbaas-in-memory-db v1.0.1
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ github.com/ionos-cloud/sdk-go-api-gateway v1.0.0 h1:T+JzarV1Iw7NjWQfEuv5bESnHoCL
github.com/ionos-cloud/sdk-go-api-gateway v1.0.0/go.mod h1:TkSlamP+qKRT8cgBaZEN8rawanVluOR0dXbXXdmmwTY=
github.com/ionos-cloud/sdk-go-bundle/products/cdn/v2 v2.1.0 h1:8fRICa4i+GJHrCgnLe8t3uwfahkg7pcDDwoLkH3B2Xc=
github.com/ionos-cloud/sdk-go-bundle/products/cdn/v2 v2.1.0/go.mod h1:BF6R+j1GdJEMImxkeh32qjIVWqsBfgi6VgyfsY5ezIA=
github.com/ionos-cloud/sdk-go-bundle/products/cert/v2 v2.1.0 h1:nZbFVqm+nfMsp2HxBFQVsF5qDNKjtCjYWteJHZf4c/k=
github.com/ionos-cloud/sdk-go-bundle/products/cert/v2 v2.1.0/go.mod h1:7ONrlRb2n7qjLR5O7oCQzOJAiRhj/D4ywvpJUPQr1q0=
github.com/ionos-cloud/sdk-go-bundle/products/logging/v2 v2.1.1 h1:GXxdNKl7haQnHO1QewZeXazur5+LDCpHqvP+nNObGaA=
github.com/ionos-cloud/sdk-go-bundle/products/logging/v2 v2.1.1/go.mod h1:N0ifRq3ENqGg6qht1WPrVgSkcavPS5SRWlNfkHUZbfQ=
github.com/ionos-cloud/sdk-go-bundle/products/monitoring/v2 v2.0.0 h1:gVh+jd0o8ROtJLWqUB6/VU8vSLdj/kRYAz/qbMO7z7I=
Expand All @@ -124,8 +126,6 @@ github.com/ionos-cloud/sdk-go-bundle/products/vpn/v2 v2.0.2 h1:qR/ul88v/3ZF+ZLFF
github.com/ionos-cloud/sdk-go-bundle/products/vpn/v2 v2.0.2/go.mod h1:V6WHbWsQDlZsLtHqgsXO81Z9eJBsczE3Q6VY8J+rutc=
github.com/ionos-cloud/sdk-go-bundle/shared v0.1.1 h1:NWobgIhmUJKG6ohFXefMj+KmpEEvLYEDUgGzpns6HQE=
github.com/ionos-cloud/sdk-go-bundle/shared v0.1.1/go.mod h1:cLIl4zmB1yMdPSNgTzaRmXeuusEAY1O3Lp/iXSc/R6E=
github.com/ionos-cloud/sdk-go-cert-manager v1.3.0 h1:VMbD/XgLmMV2d7uI1+xf/uzRZWKJd8Ayan9IZ6gH1pM=
github.com/ionos-cloud/sdk-go-cert-manager v1.3.0/go.mod h1:8CPWJBuryfrUpiPNrVIPry6qQjZWfIhmRpFkqKiaO2w=
github.com/ionos-cloud/sdk-go-container-registry v1.2.0 h1:C5r2XleKLbSFw9kmb4N8ImqJ/HtLus3yh/R5BHy/6sg=
github.com/ionos-cloud/sdk-go-container-registry v1.2.0/go.mod h1:woBP1+A4N0KXiRj9jG4y/hEXgrVjJv0CUlAvc24mCeo=
github.com/ionos-cloud/sdk-go-dataplatform v1.1.1 h1:Wu9TAiphRyMEweUcQlMblhVCl9qVxQlOYEOw+jJS+Ss=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
certSDK "github.com/ionos-cloud/sdk-go-cert-manager"
certSDK "github.com/ionos-cloud/sdk-go-bundle/products/cert/v2"

"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services"
certService "github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services/cert"
Expand Down Expand Up @@ -98,8 +98,8 @@ func dataSourceAutoCertificateRead(ctx context.Context, d *schema.ResourceData,
}
var results []certSDK.AutoCertificateRead
if autoCertificates.Items != nil {
for _, autoCertificateItem := range *autoCertificates.Items {
if autoCertificateItem.Properties != nil && autoCertificateItem.Properties.Name != nil && strings.EqualFold(*autoCertificateItem.Properties.Name, name.(string)) {
for _, autoCertificateItem := range autoCertificates.Items {
if strings.EqualFold(autoCertificateItem.Properties.Name, name.(string)) {
results = append(results, autoCertificateItem)
}
}
Expand Down
15 changes: 6 additions & 9 deletions ionoscloud/data_source_certificate_manager_certificate.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
certmanager "github.com/ionos-cloud/sdk-go-cert-manager"
certmanager "github.com/ionos-cloud/sdk-go-bundle/products/cert/v2"

"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services"
"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services/cert"
Expand Down Expand Up @@ -70,15 +70,12 @@ func dataSourceCertificateRead(ctx context.Context, d *schema.ResourceData, meta
return diag.FromErr(fmt.Errorf("error getting certificate with id %s %w", idStr, err))
}
if nameOk {
if certificate.Properties != nil && certificate.Properties.Name != nil &&
!strings.EqualFold(*certificate.Properties.Name, name) {
if !strings.EqualFold(certificate.Properties.Name, name) {
return diag.FromErr(fmt.Errorf("name of cert (UUID=%s, name=%s) does not match expected name: %s",
*certificate.Id, *certificate.Properties.Name, name))
certificate.Id, certificate.Properties.Name, name))
}
}
if certificate.Properties != nil {
log.Printf("[INFO] Got certificate [Name=%s]", *certificate.Properties.Name)
}
log.Printf("[INFO] Got certificate [Name=%s]", certificate.Properties.Name)

} else {
log.Printf("[INFO] Using data source for certificate with name: %s", name)
Expand All @@ -92,8 +89,8 @@ func dataSourceCertificateRead(ctx context.Context, d *schema.ResourceData, meta

if certificates.Items != nil {
var certsFound []certmanager.CertificateRead
for _, certItem := range *certificates.Items {
if certItem.Properties != nil && certItem.Properties.Name != nil && *certItem.Properties.Name == name {
for _, certItem := range certificates.Items {
if certItem.Properties.Name == name {
certsFound = append(certsFound, certItem)
}
}
Expand Down
6 changes: 3 additions & 3 deletions ionoscloud/data_source_certificate_manager_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
certSDK "github.com/ionos-cloud/sdk-go-cert-manager"
certSDK "github.com/ionos-cloud/sdk-go-bundle/products/cert/v2"

"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services"
certService "github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services/cert"
Expand Down Expand Up @@ -94,8 +94,8 @@ func dataSourceProviderRead(ctx context.Context, d *schema.ResourceData, meta in
}
var results []certSDK.ProviderRead
if providers.Items != nil {
for _, providerItem := range *providers.Items {
if providerItem.Properties != nil && providerItem.Properties.Name != nil && strings.EqualFold(*providerItem.Properties.Name, name.(string)) {
for _, providerItem := range providers.Items {
if strings.EqualFold(providerItem.Properties.Name, name.(string)) {
results = append(results, providerItem)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func autoCertificateCreate(ctx context.Context, d *schema.ResourceData, meta int
if err != nil {
return diag.FromErr(fmt.Errorf("an error occurred while creating an auto-certificate: %w", err))
}
autoCertificateID := *response.Id
autoCertificateID := response.Id
d.SetId(autoCertificateID)

err = utils.WaitForResourceToBeReady(ctx, d, client.IsAutoCertificateReady)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
certSDK "github.com/ionos-cloud/sdk-go-cert-manager"
certSDK "github.com/ionos-cloud/sdk-go-bundle/products/cert/v2"

"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services"
"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/utils/constant"
Expand Down
2 changes: 1 addition & 1 deletion ionoscloud/resource_certificate_manager_certificate.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ func resourceCertificateManagerCreate(ctx context.Context, d *schema.ResourceDat
return diags
}

d.SetId(*certificateDto.Id)
d.SetId(certificateDto.Id)

if err = utils.WaitForResourceToBeReady(ctx, d, client.IsCertReady); err != nil {
return diag.FromErr(err)
Expand Down
2 changes: 1 addition & 1 deletion ionoscloud/resource_certificate_manager_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func providerCreate(ctx context.Context, d *schema.ResourceData, meta interface{
if err != nil {
return diag.FromErr(fmt.Errorf("an error occurred while creating an auto-certificate provider: %w", err))
}
providerID := *response.Id
providerID := response.Id
d.SetId(providerID)

err = utils.WaitForResourceToBeReady(ctx, d, client.IsProviderReady)
Expand Down
2 changes: 1 addition & 1 deletion ionoscloud/resource_certificate_manager_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
certSDK "github.com/ionos-cloud/sdk-go-cert-manager"
certSDK "github.com/ionos-cloud/sdk-go-bundle/products/cert/v2"

"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/services"
"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/utils/constant"
Expand Down
84 changes: 34 additions & 50 deletions services/cert/auto_certificate.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import (
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
certmanager "github.com/ionos-cloud/sdk-go-cert-manager"
certmanager "github.com/ionos-cloud/sdk-go-bundle/products/cert/v2"
"github.com/ionos-cloud/sdk-go-bundle/shared"

"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/utils"
"github.com/ionos-cloud/terraform-provider-ionoscloud/v6/utils/constant"
Expand All @@ -16,39 +17,39 @@ import (
// are suggestive enough).
//
//nolint:golint
func (c *Client) GetAutoCertificate(ctx context.Context, autoCertificateID, location string) (certmanager.AutoCertificateRead, *certmanager.APIResponse, error) {
func (c *Client) GetAutoCertificate(ctx context.Context, autoCertificateID, location string) (certmanager.AutoCertificateRead, *shared.APIResponse, error) {
c.modifyConfigURL(location)
autoCertificate, apiResponse, err := c.sdkClient.AutoCertificateApi.AutoCertificatesFindById(ctx, autoCertificateID).Execute()
apiResponse.LogInfo()
return autoCertificate, apiResponse, err
}

//nolint:golint
func (c *Client) ListAutoCertificates(ctx context.Context, location string) (certmanager.AutoCertificateReadList, *certmanager.APIResponse, error) {
func (c *Client) ListAutoCertificates(ctx context.Context, location string) (certmanager.AutoCertificateReadList, *shared.APIResponse, error) {
c.modifyConfigURL(location)
autoCertificates, apiResponse, err := c.sdkClient.AutoCertificateApi.AutoCertificatesGet(ctx).Execute()
apiResponse.LogInfo()
return autoCertificates, apiResponse, err
}

//nolint:golint
func (c *Client) CreateAutoCertificate(ctx context.Context, location string, autoCertificatePostData certmanager.AutoCertificateCreate) (certmanager.AutoCertificateRead, *certmanager.APIResponse, error) {
func (c *Client) CreateAutoCertificate(ctx context.Context, location string, autoCertificatePostData certmanager.AutoCertificateCreate) (certmanager.AutoCertificateRead, *shared.APIResponse, error) {
c.modifyConfigURL(location)
autoCertificate, apiResponse, err := c.sdkClient.AutoCertificateApi.AutoCertificatesPost(ctx).AutoCertificateCreate(autoCertificatePostData).Execute()
apiResponse.LogInfo()
return autoCertificate, apiResponse, err
}

//nolint:golint
func (c *Client) UpdateAutoCertificate(ctx context.Context, autoCertificateID, location string, autoCertificatePatchData certmanager.AutoCertificatePatch) (certmanager.AutoCertificateRead, *certmanager.APIResponse, error) {
func (c *Client) UpdateAutoCertificate(ctx context.Context, autoCertificateID, location string, autoCertificatePatchData certmanager.AutoCertificatePatch) (certmanager.AutoCertificateRead, *shared.APIResponse, error) {
c.modifyConfigURL(location)
autoCertificate, apiResponse, err := c.sdkClient.AutoCertificateApi.AutoCertificatesPatch(ctx, autoCertificateID).AutoCertificatePatch(autoCertificatePatchData).Execute()
apiResponse.LogInfo()
return autoCertificate, apiResponse, err
}

//nolint:golint
func (c *Client) DeleteAutoCertificate(ctx context.Context, autoCertificateID, location string) (*certmanager.APIResponse, error) {
func (c *Client) DeleteAutoCertificate(ctx context.Context, autoCertificateID, location string) (*shared.APIResponse, error) {
c.modifyConfigURL(location)
apiResponse, err := c.sdkClient.AutoCertificateApi.AutoCertificatesDelete(ctx, autoCertificateID).Execute()
apiResponse.LogInfo()
Expand All @@ -63,13 +64,10 @@ func (c *Client) IsAutoCertificateReady(ctx context.Context, d *schema.ResourceD
if err != nil {
return false, fmt.Errorf("error checking auto-certificate status: %w", err)
}
if autoCertificate.Metadata == nil || autoCertificate.Metadata.State == nil {
return false, fmt.Errorf("metadata or state is empty for auto-certificate with ID: %v", autoCertificateID)
if utils.IsStateFailed(autoCertificate.Metadata.State) {
return false, fmt.Errorf("error while checking if auto-certificate is ready, auto-certificate ID: %v, state: %v", autoCertificateID, autoCertificate.Metadata.State)
}
if utils.IsStateFailed(*autoCertificate.Metadata.State) {
return false, fmt.Errorf("error while checking if auto-certificate is ready, auto-certificate ID: %v, state: %v", autoCertificateID, *autoCertificate.Metadata.State)
}
return strings.EqualFold(*autoCertificate.Metadata.State, constant.Available), nil
return strings.EqualFold(autoCertificate.Metadata.State, constant.Available), nil
}

//nolint:golint
Expand All @@ -83,91 +81,77 @@ func (c *Client) IsAutoCertificateDeleted(ctx context.Context, d *schema.Resourc
}
return false, fmt.Errorf("error while checking deletion status for auto-certificate with ID: %v, error: %w", d.Id(), err)
}
if autoCertificate.Metadata != nil && autoCertificate.Metadata.State != nil && utils.IsStateFailed(*autoCertificate.Metadata.State) {
return false, fmt.Errorf("error while checking if auto-certificate is deleted properly, auto-certificate ID: %v, state: %v", autoCertificateID, *autoCertificate.Metadata.State)
if utils.IsStateFailed(autoCertificate.Metadata.State) {
return false, fmt.Errorf("error while checking if auto-certificate is deleted properly, auto-certificate ID: %v, state: %v", autoCertificateID, autoCertificate.Metadata.State)
}
return false, nil
}

//nolint:golint
func GetAutoCertificateDataCreate(d *schema.ResourceData) *certmanager.AutoCertificateCreate {
autoCertificate := certmanager.AutoCertificateCreate{
Properties: &certmanager.AutoCertificate{},
Properties: certmanager.AutoCertificate{},
}

providerID := d.Get("provider_id").(string)
autoCertificate.Properties.Provider = &providerID
autoCertificate.Properties.Provider = providerID
commonName := d.Get("common_name").(string)
autoCertificate.Properties.CommonName = &commonName
autoCertificate.Properties.CommonName = commonName
name := d.Get("name").(string)
autoCertificate.Properties.Name = &name
autoCertificate.Properties.Name = name
keyAlgorithm := d.Get("key_algorithm").(string)
autoCertificate.Properties.KeyAlgorithm = &keyAlgorithm
autoCertificate.Properties.KeyAlgorithm = keyAlgorithm
if subjectAlternativeNames, subjectAlternativeNamesOk := d.GetOk("subject_alternative_names"); subjectAlternativeNamesOk {
subjectAlternativeNames := subjectAlternativeNames.([]interface{})
var subjectAlternativeNamesList []string
for _, subjectAlternativeName := range subjectAlternativeNames {
subjectAlternativeName := subjectAlternativeName.(string)
subjectAlternativeNamesList = append(subjectAlternativeNamesList, subjectAlternativeName)
}
autoCertificate.Properties.SubjectAlternativeNames = &subjectAlternativeNamesList
autoCertificate.Properties.SubjectAlternativeNames = subjectAlternativeNamesList
}
return &autoCertificate
}

//nolint:golint
func GetAutoCertificateDataUpdate(d *schema.ResourceData) *certmanager.AutoCertificatePatch {
autoCertificate := certmanager.AutoCertificatePatch{
Properties: &certmanager.PatchName{},
Properties: certmanager.PatchName{},
}
if d.HasChange("name") {
_, newValue := d.GetChange("name")
newValueStr := newValue.(string)
autoCertificate.Properties.Name = &newValueStr
autoCertificate.Properties.Name = newValueStr
}
return &autoCertificate
}

//nolint:golint
func SetAutoCertificateData(d *schema.ResourceData, autoCertificate certmanager.AutoCertificateRead) error {
resourceName := "Auto-certificate"
if autoCertificate.Id != nil {
d.SetId(*autoCertificate.Id)
}
if autoCertificate.Metadata == nil || autoCertificate.Properties == nil {
return fmt.Errorf("response properties/metadata should not be empty for auto-certificate with ID: %v", *autoCertificate.Id)
}
d.SetId(autoCertificate.Id)

if autoCertificate.Metadata.LastIssuedCertificate != nil {
if err := d.Set("last_issued_certificate_id", *autoCertificate.Metadata.LastIssuedCertificate); err != nil {
return utils.GenerateSetError(resourceName, "last_issued_certificate_id", err)
}
}
if autoCertificate.Properties.Provider != nil {
if err := d.Set("provider_id", *autoCertificate.Properties.Provider); err != nil {
return utils.GenerateSetError(resourceName, "provider_id", err)
}
if err := d.Set("provider_id", autoCertificate.Properties.Provider); err != nil {
return utils.GenerateSetError(resourceName, "provider_id", err)
}
if autoCertificate.Properties.CommonName != nil {
if err := d.Set("common_name", *autoCertificate.Properties.CommonName); err != nil {
return utils.GenerateSetError(resourceName, "common_name", err)
}
if err := d.Set("common_name", autoCertificate.Properties.CommonName); err != nil {
return utils.GenerateSetError(resourceName, "common_name", err)
}
if autoCertificate.Properties.KeyAlgorithm != nil {
if err := d.Set("key_algorithm", *autoCertificate.Properties.KeyAlgorithm); err != nil {
return utils.GenerateSetError(resourceName, "key_algorithm", err)
}
if err := d.Set("key_algorithm", autoCertificate.Properties.KeyAlgorithm); err != nil {
return utils.GenerateSetError(resourceName, "key_algorithm", err)
}
if autoCertificate.Properties.Name != nil {
if err := d.Set("name", *autoCertificate.Properties.Name); err != nil {
return utils.GenerateSetError(resourceName, "name", err)
}
if err := d.Set("name", autoCertificate.Properties.Name); err != nil {
return utils.GenerateSetError(resourceName, "name", err)
}
if autoCertificate.Properties.SubjectAlternativeNames != nil {
subjectAlternativeNames := []string{}
subjectAlternativeNames = append(subjectAlternativeNames, *autoCertificate.Properties.SubjectAlternativeNames...)
if err := d.Set("subject_alternative_names", subjectAlternativeNames); err != nil {
return utils.GenerateSetError(resourceName, "subject_alternative_names", err)
}
subjectAlternativeNames := []string{}
subjectAlternativeNames = append(subjectAlternativeNames, autoCertificate.Properties.SubjectAlternativeNames...)
if err := d.Set("subject_alternative_names", subjectAlternativeNames); err != nil {
return utils.GenerateSetError(resourceName, "subject_alternative_names", err)
}
return nil
}
Loading

0 comments on commit ee3de0a

Please sign in to comment.