From 6df5711b4bd3ad42f45bb9cea31b15c7f272358b Mon Sep 17 00:00:00 2001 From: ryanewk <60482060+ryanewk@users.noreply.github.com> Date: Fri, 31 Jan 2020 19:13:39 -0500 Subject: [PATCH] azurerm_marketplace_agreement: recreate agreement if !accepted (#5582) fixes #5577 --- .../resource_arm_marketplace_agreement.go | 4 ++ ...resource_arm_marketplace_agreement_test.go | 55 ++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/azurerm/internal/services/compute/resource_arm_marketplace_agreement.go b/azurerm/internal/services/compute/resource_arm_marketplace_agreement.go index 0c0de1ff4b34..2547460541b4 100644 --- a/azurerm/internal/services/compute/resource_arm_marketplace_agreement.go +++ b/azurerm/internal/services/compute/resource_arm_marketplace_agreement.go @@ -153,6 +153,10 @@ func resourceArmMarketplaceAgreementRead(d *schema.ResourceData, meta interface{ d.Set("plan", plan) if props := resp.AgreementProperties; props != nil { + if accepted := props.Accepted != nil && *props.Accepted; !accepted { + // if props.Accepted is not true, the agreement does not exist + d.SetId("") + } d.Set("license_text_link", props.LicenseTextLink) d.Set("privacy_policy_link", props.PrivacyPolicyLink) } diff --git a/azurerm/internal/services/compute/tests/resource_arm_marketplace_agreement_test.go b/azurerm/internal/services/compute/tests/resource_arm_marketplace_agreement_test.go index 96290bb17467..91319da1535e 100644 --- a/azurerm/internal/services/compute/tests/resource_arm_marketplace_agreement_test.go +++ b/azurerm/internal/services/compute/tests/resource_arm_marketplace_agreement_test.go @@ -15,8 +15,9 @@ import ( func TestAccAzureRMMarketplaceAgreement(t *testing.T) { testCases := map[string]map[string]func(t *testing.T){ "basic": { - "basic": testAccAzureRMMarketplaceAgreement_basic, - "requiresImport": testAccAzureRMMarketplaceAgreement_requiresImport, + "basic": testAccAzureRMMarketplaceAgreement_basic, + "requiresImport": testAccAzureRMMarketplaceAgreement_requiresImport, + "agreementCanceled": testAccAzureRMMarketplaceAgreement_agreementCanceled, }, } @@ -81,6 +82,26 @@ func testAccAzureRMMarketplaceAgreement_requiresImport(t *testing.T) { }) } +func testAccAzureRMMarketplaceAgreement_agreementCanceled(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_marketplace_agreement", "test") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acceptance.PreCheck(t) }, + Providers: acceptance.SupportedProviders, + CheckDestroy: testCheckAzureRMMarketplaceAgreementDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAzureRMMarketplaceAgreement_basicConfig(), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMMarketplaceAgreementExists(data.ResourceName), + testCheckAzureRMMarketplaceAgreementCanceled(data.ResourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + func testCheckAzureRMMarketplaceAgreementExists(resourceName string) resource.TestCheckFunc { return func(s *terraform.State) error { client := acceptance.AzureProvider.Meta().(*clients.Client).Compute.MarketplaceAgreementsClient @@ -103,6 +124,36 @@ func testCheckAzureRMMarketplaceAgreementExists(resourceName string) resource.Te return fmt.Errorf("Bad: Get on MarketplaceAgreementsClient: %+v", err) } + if resp.AgreementProperties == nil || resp.AgreementProperties.Accepted == nil || !*resp.AgreementProperties.Accepted { + return fmt.Errorf("Bad: Marketplace Agreement for Publisher %q / Offer %q / Plan %q is not accepted", publisher, offer, plan) + } + + return nil + } +} + +func testCheckAzureRMMarketplaceAgreementCanceled(resourceName string) resource.TestCheckFunc { + return func(s *terraform.State) error { + client := acceptance.AzureProvider.Meta().(*clients.Client).Compute.MarketplaceAgreementsClient + ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext + + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return fmt.Errorf("Not found: %s", resourceName) + } + + offer := rs.Primary.Attributes["offer"] + plan := rs.Primary.Attributes["plan"] + publisher := rs.Primary.Attributes["publisher"] + + resp, err := client.Cancel(ctx, publisher, offer, plan) + if err != nil { + if utils.ResponseWasNotFound(resp.Response) { + return fmt.Errorf("Bad: Marketplace Agreement for Publisher %q / Offer %q / Plan %q does not exist", publisher, offer, plan) + } + return fmt.Errorf("Bad: Get on MarketplaceAgreementsClient: %+v", err) + } + return nil } }