Skip to content

Commit d94fb51

Browse files
Deprecated match_resource_types and Intoduced match_resource_type (IBM-Cloud#4863)
* Deprecated match_resource_types and Intoduced match_resource_type * Implemented acceptance test
1 parent a3ae7e4 commit d94fb51

File tree

3 files changed

+135
-8
lines changed

3 files changed

+135
-8
lines changed

ibm/service/vpc/resource_ibm_is_backup_policy.go

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,22 @@ func ResourceIBMIsBackupPolicy() *schema.Resource {
2727

2828
Schema: map[string]*schema.Schema{
2929
"match_resource_types": &schema.Schema{
30-
Type: schema.TypeSet,
31-
Optional: true,
32-
Computed: true,
33-
Set: schema.HashString,
34-
Description: "A resource type this backup policy applies to. Resources that have both a matching type and a matching user tag will be subject to the backup policy.",
35-
Elem: &schema.Schema{Type: schema.TypeString},
30+
Type: schema.TypeSet,
31+
Optional: true,
32+
Computed: true,
33+
Set: schema.HashString,
34+
Deprecated: "match_resource_types is being deprecated. Use match_resource_type instead",
35+
Description: "A resource type this backup policy applies to. Resources that have both a matching type and a matching user tag will be subject to the backup policy.",
36+
ConflictsWith: []string{"match_resource_type"},
37+
Elem: &schema.Schema{Type: schema.TypeString},
38+
},
39+
"match_resource_type": {
40+
Type: schema.TypeString,
41+
Optional: true,
42+
Default: "volume",
43+
ConflictsWith: []string{"match_resource_types"},
44+
ValidateFunc: validate.InvokeValidator("ibm_is_backup_policy", "match_resource_types"),
45+
Description: "A resource type this backup policy applies to. Resources that have both a matching type and a matching user tag will be subject to the backup policy.",
3646
},
3747
"match_user_tags": &schema.Schema{
3848
Type: schema.TypeSet,
@@ -118,7 +128,7 @@ func ResourceIBMIsBackupPolicyValidator() *validate.ResourceValidator {
118128
)
119129
validateSchema = append(validateSchema,
120130
validate.ValidateSchema{
121-
Identifier: "match_resource_types",
131+
Identifier: "match_resource_type",
122132
ValidateFunctionIdentifier: validate.ValidateRegexpLen,
123133
Type: validate.TypeString,
124134
Optional: true,
@@ -139,9 +149,14 @@ func resourceIBMIsBackupPolicyCreate(context context.Context, d *schema.Resource
139149

140150
createBackupPolicyOptions := &vpcv1.CreateBackupPolicyOptions{}
141151

142-
if _, ok := d.GetOk("match_resource_types"); ok {
152+
if matchResourceType, ok := d.GetOk("match_resource_type"); ok {
153+
matchResourceTypes := matchResourceType.(string)
154+
matchResourceTypesList := []string{matchResourceTypes}
155+
createBackupPolicyOptions.SetMatchResourceTypes(matchResourceTypesList)
156+
} else if _, ok := d.GetOk("match_resource_types"); ok {
143157
createBackupPolicyOptions.SetMatchResourceTypes(flex.ExpandStringList((d.Get("match_resource_types").(*schema.Set)).List()))
144158
}
159+
145160
if _, ok := d.GetOk("match_user_tags"); ok {
146161
createBackupPolicyOptions.SetMatchUserTags((flex.ExpandStringList((d.Get("match_user_tags").(*schema.Set)).List())))
147162
}
@@ -192,6 +207,13 @@ func resourceIBMIsBackupPolicyRead(context context.Context, d *schema.ResourceDa
192207
return diag.FromErr(fmt.Errorf("[ERROR] Error setting match_resource_types: %s", err))
193208
}
194209
}
210+
if backupPolicy.MatchResourceTypes != nil {
211+
for _, matchResourceTypes := range backupPolicy.MatchResourceTypes {
212+
if err = d.Set("match_resource_type", matchResourceTypes); err != nil {
213+
return diag.FromErr(fmt.Errorf("[ERROR] Error setting match_resource_type: %s", err))
214+
}
215+
}
216+
}
195217
if backupPolicy.MatchUserTags != nil {
196218
if err = d.Set("match_user_tags", backupPolicy.MatchUserTags); err != nil {
197219
return diag.FromErr(fmt.Errorf("[ERROR] Error setting match_user_tags: %s", err))

ibm/service/vpc/resource_ibm_is_backup_policy_test.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,59 @@ func TestAccIBMIsBackupPolicyBasic(t *testing.T) {
6969
})
7070
}
7171

72+
func TestAccIBMIsBackupPolicyMatchResourceType(t *testing.T) {
73+
vpcname := fmt.Sprintf("tf-vpc-%d", acctest.RandIntRange(10, 100))
74+
name := fmt.Sprintf("tf-instnace-%d", acctest.RandIntRange(10, 100))
75+
subnetname := fmt.Sprintf("tf-subnet-%d", acctest.RandIntRange(10, 100))
76+
sshname := fmt.Sprintf("tf-ssh-%d", acctest.RandIntRange(10, 100))
77+
volname := fmt.Sprintf("tf-vol-%d", acctest.RandIntRange(10, 100))
78+
backupPolicyName := fmt.Sprintf("tfbakuppolicyname%d", acctest.RandIntRange(10, 100))
79+
backupPolicyNameUpdate := fmt.Sprintf("tfbakuppolicyname%d", acctest.RandIntRange(10, 100))
80+
81+
resource.Test(t, resource.TestCase{
82+
PreCheck: func() { acc.TestAccPreCheck(t) },
83+
Providers: acc.TestAccProviders,
84+
CheckDestroy: testAccCheckIBMIsBackupPolicyDestroy,
85+
Steps: []resource.TestStep{
86+
resource.TestStep{
87+
Config: testAccCheckIBMIsBackupPolicyConfigMatchResourceType(backupPolicyName, vpcname, subnetname, sshname, volname, name),
88+
Check: resource.ComposeAggregateTestCheckFunc(
89+
resource.TestCheckResourceAttr("ibm_is_backup_policy.is_backup_policy", "name", backupPolicyName),
90+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "match_resource_types.#"),
91+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "match_user_tags.#"),
92+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "resource_group"),
93+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "created_at"),
94+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "crn"),
95+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "href"),
96+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "lifecycle_state"),
97+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "resource_type"),
98+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "version"),
99+
),
100+
},
101+
resource.TestStep{
102+
Config: testAccCheckIBMIsBackupPolicyConfigMatchResourceType(backupPolicyNameUpdate, vpcname, subnetname, sshname, volname, name),
103+
Check: resource.ComposeAggregateTestCheckFunc(
104+
resource.TestCheckResourceAttr("ibm_is_backup_policy.is_backup_policy", "name", backupPolicyNameUpdate),
105+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "match_resource_types.#"),
106+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "match_user_tags.#"),
107+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "resource_group"),
108+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "created_at"),
109+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "crn"),
110+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "href"),
111+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "lifecycle_state"),
112+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "resource_type"),
113+
resource.TestCheckResourceAttrSet("ibm_is_backup_policy.is_backup_policy", "version"),
114+
),
115+
},
116+
{
117+
ResourceName: "ibm_is_backup_policy.is_backup_policy",
118+
ImportState: true,
119+
ImportStateVerify: true,
120+
},
121+
},
122+
})
123+
}
124+
72125
func testAccCheckIBMIsBackupPolicyConfigBasic(backupPolicyName string, vpcname, subnetname, sshname, volName, name string) string {
73126
return fmt.Sprintf(`
74127
resource "ibm_is_vpc" "testacc_vpc" {
@@ -116,6 +169,54 @@ func testAccCheckIBMIsBackupPolicyConfigBasic(backupPolicyName string, vpcname,
116169
}`, vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, sshname, volName, acc.ISZoneName, name, acc.IsImage, acc.InstanceProfileName, acc.ISZoneName, backupPolicyName)
117170
}
118171

