Skip to content

Commit aa73497

Browse files
authored
fix: fixed import of ibm_cm_object (#6553)
* fix: fixed import of ibm_cm_object * improved error handling and added acceptance tests
1 parent 9f99846 commit aa73497

File tree

2 files changed

+106
-2
lines changed

2 files changed

+106
-2
lines changed

ibm/service/catalogmanagement/resource_ibm_cm_object.go

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,66 @@ func ResourceIBMCmObject() *schema.Resource {
2626
ReadContext: resourceIBMCmObjectRead,
2727
UpdateContext: resourceIBMCmObjectUpdate,
2828
DeleteContext: resourceIBMCmObjectDelete,
29-
Importer: &schema.ResourceImporter{},
29+
Importer: &schema.ResourceImporter{
30+
State: func(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
31+
32+
catalogManagementClient, err := meta.(conns.ClientSession).CatalogManagementV1()
33+
if err != nil {
34+
tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_cm_object", "import")
35+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
36+
return nil, fmt.Errorf("error creating catalog management client during import: %w", err)
37+
}
38+
39+
catalogOptions := &catalogmanagementv1.ListCatalogsOptions{}
40+
catalogs, _, err := catalogManagementClient.ListCatalogs(catalogOptions)
41+
if err != nil {
42+
tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_cm_object", "import")
43+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
44+
return nil, fmt.Errorf("error listing catalogs during import: %w", err)
45+
}
46+
47+
id := d.Id()
48+
found := false
49+
50+
for _, c := range catalogs.Resources {
51+
if c.ID == nil {
52+
continue
53+
}
54+
55+
getObjectOptions := &catalogmanagementv1.GetObjectOptions{
56+
CatalogIdentifier: c.ID,
57+
ObjectIdentifier: &id,
58+
}
59+
60+
catalogObject, res, err := catalogManagementClient.GetObject(getObjectOptions)
61+
62+
if err != nil && res.StatusCode != 404 {
63+
tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_cm_object", "import")
64+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
65+
continue
66+
}
67+
68+
if catalogObject == nil || catalogObject.CatalogID == nil {
69+
continue
70+
}
71+
72+
if err := d.Set("catalog_id", *catalogObject.CatalogID); err != nil {
73+
tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_cm_object", "import")
74+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
75+
return nil, fmt.Errorf("error setting catalog_id during import: %w", err)
76+
}
77+
78+
found = true
79+
break
80+
}
81+
82+
if !found {
83+
return nil, fmt.Errorf("ibm_cm_object with id %q not found in any catalog", d.Id())
84+
}
85+
86+
return []*schema.ResourceData{d}, nil
87+
},
88+
},
3089

3190
Schema: map[string]*schema.Schema{
3291
"catalog_id": &schema.Schema{

ibm/service/catalogmanagement/resource_ibm_cm_object_test.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package catalogmanagement_test
55

66
import (
77
"fmt"
8+
"regexp"
89
"testing"
910

1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
@@ -62,11 +63,55 @@ func testAccCheckIBMCmObjectConfig(name string, parentID string, label string, s
6263
short_description = "%s"
6364
kind = "%s"
6465
tags = ["test1", "test2"]
65-
data = jsonencode(local.catalog_object_data)
6666
}
6767
`, kind, name, parentID, label, shortDescription, kind)
6868
}
6969

70+
func TestAccIBMCmObjectImport(t *testing.T) {
71+
var conf catalogmanagementv1.CatalogObject
72+
name := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100))
73+
parentID := "us-south"
74+
label := fmt.Sprintf("tf_label_%d", acctest.RandIntRange(10, 100))
75+
shortDescription := fmt.Sprintf("tf_short_description_%d", acctest.RandIntRange(10, 100))
76+
kind := "vpe"
77+
78+
badID := "this-id-does-not-exist-12345"
79+
80+
resource.Test(t, resource.TestCase{
81+
PreCheck: func() { acc.TestAccPreCheck(t) },
82+
Providers: acc.TestAccProviders,
83+
CheckDestroy: testAccCheckIBMCmObjectDestroy,
84+
Steps: []resource.TestStep{
85+
{
86+
Config: testAccCheckIBMCmObjectConfig(name, parentID, label, shortDescription, kind),
87+
Check: resource.ComposeAggregateTestCheckFunc(
88+
testAccCheckIBMCmObjectExists("ibm_cm_object.cm_object", conf),
89+
resource.TestCheckResourceAttr("ibm_cm_object.cm_object", "name", name),
90+
resource.TestCheckResourceAttr("ibm_cm_object.cm_object", "parent_id", parentID),
91+
resource.TestCheckResourceAttr("ibm_cm_object.cm_object", "label", label),
92+
resource.TestCheckResourceAttr("ibm_cm_object.cm_object", "short_description", shortDescription),
93+
resource.TestCheckResourceAttr("ibm_cm_object.cm_object", "kind", kind),
94+
),
95+
},
96+
97+
{
98+
ResourceName: "ibm_cm_object.cm_object",
99+
ImportState: true,
100+
ImportStateId: badID,
101+
ExpectError: regexp.MustCompile(
102+
`ibm_cm_object with id "` + badID + `" not found in any catalog`,
103+
),
104+
},
105+
106+
{
107+
ResourceName: "ibm_cm_object.cm_object",
108+
ImportState: true,
109+
ImportStateVerify: true,
110+
},
111+
},
112+
})
113+
}
114+
70115
func testAccCheckIBMCmObjectExists(n string, obj catalogmanagementv1.CatalogObject) resource.TestCheckFunc {
71116

72117
return func(s *terraform.State) error {

0 commit comments

Comments
 (0)