provider/aws: Improve error handling in IAM Server Certificates (#6442)
* provider/aws: Improve error handling in IAM Server Certificates * rename test, add additional empty check
This commit is contained in:
parent
fa0c629450
commit
d5f0fc22fd
|
@ -138,6 +138,11 @@ func resourceAwsIAMServerCertificateRead(d *schema.ResourceData, meta interface{
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if awsErr, ok := err.(awserr.Error); ok {
|
if awsErr, ok := err.(awserr.Error); ok {
|
||||||
|
if awsErr.Code() == "NoSuchEntity" {
|
||||||
|
log.Printf("[WARN] IAM Server Cert (%s) not found, removing from state", d.Id())
|
||||||
|
d.SetId("")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
return fmt.Errorf("[WARN] Error reading IAM Server Certificate: %s: %s", awsErr.Code(), awsErr.Message())
|
return fmt.Errorf("[WARN] Error reading IAM Server Certificate: %s: %s", awsErr.Code(), awsErr.Message())
|
||||||
}
|
}
|
||||||
return fmt.Errorf("[WARN] Error reading IAM Server Certificate: %s", err)
|
return fmt.Errorf("[WARN] Error reading IAM Server Certificate: %s", err)
|
||||||
|
@ -161,7 +166,7 @@ func resourceAwsIAMServerCertificateRead(d *schema.ResourceData, meta interface{
|
||||||
func resourceAwsIAMServerCertificateDelete(d *schema.ResourceData, meta interface{}) error {
|
func resourceAwsIAMServerCertificateDelete(d *schema.ResourceData, meta interface{}) error {
|
||||||
conn := meta.(*AWSClient).iamconn
|
conn := meta.(*AWSClient).iamconn
|
||||||
log.Printf("[INFO] Deleting IAM Server Certificate: %s", d.Id())
|
log.Printf("[INFO] Deleting IAM Server Certificate: %s", d.Id())
|
||||||
err := resource.Retry(1*time.Minute, func() *resource.RetryError {
|
err := resource.Retry(3*time.Minute, func() *resource.RetryError {
|
||||||
_, err := conn.DeleteServerCertificate(&iam.DeleteServerCertificateInput{
|
_, err := conn.DeleteServerCertificate(&iam.DeleteServerCertificateInput{
|
||||||
ServerCertificateName: aws.String(d.Get("name").(string)),
|
ServerCertificateName: aws.String(d.Get("name").(string)),
|
||||||
})
|
})
|
||||||
|
@ -172,6 +177,11 @@ func resourceAwsIAMServerCertificateDelete(d *schema.ResourceData, meta interfac
|
||||||
log.Printf("[WARN] Conflict deleting server certificate: %s, retrying", awsErr.Message())
|
log.Printf("[WARN] Conflict deleting server certificate: %s, retrying", awsErr.Message())
|
||||||
return resource.RetryableError(err)
|
return resource.RetryableError(err)
|
||||||
}
|
}
|
||||||
|
if awsErr.Code() == "NoSuchEntity" {
|
||||||
|
log.Printf("[WARN] IAM Server Certificate (%s) not found, removing from state", d.Id())
|
||||||
|
d.SetId("")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return resource.NonRetryableError(err)
|
return resource.NonRetryableError(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,45 @@ func TestAccAWSIAMServerCertificate_name_prefix(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccAWSIAMServerCertificate_disappears(t *testing.T) {
|
||||||
|
var cert iam.ServerCertificate
|
||||||
|
|
||||||
|
testDestroyCert := func(*terraform.State) error {
|
||||||
|
// reach out and DELETE the Cert
|
||||||
|
conn := testAccProvider.Meta().(*AWSClient).iamconn
|
||||||
|
_, err := conn.DeleteServerCertificate(&iam.DeleteServerCertificateInput{
|
||||||
|
ServerCertificateName: cert.ServerCertificateMetadata.ServerCertificateName,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error destorying cert in test: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckIAMServerCertificateDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testAccIAMServerCertConfig_random,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckCertExists("aws_iam_server_certificate.test_cert", &cert),
|
||||||
|
testAccCheckAWSServerCertAttributes(&cert),
|
||||||
|
testDestroyCert,
|
||||||
|
),
|
||||||
|
ExpectNonEmptyPlan: true,
|
||||||
|
},
|
||||||
|
// Follow up plan w/ empty config should be empty, since the Cert is gone
|
||||||
|
resource.TestStep{
|
||||||
|
Config: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckCertExists(n string, cert *iam.ServerCertificate) resource.TestCheckFunc {
|
func testAccCheckCertExists(n string, cert *iam.ServerCertificate) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
rs, ok := s.RootModule().Resources[n]
|
rs, ok := s.RootModule().Resources[n]
|
||||||
|
|
Loading…
Reference in New Issue