172+
func testAccCheckIBMIsBackupPolicyConfigMatchResourceType(backupPolicyName string, vpcname, subnetname, sshname, volName, name string) string {
173+
return fmt.Sprintf(`
174+
resource "ibm_is_vpc" "testacc_vpc" {
175+
name = "%s"
176+
}
177+
178+
resource "ibm_is_subnet" "testacc_subnet" {
179+
name = "%s"
180+
vpc = ibm_is_vpc.testacc_vpc.id
181+
zone = "%s"
182+
ipv4_cidr_block = "%s"
183+
}
184+
185+
resource "ibm_is_ssh_key" "testacc_sshkey" {
186+
name = "%s"
187+
// public_key = file("../../test-fixtures/.ssh/id_rsa")
188+
public_key = file("~/.ssh/id_rsa.pub")
189+
}
190+
191+
resource "ibm_is_volume" "storage" {
192+
name = "%s"
193+
profile = "10iops-tier"
194+
zone = "%s"
195+
# capacity= 200
196+
tags = ["tag-0"]
197+
}
198+
199+
resource "ibm_is_instance" "testacc_instance" {
200+
name = "%s"
201+
image = "%s"
202+
profile = "%s"
203+
primary_network_interface {
204+
subnet = ibm_is_subnet.testacc_subnet.id
205+
}
206+
vpc = ibm_is_vpc.testacc_vpc.id
207+
zone = "%s"
208+
keys = [ibm_is_ssh_key.testacc_sshkey.id]
209+
volumes = [ibm_is_volume.storage.id]
210+
}
211+
212+
resource "ibm_is_backup_policy" "is_backup_policy" {
213+
depends_on = [ibm_is_instance.testacc_instance]
214+
match_user_tags = ["tag-0"]
215+
match_resource_type = "volume"
216+
name = "%s"
217+
}`, vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, sshname, volName, acc.ISZoneName, name, acc.IsImage, acc.InstanceProfileName, acc.ISZoneName, backupPolicyName)
218+
}
219+
119220
func testAccCheckIBMIsBackupPolicyDestroy(s *terraform.State) error {
120221
vpcClient, err := acc.TestAccProvider.Meta().(conns.ClientSession).VpcV1API()
121222

website/docs/r/is_backup_policy.html.markdown

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ resource "ibm_is_backup_policy" "example" {
3636
Review the argument reference that you can specify for your resource.
3737

3838
- `match_resource_types` - (Optional, List) A resource type this backup policy applies to. Resources that have both a matching type and a matching user tag will be subject to the backup policy. The default value is `["volume"]`.
39+
40+
~> **Note**
41+
`match_resource_types` is deprecated. Please use `match_resource_type` instead.
42+
- `match_resource_type` - (Optional, String) The resource type this backup policy will apply to. Resources that have both a matching type and a matching user tag will be subject to the backup policy. The default value is `["volume"]`.
3943
- `match_user_tags` - (Required, List) The user tags this backup policy applies to. Resources that have both a matching user tag and a matching type will be subject to the backup policy.
4044
- `name` - (Required, String) The user-defined name for this backup policy. Names must be unique within the region this backup policy resides in.
4145
- `resource_group` - (Optional, List) The resource group id, to use. If unspecified, the account's [default resource group](https://cloud.ibm.com/apidocs/resource-manager#introduction) is used.

0 commit comments

Comments
 (0)