diff --git a/examples/ibm-cos-bucket/README.md b/examples/ibm-cos-bucket/README.md index e459bc9a887..6f4e5f63601 100644 --- a/examples/ibm-cos-bucket/README.md +++ b/examples/ibm-cos-bucket/README.md @@ -52,22 +52,21 @@ resource "ibm_resource_instance" "metrics_monitor" { } } resource "ibm_cos_bucket" "standard-ams03" { - bucket_name = var.bucket_name - resource_instance_id = ibm_resource_instance.cos_instance.id - single_site_location = "sjc04" - #cross_region_location = var.region - storage_class = var.storage + bucket_name = var.bucket_name + resource_instance_id = ibm_resource_instance.cos_instance.id + single_site_location = var.single_site_loc + storage_class = var.standard_storage_class + hard_quota = var.quota activity_tracking { read_data_events = true write_data_events = true - activity_tracker_crn = ibm_resource_instance.activity_tracker.id + management_events = true } metrics_monitoring { usage_metrics_enabled = true request_metrics_enabled = true - metrics_monitoring_crn = ibm_resource_instance.metrics_monitor.id } - allowed_ip = ["223.196.168.27","223.196.161.38","192.168.0.1"] + allowed_ip = ["223.196.168.27", "223.196.161.38", "192.168.0.1"] } resource "ibm_cos_bucket" "archive_expire_rule_cos" { @@ -529,12 +528,13 @@ resource ibm_cos_bucket_website_configuration "website_configuration" { | satellite_location_id | satellite location. | `string` | no | | storage | The storage class that you want to use for the bucket. Supported values are **standard, vault, cold, flex, and smart**.| `string` | no | | region | The location for a cross-regional bucket. Supported values are **us, eu, and ap**. | `string` | no | -| read_data_events | Enables sending log data to Activity Tracker and LogDNA to provide visibility into object read and write events. | `array` | no -| write_data_events | All object write events (i.e. uploads) will be sent to Activity Tracker. | `bool` | no -| activity_tracker_crn | Required the first time activity_tracking is configured. | `string` | yes -| usage_metrics_enabled | Specify **true or false** to set usage metrics (i.e. bytes_used). | `bool` | no -| request_metrics_enabled | Specify true or false to set cos request metrics (i.e. get, put, or post request). | `bool` | no -| metrics_monitoring_crn | Required the first time metrics_monitoring is configured. The instance of IBM Cloud Monitoring that will receive the bucket metrics. | `string` | yes +| read_data_events | If set to **true**, all object read events (i.e. downloads) will be sent to Activity Tracker. | `bool` | no +| write_data_events | If set to **true**, all object write events (i.e. uploads) will be sent to Activity Tracker. | `bool` | no +| management_events |If set to **true**, all bucket management events will be sent to Activity Tracker.This field only applies if `activity_tracker_crn` is not populated. | `bool` | no +| activity_tracker_crn |When the `activity_tracker_crn` is not populated, then enabled events are sent to the Activity Tracker instance associated to the container's location unless otherwise specified in the Activity Tracker Event Routing service configuration.If `activity_tracker_crn` is populated, then enabled events are sent to the Activity Tracker instance specified and bucket management events are always enabled. | `string` | no +| usage_metrics_enabled |If set to **true**, all usage metrics (i.e. `bytes_used`) will be sent to the monitoring service.| `bool` | no +| request_metrics_enabled | If set to **true**, all request metrics (i.e. `rest.object.head`) will be sent to the monitoring service. | `bool` | no +| metrics_monitoring_crn | When the `metrics_monitoring_crn` is not populated, then enabled metrics are sent to the monitoring instance associated to the container's location unless otherwise specified in the Metrics Router service configuration.If `metrics_monitoring_crn` is populated, then enabled events are sent to the Metrics Monitoring instance specified. | `string` | no | regional_loc | The location for a regional bucket. Supported values are **au-syd, eu-de, eu-gb, jp-tok, us-east, or us-south**. | `string` | no | type | Specifies the archive type to which you want the object to transition. Supported values are **Glacier or Accelerated**. | `string` |yes | rule_id | Unique identifier for the rule. | `string` | no @@ -553,28 +553,28 @@ resource ibm_cos_bucket_website_configuration "website_configuration" { | object_lock | enables Object Lock on a bucket. | `bool` | no | bucket\_crn | The CRN of the source COS bucket. | `string` | yes | | bucket\_location | The location of the source COS bucket. | `string` | yes | -| destination_bucket_crn | The CRN of your destination bucket that you want to replicate to. | `String` | yes -| deletemarker_replication_status | Specifies whether Object storage replicates delete markers. Specify true for Enabling it or false for Disabling it. | `String` | no -| status | Specifies whether the rule is enabled. Specify true for Enabling it or false for Disabling it. | `String` | yes -| rule_id | The rule id. | `String` | no -| priority | A priority is associated with each rule. The rule will be applied in a higher priority if there are multiple rules configured. The higher the number, the higher the priority | `String` | no -| prefix | An object key name prefix that identifies the subset of objects to which the rule applies. | `String` | no -| bucket_crn | The CRN of the COS bucket on which Object Lock is enabled or should be enabled. | `String` | yes -| bucket_location | Location of the COS bucket. | `String` | yes -| endpoint_type | Endpoint types of the COS bucket. | `String` | no -| object_lock_enabled | Enable Object Lock on an existing COS bucket. | `String` | yes -| mode | Retention mode for the Object Lock configuration. | `String` | yes +| destination_bucket_crn | The CRN of your destination bucket that you want to replicate to. | `string` | yes +| deletemarker_replication_status | Specifies whether Object storage replicates delete markers. Specify true for Enabling it or false for Disabling it. | `string` | no +| status | Specifies whether the rule is enabled. Specify true for Enabling it or false for Disabling it. | `string` | yes +| rule_id | The rule id. | `string` | no +| priority | A priority is associated with each rule. The rule will be applied in a higher priority if there are multiple rules configured. The higher the number, the higher the priority | `string` | no +| prefix | An object key name prefix that identifies the subset of objects to which the rule applies. | `string` | no +| bucket_crn | The CRN of the COS bucket on which Object Lock is enabled or should be enabled. | `string` | yes +| bucket_location | Location of the COS bucket. | `string` | yes +| endpoint_type | Endpoint types of the COS bucket. | `string` | no +| object_lock_enabled | Enable Object Lock on an existing COS bucket. | `string` | yes +| mode | Retention mode for the Object Lock configuration. | `string` | yes | years | Retention period in terms of years after which the object can be deleted. | `int` | no | days | Retention period in terms of days after which the object can be deleted. | `int` | no -| key | Object key name to use when a 4XX class error occurs given as error document. | `String` | no -| suffix | The home or default page of the website when static web hosting configuration is added. | `String` | Yes -| hostname | Name of the host where requests are redirected. | `String` | Yes -| protocol | Protocol to use when redirecting requests. The default is the protocol that is used in the original request. | `String` | No -| http_error_code_returned_equals | HTTP error code when the redirect is applied. | `String` | No -| key_prefix_equals | Object key name prefix when the redirect is applied. | `String` | No -| host_name | Host name to use in the redirect request. | `String` | Yes -| protocol | Protocol to use when redirecting requests. | `String` | No -| http_redirect_code | HTTP redirect code to use on the response. | `String` | No -| replace_key_with | Specific object key to use in the redirect request. | `String` | No -| replace_key_prefix_with | Object key prefix to use in the redirect request. | `String` | No +| key | Object key name to use when a 4XX class error occurs given as error document. | `string` | no +| suffix | The home or default page of the website when static web hosting configuration is added. | `string` | Yes +| hostname | Name of the host where requests are redirected. | `string` | Yes +| protocol | Protocol to use when redirecting requests. The default is the protocol that is used in the original request. | `string` | No +| http_error_code_returned_equals | HTTP error code when the redirect is applied. | `string` | No +| key_prefix_equals | Object key name prefix when the redirect is applied. | `string` | No +| host_name | Host name to use in the redirect request. | `string` | Yes +| protocol | Protocol to use when redirecting requests. | `string` | No +| http_redirect_code | HTTP redirect code to use on the response. | `string` | No +| replace_key_with | Specific object key to use in the redirect request. | `string` | No +| replace_key_prefix_with | Object key prefix to use in the redirect request. | `string` | No {: caption="inputs"} diff --git a/examples/ibm-cos-bucket/main.tf b/examples/ibm-cos-bucket/main.tf index 7d9a1390d71..8e83a6f669e 100644 --- a/examples/ibm-cos-bucket/main.tf +++ b/examples/ibm-cos-bucket/main.tf @@ -34,12 +34,11 @@ resource "ibm_cos_bucket" "standard-ams03" { activity_tracking { read_data_events = true write_data_events = true - activity_tracker_crn = ibm_resource_instance.activity_tracker.id + management_events = true } metrics_monitoring { usage_metrics_enabled = true request_metrics_enabled = true - metrics_monitoring_crn = ibm_resource_instance.metrics_monitor.id } allowed_ip = ["223.196.168.27", "223.196.161.38", "192.168.0.1"] } diff --git a/go.mod b/go.mod index 71f0a858c3e..cad900d6d76 100644 --- a/go.mod +++ b/go.mod @@ -18,9 +18,9 @@ require ( github.com/IBM/event-notifications-go-admin-sdk v0.6.1 github.com/IBM/eventstreams-go-sdk v1.4.0 github.com/IBM/go-sdk-core/v3 v3.2.4 - github.com/IBM/go-sdk-core/v5 v5.17.2 - github.com/IBM/ibm-cos-sdk-go v1.10.1 - github.com/IBM/ibm-cos-sdk-go-config/v2 v2.0.4 + github.com/IBM/go-sdk-core/v5 v5.17.3 + github.com/IBM/ibm-cos-sdk-go v1.10.3 + github.com/IBM/ibm-cos-sdk-go-config/v2 v2.1.0 github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20211109141421-a4b61b05f7d1 github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta github.com/IBM/keyprotect-go-client v0.14.0 diff --git a/go.sum b/go.sum index 1acc7793c89..4ba67161868 100644 --- a/go.sum +++ b/go.sum @@ -153,12 +153,12 @@ github.com/IBM/go-sdk-core/v5 v5.7.0/go.mod h1:+YbdhrjCHC84ls4MeBp+Hj4NZCni+tDAc github.com/IBM/go-sdk-core/v5 v5.9.2/go.mod h1:YlOwV9LeuclmT/qi/LAK2AsobbAP42veV0j68/rlZsE= github.com/IBM/go-sdk-core/v5 v5.9.5/go.mod h1:YlOwV9LeuclmT/qi/LAK2AsobbAP42veV0j68/rlZsE= github.com/IBM/go-sdk-core/v5 v5.10.2/go.mod h1:WZPFasUzsKab/2mzt29xPcfruSk5js2ywAPwW4VJjdI= -github.com/IBM/go-sdk-core/v5 v5.17.2 h1:MyFCUPYqcNUQIx9d9srq9znMEZcvu6X3DOGIPjegP8o= -github.com/IBM/go-sdk-core/v5 v5.17.2/go.mod h1:GatGZpxlo1KaxiRN6E10/rNgWtUtx1hN/GoHSCaSPKA= -github.com/IBM/ibm-cos-sdk-go v1.10.1 h1:vQCsu61OHRVF2lL6ah+m3AmUlhnYGkI1qogukCEFULs= -github.com/IBM/ibm-cos-sdk-go v1.10.1/go.mod h1:zhcgfL2YG5DVaI5R2F6oYO2DYnvwW14vpcpFq+ybhXU= -github.com/IBM/ibm-cos-sdk-go-config/v2 v2.0.4 h1:fvy/cMKn/3BngdxaL5dXaSlUuzTANY42VuVQuW0NEYE= -github.com/IBM/ibm-cos-sdk-go-config/v2 v2.0.4/go.mod h1:Pam4aWm9Ve/pqAVrPW8nm2yCXq0h9LDeQ1Iacx5g9rU= +github.com/IBM/go-sdk-core/v5 v5.17.3 h1:CZSVCKzhQc/hRQZOtuEmi9dlNtWMnxJvOsPtQKP7cZ4= +github.com/IBM/go-sdk-core/v5 v5.17.3/go.mod h1:GatGZpxlo1KaxiRN6E10/rNgWtUtx1hN/GoHSCaSPKA= +github.com/IBM/ibm-cos-sdk-go v1.10.3 h1:YfZSLqMiCrqDPbr3r+amY2sicIXlrd+3L5pok6QRXIQ= +github.com/IBM/ibm-cos-sdk-go v1.10.3/go.mod h1:T9x7pC47DUd5jD/TMFzlvly39P6EdW5wOemA78XEo2g= +github.com/IBM/ibm-cos-sdk-go-config/v2 v2.1.0 h1:U7EmXSfv7jtugRpTpOkPUmgS/xiNKtGfKVH3BGyC1hg= +github.com/IBM/ibm-cos-sdk-go-config/v2 v2.1.0/go.mod h1:vMQ0DKpyoPk1MstfipPBoLfFxl3HWjzG/wH/UVg/xiU= github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20211109141421-a4b61b05f7d1 h1:T5UwRKKd+BoaPZ7UIlpJrzXzVTUEs8HcxwQ3pCIbORs= github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20211109141421-a4b61b05f7d1/go.mod h1:M2JyuyeWHPtgGNeezr6YqVRuaav2MpY8Ha4QrEYvMoI= github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta h1:P1fdIfKsD9xvJQ5MHIEztPS9yfNf9x+VDTamaYcmqcs= @@ -1372,8 +1372,8 @@ github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRah github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= -github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -1600,7 +1600,6 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= diff --git a/ibm/acctest/acctest.go b/ibm/acctest/acctest.go index 4eed05f675f..67c33926ebf 100644 --- a/ibm/acctest/acctest.go +++ b/ibm/acctest/acctest.go @@ -36,6 +36,8 @@ var ( CloudShellAccountID string CosCRN string BucketCRN string + ActivityTrackerInstanceCRN string + MetricsMonitoringCRN string BucketName string CosName string Ibmid1 string @@ -529,6 +531,16 @@ func init() { BucketCRN = "" fmt.Println("[WARN] Set the environment variable IBM_COS_Bucket_CRN with a VALID BUCKET CRN for testing ibm_cos_bucket* resources") } + ActivityTrackerInstanceCRN = os.Getenv("IBM_COS_ACTIVITY_TRACKER_CRN") + if ActivityTrackerInstanceCRN == "" { + ActivityTrackerInstanceCRN = "" + fmt.Println("[WARN] Set the environment variable IBM_COS_ACTIVITY_TRACKER_CRN with a VALID ACTIVITY TRACKER INSTANCE CRN in valid region for testing ibm_cos_bucket* resources") + } + MetricsMonitoringCRN = os.Getenv("IBM_COS_METRICS_MONITORING_CRN") + if MetricsMonitoringCRN == "" { + MetricsMonitoringCRN = "" + fmt.Println("[WARN] Set the environment variable IBM_COS_METRICS_MONITORING_CRN with a VALID METRICS MONITORING CRN for testing ibm_cos_bucket* resources") + } BucketName = os.Getenv("IBM_COS_BUCKET_NAME") if BucketName == "" { BucketName = "" diff --git a/ibm/flex/structures.go b/ibm/flex/structures.go index a8ed56381ab..2d9699081d5 100644 --- a/ibm/flex/structures.go +++ b/ibm/flex/structures.go @@ -690,6 +690,9 @@ func FlattenActivityTrack(in *resourceconfigurationv1.ActivityTracking) []interf if in.WriteDataEvents != nil { att["write_data_events"] = *in.WriteDataEvents } + if in.ManagementEvents != nil { + att["management_events"] = *in.ManagementEvents + } if in.ActivityTrackerCrn != nil { att["activity_tracker_crn"] = *in.ActivityTrackerCrn } diff --git a/ibm/service/cos/data_source_ibm_cos_bucket.go b/ibm/service/cos/data_source_ibm_cos_bucket.go index 83f519a3940..ef6b87f88b9 100644 --- a/ibm/service/cos/data_source_ibm_cos_bucket.go +++ b/ibm/service/cos/data_source_ibm_cos_bucket.go @@ -126,17 +126,22 @@ func DataSourceIBMCosBucket() *schema.Resource { "read_data_events": { Type: schema.TypeBool, Computed: true, - Description: "If set to true, all object read events will be sent to Activity Tracker.", + Description: "If set to true, all object read events (i.e. downloads) will be sent to Activity Tracker.", }, "write_data_events": { Type: schema.TypeBool, Computed: true, - Description: "If set to true, all object write events will be sent to Activity Tracker.", + Description: "If set to true, all object write events (i.e. uploads) will be sent to Activity Tracker.", + }, + "management_events": { + Type: schema.TypeBool, + Computed: true, + Description: "This field only applies if `activity_tracker_crn` is not populated. If set to true, all bucket management events will be sent to Activity Tracker.", }, "activity_tracker_crn": { Type: schema.TypeString, Computed: true, - Description: "The instance of Activity Tracker that will receive object event data", + Description: "When the `activity_tracker_crn` is not populated, then enabled events are sent to the Activity Tracker instance associated to the container's location unless otherwise specified in the Activity Tracker Event Routing service configuration.If `activity_tracker_crn` is populated, then enabled events are sent to the Activity Tracker instance specified and bucket management events are always enabled.", }, }, }, @@ -149,17 +154,17 @@ func DataSourceIBMCosBucket() *schema.Resource { "usage_metrics_enabled": { Type: schema.TypeBool, Computed: true, - Description: "Usage metrics will be sent to the monitoring service.", + Description: "If set to `true`, all usage metrics (i.e. `bytes_used`) will be sent to the monitoring service.", }, "request_metrics_enabled": { Type: schema.TypeBool, Computed: true, - Description: "Request metrics will be sent to the monitoring service.", + Description: "If set to true, all request metrics (i.e. `rest.object.head`) will be sent to the monitoring service", }, "metrics_monitoring_crn": { Type: schema.TypeString, Computed: true, - Description: "Instance of IBM Cloud Monitoring that will receive the bucket metrics.", + Description: "When the `metrics_monitoring_crn` is not populated, then enabled metrics are sent to the monitoring instance associated to the container's location unless otherwise specified in the Metrics Router service configuration.If `metrics_monitoring_crn` is populated, then enabled events are sent to the Metrics Monitoring instance specified.", }, }, }, diff --git a/ibm/service/cos/resource_ibm_cos_bucket.go b/ibm/service/cos/resource_ibm_cos_bucket.go index 299dfb77ad8..48dcf4f049a 100644 --- a/ibm/service/cos/resource_ibm_cos_bucket.go +++ b/ibm/service/cos/resource_ibm_cos_bucket.go @@ -15,7 +15,8 @@ import ( "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate" "github.com/IBM/go-sdk-core/core" - rcsdk "github.com/IBM/ibm-cos-sdk-go-config/v2/resourceconfigurationv1" + + "github.com/IBM/ibm-cos-sdk-go-config/v2/resourceconfigurationv1" "github.com/IBM/ibm-cos-sdk-go/aws" "github.com/IBM/ibm-cos-sdk-go/aws/credentials/ibmiam" token "github.com/IBM/ibm-cos-sdk-go/aws/credentials/ibmiam/token" @@ -185,25 +186,30 @@ func ResourceIBMCOSBucket() *schema.Resource { Type: schema.TypeList, Optional: true, MaxItems: 1, - Description: "Enables sending log data to Activity Tracker and LogDNA to provide visibility into object read and write events", + Description: "Enables sending log data to IBM Cloud Activity Tracker to provide visibility into bucket management, object read and write events.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "read_data_events": { Type: schema.TypeBool, Optional: true, Default: false, - Description: "If set to true, all object read events will be sent to Activity Tracker.", + Description: "If set to `true`, all object read events (i.e. downloads) will be sent to Activity Tracker.", }, "write_data_events": { Type: schema.TypeBool, Optional: true, Default: false, - Description: "If set to true, all object write events will be sent to Activity Tracker.", + Description: "If set to `true`, all object write events (i.e. uploads) will be sent to Activity Tracker.", + }, + "management_events": { + Type: schema.TypeBool, + Optional: true, + Description: "If set to `true`, all bucket management events will be sent to Activity Tracker.This field only applies if `activity_tracker_crn` is not populated.", }, "activity_tracker_crn": { Type: schema.TypeString, - Required: true, - Description: "The instance of Activity Tracker that will receive object event data", + Optional: true, + Description: "When the activity_tracker_crn is not populated, then enabled events are sent to the Activity Tracker instance associated to the container's location unless otherwise specified in the Activity Tracker Event Routing service configuration.If `activity_tracker_crn` is populated, then enabled events are sent to the Activity Tracker instance specified and bucket management events are always enabled.", }, }, }, @@ -212,25 +218,25 @@ func ResourceIBMCOSBucket() *schema.Resource { Type: schema.TypeList, Optional: true, MaxItems: 1, - Description: "Enables sending metrics to IBM Cloud Monitoring.", + Description: " Enables sending metrics to IBM Cloud Monitoring.All metrics are opt-in", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "usage_metrics_enabled": { Type: schema.TypeBool, Optional: true, Default: false, - Description: "Usage metrics will be sent to the monitoring service.", + Description: "If set to true, all usage metrics (i.e. `bytes_used`) will be sent to the monitoring service.", }, "request_metrics_enabled": { Type: schema.TypeBool, Optional: true, Default: false, - Description: "Request metrics will be sent to the monitoring service.", + Description: "If set to true, all request metrics (i.e. `rest.object.head`) will be sent to the monitoring service.", }, "metrics_monitoring_crn": { Type: schema.TypeString, - Required: true, - Description: "Instance of IBM Cloud Monitoring that will receive the bucket metrics.", + Optional: true, + Description: "When the metrics_monitoring_crn is not populated, then enabled metrics are sent to the monitoring instance associated to the container's location unless otherwise specified in the Metrics Router service configuration.If metrics_monitoring_crn is populated, then enabled events are sent to the Metrics Monitoring instance specified.", }, }, }, @@ -940,7 +946,7 @@ func resourceIBMCOSBucketUpdate(d *schema.ResourceData, meta interface{}) error //BucketName bucketName = d.Get("bucket_name").(string) - bucketPatchModel := new(rcsdk.BucketPatch) + bucketPatchModel := new(resourceconfigurationv1.BucketPatch) if d.HasChange("hard_quota") { hasChanged = true bucketPatchModel.HardQuota = core.Int64Ptr(int64(d.Get("hard_quota").(int))) @@ -948,7 +954,7 @@ func resourceIBMCOSBucketUpdate(d *schema.ResourceData, meta interface{}) error } if d.HasChange("allowed_ip") { - firewall := &rcsdk.Firewall{} + firewall := &resourceconfigurationv1.Firewall{} var ips = make([]string, 0) if ip, ok := d.GetOk("allowed_ip"); ok && ip != nil { for _, i := range ip.([]interface{}) { @@ -963,7 +969,7 @@ func resourceIBMCOSBucketUpdate(d *schema.ResourceData, meta interface{}) error } if d.HasChange("activity_tracking") { - activityTracker := &rcsdk.ActivityTracking{} + activityTracker := &resourceconfigurationv1.ActivityTracking{} if activity, ok := d.GetOk("activity_tracking"); ok { activitylist := activity.([]interface{}) for _, l := range activitylist { @@ -980,10 +986,28 @@ func resourceIBMCOSBucketUpdate(d *schema.ResourceData, meta interface{}) error writeSet := writeEvent.(bool) activityTracker.WriteDataEvents = &writeSet } + if managementEventSet, ok := d.GetOkExists("activity_tracking.0.management_events"); ok { + managementEventValue := managementEventSet.(bool) + activityTracker.ManagementEvents = &managementEventValue + } - //crn - Required field - crn := activityMap["activity_tracker_crn"].(string) - activityTracker.ActivityTrackerCrn = &crn + //crn - Optional field + + oldATCrnValue, newATCrnValue := d.GetChange("activity_tracking.0.activity_tracker_crn") + if newATCrnValue != "" { + if activityMap["activity_tracker_crn"] != nil { + crnSet := activityMap["activity_tracker_crn"] + crnstring := crnSet.(string) + if crnstring != "" { + crn := activityMap["activity_tracker_crn"].(string) + activityTracker.ActivityTrackerCrn = &crn + } + + } + } else if oldATCrnValue != "" && newATCrnValue == "" { + println("this is upgrading to new config") + activityTracker.ActivityTrackerCrn = aws.String("") + } } } hasChanged = true @@ -992,25 +1016,37 @@ func resourceIBMCOSBucketUpdate(d *schema.ResourceData, meta interface{}) error } if d.HasChange("metrics_monitoring") { - metricsMonitoring := &rcsdk.MetricsMonitoring{} + metricsMonitoring := &resourceconfigurationv1.MetricsMonitoring{} if metrics, ok := d.GetOk("metrics_monitoring"); ok { metricslist := metrics.([]interface{}) for _, l := range metricslist { metricsMap, _ := l.(map[string]interface{}) //metrics enabled - as its optional check for existence - if metricsSet := metricsMap["usage_metrics_enabled"]; metricsSet != nil { - metrics := metricsSet.(bool) + if metricsUsageSet := metricsMap["usage_metrics_enabled"]; metricsUsageSet != nil { + metrics := metricsUsageSet.(bool) metricsMonitoring.UsageMetricsEnabled = &metrics } // request metrics enabled - as its optional check for existence - if metricsSet := metricsMap["request_metrics_enabled"]; metricsSet != nil { - metrics := metricsSet.(bool) + if metricsRequestSet := metricsMap["request_metrics_enabled"]; metricsRequestSet != nil { + metrics := metricsRequestSet.(bool) metricsMonitoring.RequestMetricsEnabled = &metrics } - //crn - Required field - crn := metricsMap["metrics_monitoring_crn"].(string) - metricsMonitoring.MetricsMonitoringCrn = &crn + //crn - optional field + oldMMCrnValue, newMMCrnValue := d.GetChange("metrics_monitoring.0.metrics_monitoring_crn") + if newMMCrnValue != "" { + if metricsMap["metrics_monitoring_crn"] != nil { + crnSet := metricsMap["metrics_monitoring_crn"] + crnstring := crnSet.(string) + if crnstring != "" { + crn := crnSet.(string) + metricsMonitoring.MetricsMonitoringCrn = &crn + } + } + } else if oldMMCrnValue != "" && newMMCrnValue == "" { + println("Setting the metricsMonitoring crn as null") + metricsMonitoring.MetricsMonitoringCrn = aws.String("") + } } } hasChanged = true @@ -1023,10 +1059,10 @@ func resourceIBMCOSBucketUpdate(d *schema.ResourceData, meta interface{}) error if asPatchErr != nil { return fmt.Errorf("[ERROR] Error Update COS Bucket: %s\n%s", err, bucketPatchModelAsPatch) } - setOptions := new(rcsdk.UpdateBucketConfigOptions) - setOptions.SetBucket(bucketName) - setOptions.BucketPatch = bucketPatchModelAsPatch - response, err := sess.UpdateBucketConfig(setOptions) + updateBucketConfig := new(resourceconfigurationv1.UpdateBucketConfigOptions) + updateBucketConfig.Bucket = &bucketName + updateBucketConfig.BucketPatch = bucketPatchModelAsPatch + response, err := sess.UpdateBucketConfig(updateBucketConfig) if err != nil { return fmt.Errorf("[ERROR] Error Update COS Bucket: %s\n%s", err, response) } @@ -1172,9 +1208,9 @@ func resourceIBMCOSBucketRead(d *schema.ResourceData, meta interface{}) error { sess.SetServiceURL(satconfig) } - getOptions := new(rcsdk.GetBucketConfigOptions) - getOptions.SetBucket(bucketName) - bucketPtr, response, err := sess.GetBucketConfig(getOptions) + getBucketConfig := new(resourceconfigurationv1.GetBucketConfigOptions) + getBucketConfig.Bucket = &bucketName + bucketPtr, response, err := sess.GetBucketConfig(getBucketConfig) if err != nil { return fmt.Errorf("[ERROR] Error in getting bucket info rule: %s\n%s", err, response) } @@ -1377,6 +1413,9 @@ func resourceIBMCOSBucketCreate(d *schema.ResourceData, meta interface{}) error create = &s3.CreateBucketInput{ Bucket: aws.String(bucketName), ObjectLockEnabledForBucket: aws.Bool(true), + CreateBucketConfiguration: &s3.CreateBucketConfiguration{ + LocationConstraint: aws.String(lConstraint), + }, } } else { create = &s3.CreateBucketInput{ diff --git a/ibm/service/cos/resource_ibm_cos_bucket_object_test.go b/ibm/service/cos/resource_ibm_cos_bucket_object_test.go index 648ecb82137..e46753b93f3 100644 --- a/ibm/service/cos/resource_ibm_cos_bucket_object_test.go +++ b/ibm/service/cos/resource_ibm_cos_bucket_object_test.go @@ -179,7 +179,7 @@ func TestAccIBMCOSBucketObjectlock_Retention_Without_Mode(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccIBMCOSBucketObjectlock_retention_without_mode(name, instanceCRN, objectBody, retainUntilDateString), - ExpectError: regexp.MustCompile("MalformedXML: The XML you provided was not well-formed or did not validate against our published schema."), + ExpectError: regexp.MustCompile("Error: Missing required argument"), }, }, }) @@ -267,7 +267,7 @@ func TestAccIBMCOSBucketObjectlock_Retention_Without_Retainuntildate(t *testing. Steps: []resource.TestStep{ { Config: testAccIBMCOSBucketObjectlock_Retention_Without_Retainuntildate(name, instanceCRN, objectBody, mode), - ExpectError: regexp.MustCompile("MalformedXML: The XML you provided was not well-formed or did not validate against our published schema."), + ExpectError: regexp.MustCompile("Error: Missing required argument"), }, }, }) diff --git a/ibm/service/cos/resource_ibm_cos_bucket_objectlock_configuration_test.go b/ibm/service/cos/resource_ibm_cos_bucket_objectlock_configuration_test.go index ab8f8a18128..41e9daada6d 100644 --- a/ibm/service/cos/resource_ibm_cos_bucket_objectlock_configuration_test.go +++ b/ibm/service/cos/resource_ibm_cos_bucket_objectlock_configuration_test.go @@ -37,6 +37,33 @@ func TestAccIBMCosBucket_Objectlock_Bucket_Enabled(t *testing.T) { }) } +func TestAccIBMCosBucket_Objectlock_Bucket_Enabled_Smart_tier_bucket(t *testing.T) { + serviceName := fmt.Sprintf("terraform_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("terraform-smart-tier-ol%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us" + bucketClass := "smart" + bucketRegionType := "cross_region_location" + objectLockEnabled := true + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_Objectlock_Bucket_Enabled(serviceName, bucketName, bucketRegionType, bucketRegion, bucketClass, objectLockEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance", "ibm_cos_bucket.bucket", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket", "cross_region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket", "object_versioning.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket", "object_lock", "true"), + ), + }, + }, + }) +} + func TestAccIBMCosBucket_Objectlock_Configuration_Without_Rule(t *testing.T) { serviceName := fmt.Sprintf("terraform_%d", acctest.RandIntRange(10, 100)) bucketName := fmt.Sprintf("terraform%d", acctest.RandIntRange(10, 100)) diff --git a/ibm/service/cos/resource_ibm_cos_bucket_test.go b/ibm/service/cos/resource_ibm_cos_bucket_test.go index bda0f1da884..a6e68398350 100644 --- a/ibm/service/cos/resource_ibm_cos_bucket_test.go +++ b/ibm/service/cos/resource_ibm_cos_bucket_test.go @@ -173,15 +173,686 @@ func TestAccIBMCosBucket_Direct(t *testing.T) { }, }) } -func TestAccIBMCosBucket_ActivityTracker_Monitor(t *testing.T) { + +// *** F1881 Activity tracker test cases *** +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_False_ActivityTrackerCrn_NotSet_ManagementEvents_False(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := false + managementEvents := false + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "false"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_True_ActivityTrackerCrn_NotSet_ManagementEvents_False(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := true + managementEvents := false + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "false"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_False_ActivityTrackerCrn_NotSet_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := false + managementEvents := true + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_True_ActivityTrackerCrn_NotSet_ManagementEvents_False(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := true + managementEvents := false + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "false"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_False_ActivityTrackerCrn_NotSet_ManagementEvents_False(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := false + managementEvents := false + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "false"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_False_ActivityTrackerCrn_NotSet_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := false + managementEvents := true + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_True_ActivityTrackerCrn_NotSet_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := true + managementEvents := true + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_True_ActivityTrackerCrn_NotSet_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := true + managementEvents := true + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + ), + }, + }, + }) +} + +// *** with crn *** + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_False_ActivityTrackerCrn_Set_ManagementEvents_Not_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := false + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn_ManagementEvents_NotSet(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_True_ActivityTrackerCrn_Set_ManagementEvents_Not_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := true + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn_ManagementEvents_NotSet(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_True_ActivityTrackerCrn_Set_ManagementEvents_Not_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := true + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn_ManagementEvents_NotSet(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_False_ActivityTrackerCrn_Set_ManagementEvents_Not_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := false + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn_ManagementEvents_NotSet(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_False_ActivityTrackerCrn_Set_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := false + managementEvents := true + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_True_ActivityTrackerCrn_Set_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := true + managementEvents := true + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_True_ActivityTrackerCrn_Set_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := true + managementEvents := true + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_False_ActivityTrackerCrn_Set_ManagementEvents_True(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := false + managementEvents := true + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents, managementEvents), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + ), + }, + }, + }) +} +func TestAccIBMCosBucket_ActivityTracker_Read_False_Write_False_ManagementEvents_False_ActivityTrackerCrn_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := false + writeDataEvents := false + managementEvents := false + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, activityTrackerInstanceCRN, readDataEvents, writeDataEvents, managementEvents), + ExpectError: regexp.MustCompile("Error Update COS Bucket: Cannot have an Activity Tracking CRN without opting for management events"), + }, + }, + }) +} +func TestAccIBMCosBucket_Upload_Object_Activity_Tracker_Enabled_With_CRN(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + key := fmt.Sprintf("tf-testacc-cos-%d", acctest.RandIntRange(10, 100)) + bucketRegionType := "region_location" + objectBody := "Acceptance Testing" + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_Upload_Object_Activity_Tracker_Enabled_With_CRN(cosServiceName, activityTrackerInstanceCRN, bucketName, bucketRegionType, bucketRegion, bucketClass, key, objectBody), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.activity_tracker_crn", activityTrackerInstanceCRN), + resource.TestCheckResourceAttr("ibm_cos_bucket_object.testacc", "body", objectBody), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_Upload_Object_Activity_Tracker_Enabled_Without_CRN(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + key := fmt.Sprintf("tf-testacc-cos-%d", acctest.RandIntRange(10, 100)) + bucketRegionType := "region_location" + objectBody := "Acceptance Testing" + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_upload_Object_Activity_Tracker_Enabled_Without_CRN(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, key, objectBody), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.read_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.write_data_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.0.management_events", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket_object.testacc", "body", objectBody), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_Invalid_Write_Invalid_ManagementEvents_Invalid_With_Crn(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + activityTrackerInstanceCRN := acc.ActivityTrackerInstanceCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_Read_Invalid_Write_Invalid_ManagementEvents_Invalid_With_Crn(cosServiceName, activityTrackerInstanceCRN, bucketName, bucketRegionType, bucketRegion, bucketClass), + ExpectError: regexp.MustCompile("Error: Incorrect attribute value type"), + }, + }, + }) +} + +func TestAccIBMCosBucket_ActivityTracker_Read_True_Write_True_ManagementEvents_True_With_Crn_Invalid(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + readDataEvents := true + writeDataEvents := true + managementEvents := true + crnValue := "Invalid" + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_activityTracker_With_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, crnValue, readDataEvents, writeDataEvents, managementEvents), + ExpectError: regexp.MustCompile("Error Update COS Bucket: Malformed activity tracker CRN"), + }, + }, + }) +} + +//Metrics monitoring test cases: + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_True_UsageEnabled_False_MonitoringCrn_NotSet(t *testing.T) { cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) - activityServiceName := fmt.Sprintf("activity_tracker_%d", acctest.RandIntRange(10, 100)) - monitorServiceName := fmt.Sprintf("metrics_monitor_%d", acctest.RandIntRange(10, 100)) bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) - bucketRegion := "ams03" + bucketRegion := "us-south" bucketClass := "standard" - bucketRegionType := "single_site_location" + bucketRegionType := "region_location" + requestEnabled := true + usageEnabled := false resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -189,31 +860,377 @@ func TestAccIBMCosBucket_ActivityTracker_Monitor(t *testing.T) { CheckDestroy: testAccCheckIBMCosBucketDestroy, Steps: []resource.TestStep{ { - Config: testAccCheckIBMCosBucket_activityTracker_monitor(cosServiceName, activityServiceName, monitorServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass), + Config: testAccCheckIBMCosBucket_metricsMonitoring_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), - resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "single_site_location", bucketRegion), - resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "false"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_False_UsageEnabled_True_MonitoringCrn_NotSet(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + requestEnabled := false + usageEnabled := true + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "true"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_True_UsageEnabled_True_MonitoringCrn_NotSet(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + requestEnabled := true + usageEnabled := true + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "true"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_False_UsageEnabled_False_MonitoringCrn_NotSet(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + requestEnabled := false + usageEnabled := false + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "false"), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_True_UsageEnabled_False_MonitoringCrn_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + requestEnabled := true + usageEnabled := false + metricsMonitoringCrn := acc.MetricsMonitoringCRN + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.metrics_monitoring_crn", metricsMonitoringCrn), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_False_UsageEnabled_True_MonitoringCrn_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + requestEnabled := false + usageEnabled := true + metricsMonitoringCrn := acc.MetricsMonitoringCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.metrics_monitoring_crn", metricsMonitoringCrn), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_True_UsageEnabled_True_MonitoringCrn_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + requestEnabled := true + usageEnabled := true + metricsMonitoringCrn := acc.MetricsMonitoringCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.metrics_monitoring_crn", metricsMonitoringCrn), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_RequestEnabled_False_UsageEnabled_False_MonitoringCrn_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + requestEnabled := false + usageEnabled := false + metricsMonitoringCrn := acc.MetricsMonitoringCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, bucketRegionType, bucketRegion, bucketClass, requestEnabled, usageEnabled), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "false"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.metrics_monitoring_crn", metricsMonitoringCrn), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_Upload_Object_RequestMetrics_True_UsageMetrics_True_MonitoringCrn_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + key := fmt.Sprintf("tf-testacc-cos-%d", acctest.RandIntRange(10, 100)) + objectBody := "Acceptance Testing" + metricsMonitoringCrn := acc.MetricsMonitoringCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_Upload_Object_RequestMetrics_True_UsageMetrics_True_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, bucketRegionType, bucketRegion, bucketClass, key, objectBody), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.metrics_monitoring_crn", metricsMonitoringCrn), + ), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_Upload_Object_RequestMetrics_True_UsageMetrics_True_Without_Crn(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + key := fmt.Sprintf("tf-testacc-cos-%d", acctest.RandIntRange(10, 100)) + objectBody := "Acceptance Testing" + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_Upload_Object_RequestMetrics_True_UsageMetrics_True_Without_Crn(cosServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass, key, objectBody), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "true"), + resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "true"), ), }, + }, + }) +} +func TestAccIBMCosBucket_MetricsMonitoring_RequestMetrics_Invalid_UsageMetrics_Invalid_MonitoringCrn_Set(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + metricsMonitoringCrn := acc.MetricsMonitoringCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMCosBucket_metricsMonitoring_RequestMetrics_Invalid_UsageMetrics_Invalid_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, bucketRegionType, bucketRegion, bucketClass), + ExpectError: regexp.MustCompile("Error: Incorrect attribute value type"), + }, + }, + }) +} + +func TestAccIBMCosBucket_MetricsMonitoring_Crn_Invalid(t *testing.T) { + + cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) + bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) + bucketRegion := "us-south" + bucketClass := "standard" + bucketRegionType := "region_location" + metricsMonitoringCrn := acc.MetricsMonitoringCRN + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMCosBucketDestroy, + Steps: []resource.TestStep{ { - Config: testAccCheckIBMCosBucket_update_activityTracker_monitor(cosServiceName, activityServiceName, monitorServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), - resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), - resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), - resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "single_site_location", bucketRegion), - resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "activity_tracking.#", "0"), - resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "0"), - ), + Config: testAccCheckIBMCosBucket_metricsMonitoring_Crn_Invalid(cosServiceName, metricsMonitoringCrn, bucketName, bucketRegionType, bucketRegion, bucketClass), + ExpectError: regexp.MustCompile("Error Update COS Bucket: Malformed Monitoring CRN."), }, }, }) } +// func TestAccIBMCosBucket_MetricsMonitoring_New_Instance(t *testing.T) { + +// cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) +// bucketName := fmt.Sprintf("tf-bucket%d", acctest.RandIntRange(10, 100)) +// bucketRegion := "us-south" +// bucketClass := "standard" +// bucketRegionType := "region_location" +// monitorServiceName := fmt.Sprintf("metrics_monitor_%d", acctest.RandIntRange(10, 100)) +// resource.Test(t, resource.TestCase{ +// PreCheck: func() { acc.TestAccPreCheck(t) }, +// Providers: acc.TestAccProviders, +// CheckDestroy: testAccCheckIBMCosBucketDestroy, +// Steps: []resource.TestStep{ +// { +// Config: testAccCheckIBMCosBucket_metricsMonitoring_RequestMetrics_New_Instance(cosServiceName, monitorServiceName, bucketName, bucketRegionType, bucketRegion, bucketClass), +// Check: resource.ComposeAggregateTestCheckFunc( +// testAccCheckIBMCosBucketExists("ibm_resource_instance.instance2", "ibm_cos_bucket.bucket2", bucketRegionType, bucketRegion, bucketName), +// resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "bucket_name", bucketName), +// resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "storage_class", bucketClass), +// resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "region_location", bucketRegion), +// resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.#", "1"), +// resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.request_metrics_enabled", "true"), +// resource.TestCheckResourceAttr("ibm_cos_bucket.bucket2", "metrics_monitoring.0.usage_metrics_enabled", "true"), +// ), +// }, +// }, +// }) +// } + +// *** f1881 tests cases end *** + func TestAccIBMCosBucket_Archive_Expiration(t *testing.T) { cosServiceName := fmt.Sprintf("cos_instance_%d", acctest.RandIntRange(10, 100)) @@ -1663,7 +2680,9 @@ func testAccCheckIBMCosBucket_updateWithSameName(serviceName string, bucketName `, serviceName, bucketName, storageClass, region) } -func testAccCheckIBMCosBucket_activityTracker_monitor(cosServiceName, activityServiceName, monitorServiceName, bucketName, regiontype, region, storageClass string) string { +// f1881 + +func testAccCheckIBMCosBucket_activityTracker_Without_Crn(cosServiceName string, bucketName string, regiontype string, region string, storageClass string, readDataEvents bool, writeDataEvents bool, managementEvents bool) string { return fmt.Sprintf(` @@ -1677,84 +2696,392 @@ func testAccCheckIBMCosBucket_activityTracker_monitor(cosServiceName, activitySe plan = "standard" location = "global" } - resource "ibm_resource_instance" "activity_tracker2" { + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + activity_tracking { + read_data_events = %v + write_data_events = %v + management_events = %v + } + } + `, cosServiceName, bucketName, region, storageClass, readDataEvents, writeDataEvents, managementEvents) +} + +func testAccCheckIBMCosBucket_activityTracker_With_Crn(cosServiceName string, bucketName string, regiontype string, region string, storageClass string, activityTrackerCRN string, readDataEvents bool, writeDataEvents bool, managementEvents bool) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { name = "%s" resource_group_id = data.ibm_resource_group.cos_group.id - service = "logdnaat" - plan = "7-day" - location = "us-south" + service = "cloud-object-storage" + plan = "standard" + location = "global" } - resource "ibm_resource_instance" "metrics_monitor2" { + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + activity_tracking { + read_data_events = %v + write_data_events = %v + management_events = %v + activity_tracker_crn = "%s" + } + } + `, cosServiceName, bucketName, region, storageClass, readDataEvents, writeDataEvents, managementEvents, activityTrackerCRN) +} + +func testAccCheckIBMCosBucket_activityTracker_With_Crn_ManagementEvents_NotSet(cosServiceName string, bucketName string, regiontype string, region string, storageClass string, activityTrackerCRN string, readDataEvents bool, writeDataEvents bool) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { name = "%s" resource_group_id = data.ibm_resource_group.cos_group.id - service = "sysdig-monitor" - plan = "graduated-tier" - location = "us-south" - parameters = { - default_receiver = true + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + activity_tracking { + read_data_events = %v + write_data_events = %v + activity_tracker_crn = "%s" + } + } + `, cosServiceName, bucketName, region, storageClass, readDataEvents, writeDataEvents, activityTrackerCRN) +} + +func testAccCheckIBMCosBucket_activityTracker_Read_Invalid_Write_Invalid_ManagementEvents_Invalid_With_Crn(cosServiceName, activityTrackerCRN, bucketName, regiontype, region, storageClass string) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { + name = "%s" + resource_group_id = data.ibm_resource_group.cos_group.id + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + activity_tracking { + read_data_events = "invalid" + write_data_events = "invalid" + management_events = "invalid" + activity_tracker_crn = "%s" + } + } + `, cosServiceName, bucketName, region, storageClass, activityTrackerCRN) +} + +func testAccCheckIBMCosBucket_Upload_Object_Activity_Tracker_Enabled_With_CRN(cosServiceName, activityTrackerCRN, bucketName, regiontype, region, storageClass, key, object_body string) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { + name = "%s" + resource_group_id = data.ibm_resource_group.cos_group.id + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + activity_tracking { + read_data_events = true + write_data_events = true + management_events = true + activity_tracker_crn = "%s" } + } + resource "ibm_cos_bucket_object" "testacc" { + bucket_crn = ibm_cos_bucket.bucket2.crn + bucket_location = ibm_cos_bucket.bucket2.region_location + key = "%s.txt" + content = "%s" + } + `, cosServiceName, bucketName, region, storageClass, activityTrackerCRN, key, object_body) +} + +func testAccCheckIBMCosBucket_upload_Object_Activity_Tracker_Enabled_Without_CRN(cosServiceName, bucketName, regiontype, region, storageClass, key, object_body string) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { + name = "%s" + resource_group_id = data.ibm_resource_group.cos_group.id + service = "cloud-object-storage" + plan = "standard" + location = "global" } resource "ibm_cos_bucket" "bucket2" { bucket_name = "%s" resource_instance_id = ibm_resource_instance.instance2.id - single_site_location = "%s" + region_location = "%s" storage_class = "%s" activity_tracking { read_data_events = true - write_data_events = true - activity_tracker_crn = ibm_resource_instance.activity_tracker2.id + write_data_events = true + management_events = true + } + } + resource "ibm_cos_bucket_object" "testacc" { + bucket_crn = ibm_cos_bucket.bucket2.crn + bucket_location = ibm_cos_bucket.bucket2.region_location + key = "%s.txt" + content = "%s" + } + `, cosServiceName, bucketName, region, storageClass, key, object_body) +} + +func testAccCheckIBMCosBucket_metricsMonitoring_Without_Crn(cosServiceName, bucketName, regiontype, region, storageClass string, requestMetricsEnabled, usageMetricsEnabled bool) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { + name = "%s" + resource_group_id = data.ibm_resource_group.cos_group.id + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + metrics_monitoring { + request_metrics_enabled = %v + usage_metrics_enabled = %v } + } + `, cosServiceName, bucketName, region, storageClass, requestMetricsEnabled, usageMetricsEnabled) +} + +func testAccCheckIBMCosBucket_metricsMonitoring_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, regiontype, region, storageClass string, requestMetricsEnabled, usageMetricsEnabled bool) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { + name = "%s" + resource_group_id = data.ibm_resource_group.cos_group.id + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" metrics_monitoring { - usage_metrics_enabled = true - request_metrics_enabled = true - metrics_monitoring_crn = ibm_resource_instance.metrics_monitor2.id + request_metrics_enabled = %v + usage_metrics_enabled = %v + metrics_monitoring_crn = "%s" } } - `, cosServiceName, activityServiceName, monitorServiceName, bucketName, region, storageClass) + `, cosServiceName, bucketName, region, storageClass, requestMetricsEnabled, usageMetricsEnabled, metricsMonitoringCrn) } -func testAccCheckIBMCosBucket_update_activityTracker_monitor(cosServiceName, activityServiceName, monitorServiceName, bucketName, regiontype, region, storageClass string) string { +func testAccCheckIBMCosBucket_metricsMonitoring_RequestMetrics_Invalid_UsageMetrics_Invalid_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, regiontype, region, storageClass string) string { + + return fmt.Sprintf(` - return fmt.Sprintf(` data "ibm_resource_group" "cos_group" { is_default=true - } - - resource "ibm_resource_instance" "instance2" { + } + resource "ibm_resource_instance" "instance2" { name = "%s" resource_group_id = data.ibm_resource_group.cos_group.id service = "cloud-object-storage" plan = "standard" location = "global" } - - resource "ibm_resource_instance" "activity_tracker2" { + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + metrics_monitoring { + usage_metrics_enabled = "invalid" + request_metrics_enabled = "invalid" + metrics_monitoring_crn = "%s" + } + } + `, cosServiceName, bucketName, region, storageClass, metricsMonitoringCrn) +} + +func testAccCheckIBMCosBucket_metricsMonitoring_Crn_Invalid(cosServiceName, metricsMonitoringCrn, bucketName, regiontype, region, storageClass string) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { name = "%s" resource_group_id = data.ibm_resource_group.cos_group.id - service = "logdnaat" - plan = "7-day" - location = "us-south" - } - - resource "ibm_resource_instance" "metrics_monitor2" { + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + metrics_monitoring { + usage_metrics_enabled = true + request_metrics_enabled = true + metrics_monitoring_crn = "invalid" + } + } + `, cosServiceName, bucketName, region, storageClass) +} + +func testAccCheckIBMCosBucket_metricsMonitoring_Upload_Object_RequestMetrics_True_UsageMetrics_True_With_Crn(cosServiceName, metricsMonitoringCrn, bucketName, regiontype, region, storageClass, key, objectBody string) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { name = "%s" resource_group_id = data.ibm_resource_group.cos_group.id - service = "sysdig-monitor" - plan = "graduated-tier" - location = "us-south" - parameters = { - default_receiver = true + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { + bucket_name = "%s" + resource_instance_id = ibm_resource_instance.instance2.id + region_location = "%s" + storage_class = "%s" + metrics_monitoring { + usage_metrics_enabled = true + request_metrics_enabled = true + metrics_monitoring_crn = "%s" } - } - resource "ibm_cos_bucket" "bucket2" { + } + resource "ibm_cos_bucket_object" "testacc" { + bucket_crn = ibm_cos_bucket.bucket2.crn + bucket_location = ibm_cos_bucket.bucket2.region_location + key = "%s.txt" + content = "%s" + } + `, cosServiceName, bucketName, region, storageClass, metricsMonitoringCrn, key, objectBody) +} + +func testAccCheckIBMCosBucket_metricsMonitoring_Upload_Object_RequestMetrics_True_UsageMetrics_True_Without_Crn(cosServiceName, bucketName, regiontype, region, storageClass, key, objectBody string) string { + + return fmt.Sprintf(` + + data "ibm_resource_group" "cos_group" { + is_default=true + } + resource "ibm_resource_instance" "instance2" { + name = "%s" + resource_group_id = data.ibm_resource_group.cos_group.id + service = "cloud-object-storage" + plan = "standard" + location = "global" + } + resource "ibm_cos_bucket" "bucket2" { bucket_name = "%s" resource_instance_id = ibm_resource_instance.instance2.id - single_site_location = "%s" + region_location = "%s" storage_class = "%s" - } - `, cosServiceName, activityServiceName, monitorServiceName, bucketName, region, storageClass) + metrics_monitoring { + usage_metrics_enabled = true + request_metrics_enabled = true + } + } + resource "ibm_cos_bucket_object" "testacc" { + bucket_crn = ibm_cos_bucket.bucket2.crn + bucket_location = ibm_cos_bucket.bucket2.region_location + key = "%s.txt" + content = "%s" + } + `, cosServiceName, bucketName, region, storageClass, key, objectBody) } +// func testAccCheckIBMCosBucket_metricsMonitoring_RequestMetrics_New_Instance(cosServiceName, metricsMonitoringName, bucketName, regiontype, region, storageClass string) string { + +// return fmt.Sprintf(` + +// data "ibm_resource_group" "cos_group" { +// is_default=true +// } +// resource "ibm_resource_instance" "instance2" { +// name = "%s" +// resource_group_id = data.ibm_resource_group.cos_group.id +// service = "cloud-object-storage" +// plan = "standard" +// location = "global" +// } +// resource "ibm_resource_instance" "metrics_monitor2" { +// name = "%s" +// resource_group_id = data.ibm_resource_group.cos_group.id +// service = "sysdig-monitor" +// plan = "graduated-tier" +// location = "us-south" +// parameters = { +// default_receiver = true +// } +// } +// resource "ibm_cos_bucket" "bucket2" { +// bucket_name = "%s" +// resource_instance_id = ibm_resource_instance.instance2.id +// region_location = "%s" +// storage_class = "%s" +// metrics_monitoring { +// usage_metrics_enabled = true +// request_metrics_enabled = true +// metrics_monitoring_crn = ibm_resource_instance.metrics_monitor2.id +// } +// } +// `, cosServiceName, metricsMonitoringName, bucketName, region, storageClass) +// } +// +// f1881 end func testAccCheckIBMCosBucket_archive(cosServiceName string, bucketName string, regiontype string, region string, storageClass string, ruleId string, enable bool, archiveDays int, ruleType string) string { return fmt.Sprintf(` diff --git a/website/docs/d/cos_bucket.html.markdown b/website/docs/d/cos_bucket.html.markdown index 73a9727d2fa..15d9a767aff 100644 --- a/website/docs/d/cos_bucket.html.markdown +++ b/website/docs/d/cos_bucket.html.markdown @@ -102,7 +102,7 @@ resource "ibm_cos_bucket" "smart-us-south" { # ibm_cos_object_lock_configuration -Retrieves an IBM Cloud Object Storage bucket Object Lock configuration set on the bucket. Allows Object Lock configuration to be updated or deleted. Object Lock cannot be disabled once enabled on a bucket.. +Retrieves an IBM Cloud Object Storage bucket Object Lock configuration set on the bucket. Allows Object Lock configuration to be updated or deleted. Object Lock cannot be disabled once enabled on a bucket. ## Example usage @@ -123,52 +123,55 @@ data "ibm_cos_bucket" "object_lock_bucket" { ## Argument reference Review the argument references that you can specify for your data source. -- `bucket_name` - (Required, String) The name of the bucket. -- `bucket_region` - (Optional, String) The region of the bucket. -- `bucket_type` - (Optional, String) The type of the bucket. Supported values are `single_site_location`, `region_location`, and `cross_region_location`. -- `endpoint_type` - (Optional, String) The type of the endpoint either `public` or `private` or `direct` to be used for the buckets. Default value is `public`. -- `resource_instance_id` - (Required, String) The ID of the IBM Cloud Object Storage service instance for which you want to create a bucket. -- `storage_class`- (Optional, String) Storage class of the bucket. Supported values are `standard`, `vault`, `cold`, `smart` for `standard` and `lite` COS plans, `onerate_active` for `cos-one-rate-plan` COS instance. -- `satellite_location_id` - (Optional, String) satellite location id. Provided by end users. -- `object_lock` - (Optional, String) Specifies Object Lock status. +- `bucket_name` - (Required, string) The name of the bucket. +- `bucket_region` - (Optional, string) The region of the bucket. +- `bucket_type` - (Optional, string) The type of the bucket. Supported values are `single_site_location`, `region_location`, and `cross_region_location`. +- `endpoint_type` - (Optional, string) The type of the endpoint either `public` or `private` or `direct` to be used for the buckets. Default value is `public`. +- `resource_instance_id` - (Required, string) The ID of the IBM Cloud Object Storage service instance for which you want to create a bucket. +- `storage_class`- (Optional, string) Storage class of the bucket. Supported values are `standard`, `vault`, `cold`, `smart` for `standard` and `lite` COS plans, `onerate_active` for `cos-one-rate-plan` COS instance. +- `satellite_location_id` - (Optional, string) satellite location id. Provided by end users. +- `object_lock` - (Optional, string) Specifies Object Lock status. ## Attribute reference In addition to all argument reference list, you can access the following attribute references after your data source is created. -- `allowed_ip`- (String) List of `IPv4` or `IPv6` addresses in CIDR notation to be affected by firewall. +- `allowed_ip`- (string) List of `IPv4` or `IPv6` addresses in CIDR notation to be affected by firewall. - `activity_tracking` (List) Nested block with the following structure. Nested scheme for `activity_tracking`: - - `activity_tracker_crn` - (String) The first time activity_tracking is configured. - - `read_data_events` - (Array) Enables sending log data to Activity Tracker to provide visibility into an object read and write events. - - `write_data_events`- (Bool) If set to **true**, all object write events (that is `uploads`) is sent to Activity Tracker. + - `activity_tracker_crn` - (string)When the `activity_tracker_crn` is not populated, then enabled events are sent to the Activity Tracker instance associated to the container's location unless otherwise specified in the Activity Tracker Event Routing service configuration.If `activity_tracker_crn` is populated, then enabled events are sent to the Activity Tracker instance specified and bucket management events are always enabled. + + - `read_data_events` - (bool) If set to **true**, all object read events (i.e. downloads) will be sent to Activity Tracker. + - `write_data_events`- (bool) If set to **true**, all object write events (that is `uploads`) is sent to Activity Tracker. + - `management_events`- (bool) If set to **true**, all bucket management events will be sent to Activity Tracker.This field only applies if `activity_tracker_crn` is not populated. + - `archive_rule` (List) Nested block with the following structure. Nested scheme for `archive_rule`: - - `days` - (String) Specifies the number of days when the specific rule action takes effect. - - `enable`- (Bool) Specifies archive rule status either `enable` or `disable` for a bucket. - - `rule_id` - (String) Unique identifier for the rule. Archive rules allow you to set a specific time frame after which objects transition to archive. - - `type` - (String) Specifies the storage class or archive type to which you want the object to transition. Supported values are `Glacier` or `Accelerated`. + - `days` - (string) Specifies the number of days when the specific rule action takes effect. + - `enable`- (bool) Specifies archive rule status either `enable` or `disable` for a bucket. + - `rule_id` - (string) Unique identifier for the rule. Archive rules allow you to set a specific time frame after which objects transition to archive. + - `type` - (string) Specifies the storage class or archive type to which you want the object to transition. Supported values are `Glacier` or `Accelerated`. - `abort_incomplete_multipart_upload_days` (List) Nested block with the following structure. Nested scheme for `abort_incomplete_multipart_upload_days`: - `days_after_initiation` - (Integer) Specifies the number of days that govern the automatic cancellation of part upload. Clean up incomplete multi-part uploads after a period of time. Must be a value greater than 0. - - `enable` - (Bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. - - `prefix` - (String) A rule with a prefix will only apply to the objects that match. You can use multiple rules for different actions for different prefixes within the same bucket. - - `rule_id` - (String) Unique identifier for the rule. Rules allow you to set a specific time frame after which objects are deleted. Set Rule ID for cos bucket. -- `crn` - (String) The CRN of the bucket. -- `cross_region_location` - (String) The location to create a cross-regional bucket. + - `enable` - (bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. + - `prefix` - (string) A rule with a prefix will only apply to the objects that match. You can use multiple rules for different actions for different prefixes within the same bucket. + - `rule_id` - (string) Unique identifier for the rule. Rules allow you to set a specific time frame after which objects are deleted. Set Rule ID for cos bucket. +- `crn` - (string) The CRN of the bucket. +- `cross_region_location` - (string) The location to create a cross-regional bucket. - `expire_rule` (List) Nested block with the following structure. Nested scheme for `expire_rule`: - - `days` - (String) Specifies the number of days when the specific rule action takes effect. - - `date` - (String) After the specifies date , the current version of objects in your bucket expires. - - `enable`- (Bool) Specifies expire rule status either `enable` or `disable` for a bucket. - - `expired_object_delete_marker` - (Bool) Expired object delete markers can be automatically cleaned up to improve performance in your bucket. This cannot be used alongside version expiration. - - `prefix` - (String) Specifies a prefix filter to apply to only a subset of objects with names that match the prefix. - - `rule_id` - (String) Unique identifier for the rule. Expire rules allow you to set a specific time frame after which objects are deleted. -- `hard_quota` - (String) Maximum bytes for the bucket. -- `id` - (String) The ID of the bucket. -- `kms_key_crn` - (String) The CRN of the IBM Key Protect instance where a root key is already provisioned. + - `days` - (string) Specifies the number of days when the specific rule action takes effect. + - `date` - (string) After the specifies date , the current version of objects in your bucket expires. + - `enable`- (bool) Specifies expire rule status either `enable` or `disable` for a bucket. + - `expired_object_delete_marker` - (bool) Expired object delete markers can be automatically cleaned up to improve performance in your bucket. This cannot be used alongside version expiration. + - `prefix` - (string) Specifies a prefix filter to apply to only a subset of objects with names that match the prefix. + - `rule_id` - (string) Unique identifier for the rule. Expire rules allow you to set a specific time frame after which objects are deleted. +- `hard_quota` - (string) Maximum bytes for the bucket. +- `id` - (string) The ID of the bucket. +- `kms_key_crn` - (string) The CRN of the IBM Key Protect instance where a root key is already provisioned. **Note:** `key_protect` attribute has been renamed as `kms_key_crn` , hence it is recommended to all the new users to use `kms_key_crn`.Although the support for older attribute name `key_protect` will be continued for existing customers. @@ -176,59 +179,60 @@ In addition to all argument reference list, you can access the following attribu - `metrics_monitoring`- (List) Nested block with the following structure. Nested scheme for `metrics_monitoring`: - - `metrics_monitoring_crn` - (String) The first time `metrics_monitoring` is configured. The instance of IBM Cloud monitoring that will receive the bucket metrics. - - `request_metrics_enabled` - (Bool) If set to `true`, all request metrics `ibm_cos_bucket_all_request` is sent to the monitoring service at 1 minute (`@1mins`) granularity. - - `usage_metrics_enabled`- (Bool) If set to **true**, all usage metrics (that is `bytes_used`) is sent to the monitoring service. + - `metrics_monitoring_crn` - (string)When the `metrics_monitoring_crn` is not populated, then enabled metrics are sent to the monitoring instance associated to the container's location unless otherwise specified in the Metrics Router service configuration.If `metrics_monitoring_crn` is populated, then enabled events are sent to the Metrics Monitoring instance specified. + + - `request_metrics_enabled` - (bool) If set to **true**, all request metrics (i.e. `rest.object.head`) will be sent to the monitoring service.. + - `usage_metrics_enabled`- (bool) If set to **true**, all usage metrics (i.e. `bytes_used`) will be sent to the monitoring service. - `noncurrent_version_expiration` (List) Nested block with the following structure. Nested scheme for `noncurrent_version_expiration`: - - `enable` - (Bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. + - `enable` - (bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. - `noncurrent_days` - (Int) Configuration parameter in your policy that says how long to retain a non-current version before deleting it. Must be greater than 0. - - `prefix` - (String) The rule applies to any objects with keys that match this prefix. You can use multiple rules for different actions for different prefixes within the same bucket. - - `rule_id` - (String) Unique identifier for the rule. Rules allow you to remove versions from objects. Set Rule ID for cos bucket. + - `prefix` - (string) The rule applies to any objects with keys that match this prefix. You can use multiple rules for different actions for different prefixes within the same bucket. + - `rule_id` - (string) Unique identifier for the rule. Rules allow you to remove versions from objects. Set Rule ID for cos bucket. - `object_versioning` - (List) Nestedblock have the following structure: Nested scheme for `object_verionining`: - - `enable` - (String) Specifies versioning status either enable or suspended for the objects in the bucket. -- `region_location` - (String) The location to create a regional bucket. -- `resource_instance_id` - (String) The ID of {site.data.keyword.cos_full_notm}} instance. + - `enable` - (string) Specifies versioning status either enable or suspended for the objects in the bucket. +- `region_location` - (string) The location to create a regional bucket. +- `resource_instance_id` - (string) The ID of {site.data.keyword.cos_full_notm}} instance. - `retention_rule` - (List) Nested block have the following structure: Nested scheme for `retention rule`: - - `default` - (String) default retention period are defined by this policy and apply to all objects in the bucket. - - `maximum` - (String) Specifies maximum duration of time an object can be kept unmodified in the bucket. - - `minimum` - (String) Specifies minimum duration of time an object must be kept unmodified in the bucket. - - `permanent` - (String) Specifies a permanent retention status either enable or disable for a bucket. + - `default` - (string) default retention period are defined by this policy and apply to all objects in the bucket. + - `maximum` - (string) Specifies maximum duration of time an object can be kept unmodified in the bucket. + - `minimum` - (string) Specifies minimum duration of time an object must be kept unmodified in the bucket. + - `permanent` - (string) Specifies a permanent retention status either enable or disable for a bucket. - `replication_rule`- (List) Nested block have the following structure: Nested scheme for `replication_rule`: - - `rule_id`- (String) The rule id. - - `enable`- (Bool) Specifies whether the rule is enabled. Specify true for Enabling it or false for Disabling it. - - `prefix`- (String) An object key name prefix that identifies the subset of objects to which the rule applies. + - `rule_id`- (string) The rule id. + - `enable`- (bool) Specifies whether the rule is enabled. Specify true for Enabling it or false for Disabling it. + - `prefix`- (string) An object key name prefix that identifies the subset of objects to which the rule applies. - `priority`- (Int) A priority is associated with each rule. The rule will be applied in a higher priority if there are multiple rules configured. The higher the number, the higher the priority - - `deletemarker_replication_status`- (Bool) Specifies whether Object storage replicates delete markers. Specify true for Enabling it or false for Disabling it. - - `destination_bucket_crn`- (String) The CRN of your destination bucket that you want to replicate to. + - `deletemarker_replication_status`- (bool) Specifies whether Object storage replicates delete markers. Specify true for Enabling it or false for Disabling it. + - `destination_bucket_crn`- (string) The CRN of your destination bucket that you want to replicate to. - `object_lock_configuration`- (Required, List) Nested block have the following structure: Nested scheme for `object_lock_configuration`: - - `object_lock_enabled`- (String) Indicates whether this bucket has an Object Lock configuration enabled. Defaults to Enabled. Valid values: Enabled. + - `object_lock_enabled`- (string) Indicates whether this bucket has an Object Lock configuration enabled. Defaults to Enabled. Valid values: Enabled. - `object_lock_rule`- (List) Object Lock rule has following arguement: Nested scheme for `object_lock_rule`: - `default_retention`- (Required) Configuration block for specifying the default Object Lock retention settings for new objects placed in the specified bucket Nested scheme for `default_retention`: - - `mode`- (String) Default Object Lock retention mode you want to apply to new objects placed in the specified bucket. Supported values: COMPLIANCE. + - `mode`- (string) Default Object Lock retention mode you want to apply to new objects placed in the specified bucket. Supported values: COMPLIANCE. - `days`- (Int) Specifies number of days after which the object can be deleted from the COS bucket. - `years`- (Int) Specifies number of years after which the object can be deleted from the COS bucket. **Note:** Either days or years should be provided for default retention, both cannot be used simultaneoulsy. - - `website_endpoint` - (String) Website endpoint, if the bucket is configured with a website. If not, this will be an empty string. + - `website_endpoint` - (string) Website endpoint, if the bucket is configured with a website. If not, this will be an empty string. -- `single_site_location` - (String) The location to create a single site bucket. -- `storage_class` - (String) The storage class of the bucket. -- `s3_endpoint_public` - (String) Public endpoint for cos bucket. -- `s3_endpoint_private` - (String) Private endpoint for cos bucket. -- `s3_endpoint_direct` - (String) Direct endpoint for cos bucket. +- `single_site_location` - (string) The location to create a single site bucket. +- `storage_class` - (string) The storage class of the bucket. +- `s3_endpoint_public` - (string) Public endpoint for cos bucket. +- `s3_endpoint_private` - (string) Private endpoint for cos bucket. +- `s3_endpoint_direct` - (string) Direct endpoint for cos bucket. diff --git a/website/docs/r/cos_bucket.html.markdown b/website/docs/r/cos_bucket.html.markdown index 5a939f866da..21485c58065 100644 --- a/website/docs/r/cos_bucket.html.markdown +++ b/website/docs/r/cos_bucket.html.markdown @@ -75,12 +75,11 @@ resource "ibm_cos_bucket" "standard-ams03-firewall" { activity_tracking { read_data_events = true write_data_events = true - activity_tracker_crn = ibm_resource_instance.activity_tracker.id + management_events = true } metrics_monitoring { usage_metrics_enabled = true request_metrics_enabled = true - metrics_monitoring_crn = ibm_resource_instance.metrics_monitor.id } allowed_ip = ["223.196.168.27", "223.196.161.38", "192.168.0.1"] } @@ -93,12 +92,11 @@ resource "ibm_cos_bucket" "smart-us-south-firewall" { activity_tracking { read_data_events = true write_data_events = true - activity_tracker_crn = ibm_resource_instance.activity_tracker.id + management_events = true } metrics_monitoring { usage_metrics_enabled = true request_metrics_enabled = true - metrics_monitoring_crn = ibm_resource_instance.metrics_monitor.id } allowed_ip = ["223.196.168.27", "223.196.161.38", "192.168.0.1"] } @@ -111,12 +109,11 @@ resource "ibm_cos_bucket" "cold-ap-firewall" { activity_tracking { read_data_events = true write_data_events = true - activity_tracker_crn = ibm_resource_instance.activity_tracker.id + management_events = true } metrics_monitoring { usage_metrics_enabled = true request_metrics_enabled = true - metrics_monitoring_crn = ibm_resource_instance.metrics_monitor.id } allowed_ip = ["223.196.168.27", "223.196.161.38", "192.168.0.1"] } @@ -461,40 +458,50 @@ Review the argument references that you can specify for your resource. - `abort_incomplete_multipart_upload_days` (Optional,List) Nested block with the following structure. Nested scheme for `abort_incomplete_multipart_upload_days`: - - `days_after_initiation` - (Optional, Integer) Specifies the number of days that govern the automatic cancellation of part upload. Clean up incomplete multi-part uploads after a period of time. Must be a value greater than 0 and less than 3650. - - `enable` - (Required, Bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. - - `prefix` - (Optional, String) A rule with a prefix will only apply to the objects that match. You can use multiple rules for different actions for different prefixes within the same bucket. - - `rule_id` - (Optional, String) Unique identifier for the rule. Rules allow you to set a specific time frame after which objects are deleted. Set Rule ID for cos bucket. + - `days_after_initiation` - (Optional, integer) Specifies the number of days that govern the automatic cancellation of part upload. Clean up incomplete multi-part uploads after a period of time. Must be a value greater than 0 and less than 3650. + - `enable` - (Required, bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. + - `prefix` - (Optional, string) A rule with a prefix will only apply to the objects that match. You can use multiple rules for different actions for different prefixes within the same bucket. + - `rule_id` - (Optional, string) Unique identifier for the rule. Rules allow you to set a specific time frame after which objects are deleted. Set Rule ID for cos bucket. - `allowed_ip` - (Optional, Array of string) A list of IPv4 or IPv6 addresses in CIDR notation that you want to allow access to your IBM Cloud Object Storage bucket. -- `activity_tracking`- (List of objects) Object to enable auditing with IBM Cloud Activity Tracker - Optional - Configure your IBM Cloud Activity Tracker service instance and the type of events that you want to send to your service to audit activity against your bucket. For a list of supported actions, see [Bucket actions](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-at-events#at-actions-mngt-2). + +- `activity_tracking`- (Object) Enables sending log data to IBM Cloud Activity Tracker to provide visibility into bucket management, object read and write events. + + (Recommended) When the `activity_tracker_crn` is not populated, then enabled events are sent to the Activity Tracker instance at the container's location unless otherwise specified in the ATracker Routing service configuration. + + (Legacy) When the `activity_tracker_crn` is populated, then enabled events are sent to the Activity Tracker instance specified. + + For more information please follow ,[IBM Cloud Activity Tracker](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-at).For a list of supported actions, see [Bucket actions](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-at-events#at-actions-mngt-2). Nested scheme for `activity_tracking`: - - `activity_tracker_crn`- (Required, String) The CRN of your IBM Cloud Activity Tracker service instance that you want to send your events to. This value is required only when you configure your instance for the first time. - - `read_data_events`- (Required, Bool) If set to **true**, all read events against a bucket are sent to your IBM Cloud Activity Tracker service instance. - - `write_data_events`- (Required, Bool) If set to **true**, all write events against a bucket are sent to your IBM Cloud Activity Tracker service instance. + - `activity_tracker_crn`- (Optional, string) When the `activity_tracker_crn` is not populated, then enabled events are sent to the Activity Tracker instance associated to the container's location unless otherwise specified in the Activity Tracker Event Routing service configuration.If `activity_tracker_crn` is populated, then enabled events are sent to the Activity Tracker instance specified and bucket management events are always enabled. + + - `read_data_events`- (Optional, bool) If set to **true**, all object read events (i.e. downloads) will be sent to Activity Tracker. + - `write_data_events`- (Optional, bool) If set to **true**, all object write events (i.e. uploads) will be sent to Activity Tracker. + - `management_events`- (Optional, bool) If set to **true**, all bucket management events will be sent to Activity Tracker.This field only applies if `activity_tracker_crn` is not populated. + - `archive_rule` - (Required, List) Nested archive_rule block has following structure. Nested scheme for `archive_rule`: - - `days` - (Required, Integer) Specifies the number of days when the specific rule action takes effect. - - `enable` - (Required, Bool) Specifies archive rule status either `enable` or `disable` for a bucket. - - `rule_id` - (Optional, Computed, String) The unique ID for the rule. Archive rules allow you to set a specific time frame after the objects transition to the archive. - - `type` - (Required, String) Specifies the storage class or archive type to which you want the object to transition. Allowed values are `Glacier` or `Accelerated`. + - `days` - (Required, integer) Specifies the number of days when the specific rule action takes effect. + - `enable` - (Required, bool) Specifies archive rule status either `enable` or `disable` for a bucket. + - `rule_id` - (Optional, Computed, string) The unique ID for the rule. Archive rules allow you to set a specific time frame after the objects transition to the archive. + - `type` - (Required, string) Specifies the storage class or archive type to which you want the object to transition. Allowed values are `Glacier` or `Accelerated`. **Note:** - Archive is available in certain regions only. For more information, see [Integrated Services](https://cloud.ibm.com/docs/cloud-object-storage/basics?topic=cloud-object-storage-service-availability). - Restoring object once archive is not supported yet. -- `bucket_name` - (Required, String) The name of the bucket. -- `cross_region_location` - (Optional, String) Specify the cross-regional bucket location. Supported values are `us`, `eu`, and `ap`. If you use this parameter, do not set `single_site_location` or `region_location` at the same time. -- `endpoint_type`- (Optional, String) The type of the endpoint either `public` or `private` or `direct` to be used for buckets. Default value is `public`. +- `bucket_name` - (Required, string) The name of the bucket. +- `cross_region_location` - (Optional, string) Specify the cross-regional bucket location. Supported values are `us`, `eu`, and `ap`. If you use this parameter, do not set `single_site_location` or `region_location` at the same time. +- `endpoint_type`- (Optional, string) The type of the endpoint either `public` or `private` or `direct` to be used for buckets. Default value is `public`. - `expire_rule` - (Required, List) An expiration rule deletes objects after a defined period (from the object creation date). see [lifecycle actions](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-versioning). Nested expire_rule block has following structure. Nested scheme for `expire_rule`: - - `days` - (Optional, Integer) Specifies the number of days when the specific rule action takes effect. - - `date` - (Optional, String) After the specifies date , the current version of objects in your bucket expires. - - `enable` - (Required, Bool) Specifies expire rule status either `enable` or `disable` for a bucket. - - `expired_object_delete_marker` - (Optional, String) Expired object delete markers can be automatically cleaned up to improve performance in your bucket. This cannot be used alongside version expiration. This element for the Expiration action which will only remove delete markers that have no non-current versions at all & objects whose only version is a single delete marker. - - `prefix` - (Optional, String) Specifies a prefix filter to apply to only a subset of objects with names that match the prefix. - - `rule_id` - (Optional, Computed, String) Unique ID for the rule. Expire rules allow you to set a specific time frame after which objects are deleted. + - `days` - (Optional, integer) Specifies the number of days when the specific rule action takes effect. + - `date` - (Optional, string) After the specifies date , the current version of objects in your bucket expires. + - `enable` - (Required, bool) Specifies expire rule status either `enable` or `disable` for a bucket. + - `expired_object_delete_marker` - (Optional, string) Expired object delete markers can be automatically cleaned up to improve performance in your bucket. This cannot be used alongside version expiration. This element for the Expiration action which will only remove delete markers that have no non-current versions at all & objects whose only version is a single delete marker. + - `prefix` - (Optional, string) Specifies a prefix filter to apply to only a subset of objects with names that match the prefix. + - `rule_id` - (Optional, Computed, string) Unique ID for the rule. Expire rules allow you to set a specific time frame after which objects are deleted. **Note:** - Both `archive_rule` and `expire_rule` must be managed by Terraform as they use the same lifecycle configuration. If user creates any of the rule outside of Terraform by using command line or console, you can see unexpected difference like removal of any of the rule or one rule overrides another. The policy cannot match as expected due to API limitations, as the lifecycle is a single API request for both archive and expire. @@ -502,36 +509,39 @@ Review the argument references that you can specify for your resource. - expired_object_delete_marker element can not be used in conjunction with other expiry action elements (Days or Date). - The expiry 3 action elements (Days, Date, ExpiredObjectDeleteMarker) are all mutually exclusive.Anyone parameter can apply among 3 (Days, Date, ExpiredObjectDeleteMarker) in expire_rule. - You cannot specify both a Days and ExpiredObjectDeleteMarker tag on the same rule. Specifying the Days tag will automatically perform ExpiredObjectDeleteMarker cleanup once delete markers are old enough to satisfy the age criteria. You can create a separate rule with only the tag ExpiredObjectDeleteMarker to clean up delete markers as soon as they become the only version. -- `force_delete`- (Optional, Bool) As the default value set to **true**, it will delete all the objects in the COS Bucket and then delete the bucket. +- `force_delete`- (Optional, bool) As the default value set to **true**, it will delete all the objects in the COS Bucket and then delete the bucket. **Note:** `force_delete` will timeout on buckets with a large amount of objects. 24 hours before you delete the bucket you can set an expire rule to remove all the files over a day old. -- `hard_quota` - (Optional, Integer) Sets a maximum amount of storage (in bytes) available for a bucket. For more information, check the [cloud documention](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-quota). -- `kms_key_crn` - (Optional, String) The CRN of the IBM Key Protect root key that you want to use to encrypt data that is sent and stored in IBM Cloud Object Storage. Before you can enable IBM Key Protect encryption, you must provision an instance of IBM Key Protect and authorize the service to access IBM Cloud Object Storage. For more information, see [Server-Side Encryption with IBM Key Protect or Hyper Protect Crypto Services (SSE-KP)](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-encryption). +- `hard_quota` - (Optional, integer) Sets a maximum amount of storage (in bytes) available for a bucket. For more information, check the [cloud documention](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-quota). +- `kms_key_crn` - (Optional, string) The CRN of the IBM Key Protect root key that you want to use to encrypt data that is sent and stored in IBM Cloud Object Storage. Before you can enable IBM Key Protect encryption, you must provision an instance of IBM Key Protect and authorize the service to access IBM Cloud Object Storage. For more information, see [Server-Side Encryption with IBM Key Protect or Hyper Protect Crypto Services (SSE-KP)](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-encryption). **Note:** `key_protect` attribute has been renamed as `kms_key_crn` , hence it is recommended to all the new users to use `kms_key_crn`.Although the support for older attribute name `key_protect` will be continued for existing customers. -- `metrics_monitoring`- (Object) to enable metrics tracking with IBM Cloud Monitoring - Optional- Set up your IBM Cloud Monitoring service instance to receive metrics for your IBM Cloud Object Storage bucket. +- `metrics_monitoring`- (Object) Enables sending metrics to IBM Cloud Monitoring. All metrics are opt-in. + + (Recommended) When the `metrics_monitoring_crn` is not populated, then enabled metrics are sent to the Monitoring instance at the container's location unless otherwise specified in the Metrics Router service configuration. + + (Legacy) When the `metrics_monitoring_crn` is populated, then enabled metrics are sent to the Monitoring instance defined in the `metrics_monitoring_crn` field. + For more details check the [IBM Cloud Monitoring](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-mm-cos-integration). Nested scheme for `metrics_monitoring`: - - `metrics_monitoring_crn` - (Required, string) Required the first time `metrics_monitoring` is configured. The instance of IBM Cloud Monitoring receives the bucket metrics. - - `request_metrics_enabled` : (Optional, Bool) If set to **true**, all request metrics `ibm_cos_bucket_all_request` is sent to the monitoring service `@1mins` granulatiy. - - `usage_metrics_enabled` : (Optional, Bool) If set to **true**, all usage metrics that is `bytes_used` is sent to the monitoring service.e. + - `metrics_monitoring_crn` - (Optional, string)When the `metrics_monitoring_crn` is not populated, then enabled metrics are sent to the monitoring instance associated to the container's location unless otherwise specified in the Metrics Router service configuration.If `metrics_monitoring_crn` is populated, then enabled events are sent to the Metrics Monitoring instance specified(Legacy). + + - `request_metrics_enabled` : (Optional, bool) If set to **true**, all request metrics (i.e. `rest.object.head`) will be sent to the monitoring service. + - `usage_metrics_enabled` : (Optional, bool) If set to **true**, all usage metrics (i.e. `bytes_used`) will be sent to the monitoring service. - **Note:** - - Request metrics are supported in all regions and console has the support. For more details check the [cloud documention](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-mm-cos-integration). - - One of the location option must be present. - `noncurrent_version_expiration` - (Required, List) lifecycle has a versioning related expiration action: non-current version expiration. This can remove old versions of objects after they've been non-current for a specified number of days which is specified with a NoncurrentDays parameter on the rule. see [lifecycle actions](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-versioning). Nested noncurrent_version_expiration block has following structure. Nested scheme for `noncurrent_version_expiration`: - - `enable` - (Requried, Bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. - - `noncurrent_days` - (Optional, Integer) Configuration parameter in your policy that says how long to retain a non-current version before deleting it. Must be greater than 0. - - `prefix` - (Optional, String) The rule applies to any objects with keys that match this prefix. You can use multiple rules for different actions for different prefixes within the same bucket. - - `rule_id` - (Optional, String) Unique identifier for the rule. Rules allow you to remove versions from objects. Set Rule ID for cos bucket. + - `enable` - (Requried, bool) A rule can either be `enabled` or `disabled`. A rule is active only when enabled. + - `noncurrent_days` - (Optional, integer) Configuration parameter in your policy that says how long to retain a non-current version before deleting it. Must be greater than 0. + - `prefix` - (Optional, string) The rule applies to any objects with keys that match this prefix. You can use multiple rules for different actions for different prefixes within the same bucket. + - `rule_id` - (Optional, string) Unique identifier for the rule. Rules allow you to remove versions from objects. Set Rule ID for cos bucket. - `object_versioning` - (Object) Object Versioning allows the COS user to keep multiple versions of an object in a bucket to protect against accidental deletion or overwrites. With versioning, you can easily recover from both unintended user actions and application failure. Nested block have the following structure: Nested scheme for `object_versioning`: - - `enable` : (Optional, Bool) Specifies Versioning status either enable or Suspended for the objects in the bucket.Default value set to false. + - `enable` : (Optional, bool) Specifies Versioning status either enable or Suspended for the objects in the bucket.Default value set to false. **Note:** - Versioning allows multiple revisions of a single object to exist in the same bucket. Each version of an object can be queried, read, restored from an archived state, or deleted. @@ -542,25 +552,25 @@ Review the argument references that you can specify for your resource. - Containers with proxy configuration cannot use versioning and vice versa. - SoftLayer accounts cannot use versioning. - Currently, you cannot support `MFA_Delete`, that is a feature to add additional security to version delete. -- `region_location` - (Optional, String) The location of a regional bucket. Supported values are `au-syd`, `eu-de`, `eu-gb`, `jp-tok`, `us-east`, `us-south`, `ca-tor`, `jp-osa`, `br-sao`. If you set this parameter, do not set `single_site_location` or `cross_region_location` at the same time. -- `resource_instance_id` - (Required, String) The ID of the IBM Cloud Object Storage service instance for which you want to create a bucket. +- `region_location` - (Optional, string) The location of a regional bucket. Supported values are `au-syd`, `eu-de`, `eu-gb`, `jp-tok`, `us-east`, `us-south`, `ca-tor`, `jp-osa`, `br-sao`. If you set this parameter, do not set `single_site_location` or `cross_region_location` at the same time. +- `resource_instance_id` - (Required, string) The ID of the IBM Cloud Object Storage service instance for which you want to create a bucket. - `retention_rule` - (List) Nested block have the following structure: Nested scheme for `retention rule`: - - `default` - (Required, Integer) default retention period are defined by this policy and apply to all objects in the bucket. - - `maximum` - (Required, Integer) Specifies maximum duration of time an object that can be kept unmodified in the bucket. - - `minimum` - (Required, Integer) Specifies minimum duration of time an object must be kept unmodified in the bucket. - - `permanent` : (Optional, Bool) Specifies a permanent retention status either enable or disable for a bucket. + - `default` - (Required, integer) default retention period are defined by this policy and apply to all objects in the bucket. + - `maximum` - (Required, integer) Specifies maximum duration of time an object that can be kept unmodified in the bucket. + - `minimum` - (Required, integer) Specifies minimum duration of time an object must be kept unmodified in the bucket. + - `permanent` : (Optional, bool) Specifies a permanent retention status either enable or disable for a bucket. **Note:** - Retention policies cannot be removed. For a new bucket, ensure that you are creating the bucket in a supported region. For more information, see [Integrated Services](https://cloud.ibm.com/docs/cloud-object-storage/basics?topic=cloud-object-storage-service-availability). - The minimum retention period must be less than or equal to the default retention period, that in turn must be less than or equal to the maximum retention period. - Permanent retention can only be enabled at a IBM Cloud Object Storage bucket level with retention policy enabled and users are able to select the permanent retention period option during object uploads. Once enabled, this process can't be reversed and objects uploaded that use a permanent retention period cannot be deleted. It's the responsibility of the users to validate at their end if there's a legitimate need to permanently store objects by using Object Storage buckets with a retention policy. - force deleting the bucket will not work if any object is still under retention. As objects cannot be deleted or overwritten until the retention period has expired and all the legal holds have been removed. -- `single_site_location` - (Optional, String) The location for a single site bucket. Supported values are: `ams03`, `che01`, `hkg02`, `mel01`, `mex01`, `mil01`, `mon01`, `osl01`, `par01`, `sjc04`, `sao01`, `seo01`, `sng01`, and `tor01`. If you set this parameter, do not set `region_location` or `cross_region_location` at the same time. -- `storage_class` - (Optional, String) The storage class that you want to use for the bucket. Supported values are `standard`, `vault`, `cold` and `smart` for `standard` and `lite` COS plans, `onerate_active` for `cos-one-rate-plan` COS plan.For more information, about storage classes, see [Use storage classes](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-classes).`storage_class` should not be used with Satellite location id. -- `satellite_location_id` - (Optional, String) satellite location id. Provided by end users. -- `object_lock` - (Optional, Bool) Enables Object Lock feature on a COS bucket. +- `single_site_location` - (Optional, string) The location for a single site bucket. Supported values are: `ams03`, `che01`, `hkg02`, `mel01`, `mex01`, `mil01`, `mon01`, `osl01`, `par01`, `sjc04`, `sao01`, `seo01`, `sng01`, and `tor01`. If you set this parameter, do not set `region_location` or `cross_region_location` at the same time. +- `storage_class` - (Optional, string) The storage class that you want to use for the bucket. Supported values are `standard`, `vault`, `cold` and `smart` for `standard` and `lite` COS plans, `onerate_active` for `cos-one-rate-plan` COS plan.For more information, about storage classes, see [Use storage classes](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-classes).`storage_class` should not be used with Satellite location id. +- `satellite_location_id` - (Optional, string) satellite location id. Provided by end users. +- `object_lock` - (Optional, bool) Enables Object Lock feature on a COS bucket. **Note:** - To enable Object Lock on a bucket , object_versioning should be enabled. @@ -569,20 +579,20 @@ Review the argument references that you can specify for your resource. ## Attribute reference In addition to all argument reference list, you can access the following attribute reference after your resource is created. -- `crn` - (String) The CRN of the bucket. -- `cross_region_location` - (String) The location if you created a cross-regional bucket. -- `id` - (String) The ID of the bucket. -- `kms_key_crn` - (String) The CRN of the IBM Key Protect instance that you use to encrypt your data in IBM Cloud Object Storage. +- `crn` - (string) The CRN of the bucket. +- `cross_region_location` - (string) The location if you created a cross-regional bucket. +- `id` - (string) The ID of the bucket. +- `kms_key_crn` - (string) The CRN of the IBM Key Protect instance that you use to encrypt your data in IBM Cloud Object Storage. **Note:** `key_protect` attribute has been renamed as `kms_key_crn` , hence it is recommended to all the new users to use `kms_key_crn`.Although the support for older attribute name `key_protect` will be continued for existing customers. -- `region_location` - (String) The location if you created a regional bucket. -- `resource_instance_id` - (String) The ID of IBM Cloud Object Storage instance. -- `single_site_location` - (String) The location if you created a single site bucket. -- `storage_class` - (String) The storage class of the bucket. -- `s3_endpoint_public` - (String) Public endpoint for cos bucket. -- `s3_endpoint_private` - (String) Private endpoint for cos bucket. -- `s3_endpoint_direct` - (String) Direct endpoint for cos bucket. +- `region_location` - (string) The location if you created a regional bucket. +- `resource_instance_id` - (string) The ID of IBM Cloud Object Storage instance. +- `single_site_location` - (string) The location if you created a single site bucket. +- `storage_class` - (string) The storage class of the bucket. +- `s3_endpoint_public` - (string) Public endpoint for cos bucket. +- `s3_endpoint_private` - (string) Private endpoint for cos bucket. +- `s3_endpoint_direct` - (string) Direct endpoint for cos bucket. ## Import IBM COS Bucket The `ibm_cos_bucket` resource can be imported by using the `id`. The ID is formed from the `CRN` (Cloud Resource Name), the `bucket type` which must be `ssl` for single_site_location, `rl` for region_location or `crl` for cross_region_location, and the bucket location. The `CRN` and bucket location can be found on the portal.