Skip to content

Commit 9539474

Browse files
authored
Adding the changes for bucket backup retention (IBM-Cloud#6283)
* Adding the changes for bucket backup retention * Addressing the review comments * Making initial_delete_after_days as required parameter
1 parent e2b3fcf commit 9539474

13 files changed

+851
-148
lines changed

examples/ibm-cos-bucket/README.md

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,97 @@ resource "ibm_cos_bucket_lifecycle_configuration" "lifecycle" {
540540
}
541541
}
542542
```
543+
544+
## Bucket Backup
545+
546+
Provides 2 seperate resources - `ibm_cos_backup_vault` and `ibm_cos_backup_policy` to manage the backup policies and the backup vaults to store the backup of a COS bucket.
547+
548+
## Example usage
549+
550+
```terraform
551+
resource "ibm_cos_bucket" "backup-source-bucket" {
552+
bucket_name = "bucket-name"
553+
resource_instance_id = "cos_instance_id"
554+
cross_region_location = "us"
555+
storage_class = "standard"
556+
object_versioning {
557+
enable = true
558+
}
559+
560+
}
561+
562+
563+
resource "ibm_cos_backup_vault" "backup-vault" {
564+
backup_vault_name = "backup_vault_name"
565+
service_instance_id = "cos_instance_id to create backup vault"
566+
region = "us"
567+
activity_tracking_management_events = true
568+
metrics_monitoring_usage_metrics = true
569+
kms_key_crn = "crn:v1:staging:public:kms:us-south:a/997xxxxxxxxxxxxxxxxxxxxxx54:5xxxxxxxa-fxxb-4xx8-9xx4-f1xxxxxxxxx5:key:af5667d5-dxx5-4xxf-8xxf-exxxxxxxf1d"
570+
}
571+
572+
573+
resource "ibm_iam_authorization_policy" "policy" {
574+
roles = [
575+
"Backup Manager", "Writer"
576+
]
577+
subject_attributes {
578+
name = "accountId"
579+
value = "account_id of the cos account"
580+
}
581+
subject_attributes {
582+
name = "serviceName"
583+
value = "cloud-object-storage"
584+
}
585+
subject_attributes {
586+
name = "serviceInstance"
587+
value = "exxxxx34-xxxx-xxxx-xxxx-d6xxxxxxxx9"
588+
}
589+
subject_attributes {
590+
name = "resource"
591+
value = "source-bucket-name"
592+
}
593+
subject_attributes {
594+
name = "resourceType"
595+
value = "bucket"
596+
}
597+
resource_attributes {
598+
name = "accountId"
599+
operator = "stringEquals"
600+
value = "account id of the cos account of backup vault"
601+
}
602+
resource_attributes {
603+
name = "serviceName"
604+
operator = "stringEquals"
605+
value = "cloud-object-storage"
606+
}
607+
resource_attributes {
608+
name = "serviceInstance"
609+
operator = "stringEquals"
610+
value = "exxxxx34-xxxx-xxxx-xxxx-d6xxxxxxxx9"
611+
}
612+
resource_attributes {
613+
name = "resource"
614+
operator = "stringEquals"
615+
value = "backup-vault-name"
616+
}
617+
resource_attributes {
618+
name = "resourceType"
619+
operator = "stringEquals"
620+
value = "backup-vault"
621+
}
622+
}
623+
624+
resource "ibm_cos_backup_policy" "policy" {
625+
bucket_crn = ibm_cos_bucket.bucket.crn
626+
initial_delete_after_days = 2
627+
policy_name = "policy_name"
628+
target_backup_vault_crn = ibm_cos_backup_vault.backup-vault.backup_vault_crn
629+
backup_type = "continuous"
630+
}
631+
632+
```
633+
543634
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
544635

545636
## Requirements
@@ -625,5 +716,14 @@ resource "ibm_cos_bucket_lifecycle_configuration" "lifecycle" {
625716
| object_size_greater_than | Expiration rule will be applicable to the objects having size greater than specified value of his argument. | `int` | No
626717
| object_size_less_than | Expiration rule will be applicable to the objects having size lesser than specified value of his argument. | `int` | No
627718
| tag | Expiration rule will be applicable to the objects having the key-value tags specified by this attribute. | `object` | Yes
628-
719+
| backup_vault_name | Name of the backup vault. | `string` | Yes |
720+
| service_instance_id | CRN of the COS instance where the backup vault is to be created. | `string` | Yes |
721+
| activity_tracking_management_events | Whether to send notification for the management events for backup vault. | `bool` | No |
722+
| metrics_monitoring_usage_metrics | Whether usage metrics are collected for this backup vault. | `bool` | No |
723+
| kms_key_crn | Crn of the Key protect root. | `string` | No |
724+
| bucket_crn | CRN of the source bucket. | `string` | Yes |
725+
| initial_delete_after_days | Number of days after which the data contained within the RecoveryRange will be deleted. | `int` | Yes |
726+
| policy_name | Name of the policy. | `string` | Yes |
727+
| backup_type | Backup type. Currently only `continuous` is supported. | `string` | Yes |
728+
| target_backup_vault_crn | CRN of the target backup vault. | `string` | Yes |
629729
{: caption="inputs"}

examples/ibm-cos-bucket/main.tf

Lines changed: 100 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -724,14 +724,14 @@ resource "ibm_cos_bucket_lifecycle_configuration" "lifecycle" {
724724
days = 1
725725
}
726726
filter {
727-
and{
728-
prefix = "%s"
729-
tags{
730-
key = "%s"
731-
value = "%s"
732-
}
733-
object_size_greater_than = "%d"
734-
object_size_less_than = "%d"
727+
and {
728+
prefix = "foo"
729+
tags {
730+
key = "key"
731+
value = "value"
732+
}
733+
object_size_greater_than = 20
734+
object_size_less_than = 40
735735
}
736736
}
737737
rule_id = "id"
@@ -757,19 +757,102 @@ resource "ibm_cos_bucket_lifecycle_configuration" "lifecycle" {
757757
days = 1
758758
}
759759
filter {
760-
and{
761-
tags{
762-
key = "%s"
763-
value = "%s"
764-
}
765-
tags{
766-
key = "%s"
767-
value = "%s"
768-
}
760+
and {
761+
tags {
762+
key = "key1"
763+
value = "value1"
764+
}
765+
tags {
766+
key = "key2"
767+
value = "value2"
768+
}
769769
}
770770
}
771771
rule_id = "id"
772772
status = "enable"
773773
}
774774
}
775775

776+
777+
resource "ibm_cos_bucket" "backup-source-bucket" {
778+
bucket_name = "bucket-name"
779+
resource_instance_id = "cos_instance_id"
780+
cross_region_location = "us"
781+
storage_class = "standard"
782+
object_versioning {
783+
enable = true
784+
}
785+
786+
}
787+
788+
789+
resource "ibm_cos_backup_vault" "backup-vault" {
790+
backup_vault_name = "backup_vault_name"
791+
service_instance_id = "cos_instance_id to create backup vault"
792+
region = "us"
793+
activity_tracking_management_events = true
794+
metrics_monitoring_usage_metrics = true
795+
kms_key_crn = "crn:v1:staging:public:kms:us-south:a/997xxxxxxxxxxxxxxxxxxxxxx54:5xxxxxxxa-fxxb-4xx8-9xx4-f1xxxxxxxxx5:key:af5667d5-dxx5-4xxf-8xxf-exxxxxxxf1d"
796+
}
797+
798+
799+
resource "ibm_iam_authorization_policy" "policy" {
800+
roles = [
801+
"Backup Manager", "Writer"
802+
]
803+
subject_attributes {
804+
name = "accountId"
805+
value = "account_id of the cos account"
806+
}
807+
subject_attributes {
808+
name = "serviceName"
809+
value = "cloud-object-storage"
810+
}
811+
subject_attributes {
812+
name = "serviceInstance"
813+
value = "exxxxx34-xxxx-xxxx-xxxx-d6xxxxxxxx9"
814+
}
815+
subject_attributes {
816+
name = "resource"
817+
value = "source-bucket-name"
818+
}
819+
subject_attributes {
820+
name = "resourceType"
821+
value = "bucket"
822+
}
823+
resource_attributes {
824+
name = "accountId"
825+
operator = "stringEquals"
826+
value = "account id of the cos account of backup vault"
827+
}
828+
resource_attributes {
829+
name = "serviceName"
830+
operator = "stringEquals"
831+
value = "cloud-object-storage"
832+
}
833+
resource_attributes {
834+
name = "serviceInstance"
835+
operator = "stringEquals"
836+
value = "exxxxx34-xxxx-xxxx-xxxx-d6xxxxxxxx9"
837+
}
838+
resource_attributes {
839+
name = "resource"
840+
operator = "stringEquals"
841+
value = "backup-vault-name"
842+
}
843+
resource_attributes {
844+
name = "resourceType"
845+
operator = "stringEquals"
846+
value = "backup-vault"
847+
}
848+
}
849+
850+
resource "ibm_cos_backup_policy" "policy" {
851+
bucket_crn = ibm_cos_bucket.bucket.crn
852+
initial_delete_after_days = 2
853+
policy_name = "policy_name"
854+
target_backup_vault_crn = ibm_cos_backup_vault.backup-vault.backup_vault_crn
855+
backup_type = "continuous"
856+
}
857+
858+

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ require (
1919
github.com/IBM/eventstreams-go-sdk v1.4.0
2020
github.com/IBM/go-sdk-core/v5 v5.19.1
2121
github.com/IBM/ibm-backup-recovery-sdk-go v1.0.3
22-
github.com/IBM/ibm-cos-sdk-go v1.12.0
23-
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.2.0
22+
github.com/IBM/ibm-cos-sdk-go v1.12.2
23+
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0
2424
github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20250305134146-e023c2e84762
2525
github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta
2626
github.com/IBM/keyprotect-go-client v0.15.1

go.sum

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ github.com/IBM/go-sdk-core/v5 v5.19.1 h1:sleVks1O4XjgF4YEGvyDh6PZbP6iZhlTPeDkQc8
130130
github.com/IBM/go-sdk-core/v5 v5.19.1/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw=
131131
github.com/IBM/ibm-backup-recovery-sdk-go v1.0.3 h1:9TZHocmCfgmF8TGVrpP1kFyQbjcqLNW7+bM07lefpKQ=
132132
github.com/IBM/ibm-backup-recovery-sdk-go v1.0.3/go.mod h1:jsYutWlnGysdCNoAk0zoIXb2vfKM9TmMpiUkI4pVuXY=
133-
github.com/IBM/ibm-cos-sdk-go v1.12.0 h1:Wrk3ve4JS3euhl7XjNFd3RlvPT56199G2/rKaPWpRKU=
134-
github.com/IBM/ibm-cos-sdk-go v1.12.0/go.mod h1:v/VBvFuysZMIX9HcaIrz6a+FLVw9px8fq6XabFwD+E4=
135-
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.2.0 h1:H5XSKuOEf+z+506ITq3FSXhFNBaZt7OLpH4OTQGcNXw=
136-
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.2.0/go.mod h1:ci4tI9mIZEtN6cenuVN9RWyNJu8CkWHmYH758K2lVEQ=
133+
github.com/IBM/ibm-cos-sdk-go v1.12.2 h1:71A4tDl8u6BZ548h71ecEe7fw5bBA7ECTVqYmeSQWQA=
134+
github.com/IBM/ibm-cos-sdk-go v1.12.2/go.mod h1:ODYcmrmdpjo5hVguq9RbD6xmC8xb1XZMG7NefUbJNcc=
135+
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 h1:956Nqk0eKI3lq+AkzWXZDid4UZHRz0wWh1LwkleBsWk=
136+
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0/go.mod h1:chnQxV+i38wD0aIi4KNU5bP2uzPtc7EHqB3/8Rhyjlg=
137137
github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20250305134146-e023c2e84762 h1:eB640+EihADOu56O2p/9JuuEUnSKX5I2URFd8/g92HY=
138138
github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20250305134146-e023c2e84762/go.mod h1:M2JyuyeWHPtgGNeezr6YqVRuaav2MpY8Ha4QrEYvMoI=
139139
github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta h1:P1fdIfKsD9xvJQ5MHIEztPS9yfNf9x+VDTamaYcmqcs=
@@ -1339,9 +1339,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
13391339
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
13401340
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
13411341
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
1342+
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
13421343
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
1343-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
1344-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
13451344
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
13461345
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
13471346
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=

ibm/acctest/acctest.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ var (
3939
CosBackupPolicyID string
4040
BucketCRN string
4141
BackupVaultName string
42+
BackupVaultName2 string
43+
BackupVaultCrn string
44+
BackupVaultCrn2 string
4245
ActivityTrackerInstanceCRN string
4346
MetricsMonitoringCRN string
4447
KmsKeyCrn string
@@ -596,6 +599,21 @@ func init() {
596599
BackupVaultName = ""
597600
fmt.Println("[WARN] Set the environment variable IBM_COS_Backup_Vault with a VALID BACKUP VAULT NAME for testing ibm_cos_backup_vault* resources")
598601
}
602+
BackupVaultName2 = os.Getenv("IBM_COS_Backup_Vault2")
603+
if BackupVaultName2 == "" {
604+
BackupVaultName2 = ""
605+
fmt.Println("[WARN] Set the environment variable IBM_COS_Backup_Vault2 with a VALID BACKUP VAULT NAME for testing ibm_cos_backup_vault* resources")
606+
}
607+
BackupVaultCrn = os.Getenv("IBM_COS_Backup_Vault_Crn")
608+
if BackupVaultCrn == "" {
609+
BackupVaultCrn = ""
610+
fmt.Println("[WARN] Set the environment variable IBM_COS_Backup_Crn with a VALID BACKUP VAULT CRN for testing ibm_cos_backup_vault* resources")
611+
}
612+
BackupVaultCrn2 = os.Getenv("IBM_COS_Backup_Vault_Crn2")
613+
if BackupVaultCrn2 == "" {
614+
BackupVaultCrn2 = ""
615+
fmt.Println("[WARN] Set the environment variable IBM_COS_Backup_Crn2 with a VALID BACKUP VAULT CRN for testing ibm_cos_backup_vault* resources")
616+
}
599617
KmsKeyCrn = os.Getenv("IBM_KMS_KEY_CRN")
600618
if KmsKeyCrn == "" {
601619
KmsKeyCrn = ""

ibm/service/cos/data_source_ibm_cos_backup_policy.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ func DataSourceIBMCosBackupPolicy() *schema.Resource {
2121
Required: true,
2222
Description: "Name of the source bucket",
2323
},
24+
"initial_delete_after_days": {
25+
Type: schema.TypeInt,
26+
Computed: true,
27+
Description: "Number of days after which the objects inside backup vault should be deleted.",
28+
},
2429
"policy_id": {
2530
Type: schema.TypeString,
2631
Required: true,
@@ -68,6 +73,9 @@ func dataSourceIBMCosBackupPolicyRead(d *schema.ResourceData, meta interface{})
6873
d.Set("policy_name", aws.String(*res.PolicyName))
6974
policy_name = *res.PolicyName
7075
}
76+
if res.InitialRetention.DeleteAfterDays != nil {
77+
d.Set("initial_delete_after_days", int((*res.InitialRetention.DeleteAfterDays)))
78+
}
7179
if res.TargetBackupVaultCrn != nil {
7280
d.Set("target_backup_vault_crn", aws.String(*res.TargetBackupVaultCrn))
7381
target_backup_vault_crn = *res.TargetBackupVaultCrn

ibm/service/cos/data_source_ibm_cos_backup_policy_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func TestAccIBMCOSBackupPolicyDataSource_basic(t *testing.T) {
2323
resource.TestCheckResourceAttrSet("data.ibm_cos_backup_policy.policy", "bucket_name"),
2424
resource.TestCheckResourceAttrSet("data.ibm_cos_backup_policy.policy", "policy_id"),
2525
resource.TestCheckResourceAttr("data.ibm_cos_backup_policy.policy", "backup_type", "continuous"),
26+
resource.TestCheckResourceAttrSet("data.ibm_cos_backup_policy.policy", "initial_delete_after_days"),
2627
),
2728
},
2829
},

0 commit comments

Comments
 (0)