diff --git a/examples/ibm-mqcloud/README.md b/examples/ibm-mqcloud/README.md index 05d15097c69..f2b1364e9c7 100644 --- a/examples/ibm-mqcloud/README.md +++ b/examples/ibm-mqcloud/README.md @@ -10,6 +10,7 @@ The following resources are supported: * ibm_mqcloud_truststore_certificate The following data sources are supported: +* ibm_mqcloud_queue_manager_options * ibm_mqcloud_queue_manager * ibm_mqcloud_queue_manager_status * ibm_mqcloud_application @@ -53,7 +54,7 @@ resource "ibm_mqcloud_queue_manager" "mqcloud_queue_manager_instance" { | name | A queue manager name conforming to MQ restrictions. | `string` | true | | display_name | A displayable name for the queue manager - limited only in length. | `string` | false | | location | The locations in which the queue manager could be deployed. | `string` | true | -| size | The queue manager sizes of deployment available. Deployment of lite queue managers for aws_us_east_1 and aws_eu_west_1 locations is not available. | `string` | true | +| size | The queue manager sizes of deployment available. | `string` | true | | version | The MQ version of the queue manager. | `string` | false | #### Outputs @@ -130,6 +131,14 @@ resource "ibm_mqcloud_keystore_certificate" "mqcloud_keystore_certificate_instan queue_manager_id = var.mqcloud_keystore_certificate_queue_manager_id label = var.mqcloud_keystore_certificate_label certificate_file = var.mqcloud_keystore_certificate_certificate_file + + config { + ams { + channels { + name = var.mqcloud_keystore_certificate_config_ams_channel_name + } + } + } } ``` @@ -159,6 +168,7 @@ resource "ibm_mqcloud_keystore_certificate" "mqcloud_keystore_certificate_instan | dns_names_total_count | The total count of dns names. | | dns_names | The list of DNS names. | | href | The URL for this key store certificate. | +| config | The configuration details for this certificate. | | certificate_id | ID of the certificate. | ### Resource: ibm_mqcloud_truststore_certificate @@ -200,6 +210,29 @@ resource "ibm_mqcloud_truststore_certificate" "mqcloud_truststore_certificate_in ## MQ on Cloud data sources +### Data source: ibm_mqcloud_queue_manager_options + +```hcl +data "ibm_mqcloud_queue_manager_options" "mqcloud_queue_manager_options_instance" { + service_instance_guid = var.mqcloud_queue_manager_options_service_instance_guid +} +``` + +#### Inputs + +| Name | Description | Type | Required | +|------|-------------|------|---------| +| service_instance_guid | The GUID that uniquely identifies the MQ on Cloud service instance. | `string` | true | + +#### Outputs + +| Name | Description | +|------|-------------| +| locations | List of deployment locations. | +| sizes | List of queue manager sizes. | +| versions | List of queue manager versions. | +| latest_version | The latest Queue manager version. | + ### Data source: ibm_mqcloud_queue_manager ```hcl diff --git a/examples/ibm-mqcloud/main.tf b/examples/ibm-mqcloud/main.tf index 16dc2df7dc1..ac259b2ffa0 100644 --- a/examples/ibm-mqcloud/main.tf +++ b/examples/ibm-mqcloud/main.tf @@ -5,42 +5,59 @@ provider "ibm" { // Provision mqcloud_queue_manager resource instance resource "ibm_mqcloud_queue_manager" "mqcloud_queue_manager_instance" { service_instance_guid = var.mqcloud_queue_manager_service_instance_guid - name = var.mqcloud_queue_manager_name - display_name = var.mqcloud_queue_manager_display_name - location = var.mqcloud_queue_manager_location - size = var.mqcloud_queue_manager_size - version = var.mqcloud_queue_manager_version + name = var.mqcloud_queue_manager_name + display_name = var.mqcloud_queue_manager_display_name + location = var.mqcloud_queue_manager_location + size = var.mqcloud_queue_manager_size + version = var.mqcloud_queue_manager_version } // Provision mqcloud_application resource instance resource "ibm_mqcloud_application" "mqcloud_application_instance" { service_instance_guid = var.mqcloud_application_service_instance_guid - name = var.mqcloud_application_name + name = var.mqcloud_application_name } // Provision mqcloud_user resource instance resource "ibm_mqcloud_user" "mqcloud_user_instance" { service_instance_guid = var.mqcloud_user_service_instance_guid - name = var.mqcloud_user_name - email = var.mqcloud_user_email + name = var.mqcloud_user_name + email = var.mqcloud_user_email } // Provision mqcloud_keystore_certificate resource instance resource "ibm_mqcloud_keystore_certificate" "mqcloud_keystore_certificate_instance" { service_instance_guid = var.mqcloud_keystore_certificate_service_instance_guid - queue_manager_id = var.mqcloud_keystore_certificate_queue_manager_id - label = var.mqcloud_keystore_certificate_label - certificate_file = var.mqcloud_keystore_certificate_certificate_file + queue_manager_id = var.mqcloud_keystore_certificate_queue_manager_id + label = var.mqcloud_keystore_certificate_label + certificate_file = var.mqcloud_keystore_certificate_certificate_file + + config { + ams { + channels { + name = var.mqcloud_keystore_certificate_config_ams_channel_name + } + } + } } // Provision mqcloud_truststore_certificate resource instance resource "ibm_mqcloud_truststore_certificate" "mqcloud_truststore_certificate_instance" { service_instance_guid = var.mqcloud_truststore_certificate_service_instance_guid - queue_manager_id = var.mqcloud_truststore_certificate_queue_manager_id - label = var.mqcloud_truststore_certificate_label - certificate_file = var.mqcloud_truststore_certificate_certificate_file + queue_manager_id = var.mqcloud_truststore_certificate_queue_manager_id + label = var.mqcloud_truststore_certificate_label + certificate_file = var.mqcloud_truststore_certificate_certificate_file } +// Data source is not linked to a resource instance +// Uncomment if an existing data source instance exists +/* +// Create mqcloud_queue_manager_options data source +data "ibm_mqcloud_queue_manager_options" "mqcloud_queue_manager_options_instance" { + service_instance_guid = var.mqcloud_queue_manager_options_service_instance_guid +} +*/ + // Data source is not linked to a resource instance // Uncomment if an existing data source instance exists /* diff --git a/examples/ibm-mqcloud/variables.tf b/examples/ibm-mqcloud/variables.tf index 66a9dda4ae0..888e2fe82bc 100644 --- a/examples/ibm-mqcloud/variables.tf +++ b/examples/ibm-mqcloud/variables.tf @@ -25,9 +25,9 @@ variable "mqcloud_queue_manager_location" { default = "reserved-eu-de-cluster-f884" } variable "mqcloud_queue_manager_size" { - description = "The queue manager sizes of deployment available. Deployment of lite queue managers for aws_us_east_1 and aws_eu_west_1 locations is not available." + description = "The queue manager sizes of deployment available." type = string - default = "lite" + default = "xsmall" } variable "mqcloud_queue_manager_version" { description = "The MQ version of the queue manager." @@ -56,12 +56,12 @@ variable "mqcloud_user_service_instance_guid" { variable "mqcloud_user_name" { description = "The shortname of the user that will be used as the IBM MQ administrator in interactions with a queue manager for this service instance." type = string - default = "t0scie98o57a" + default = "testuser" } variable "mqcloud_user_email" { description = "The email of the user." type = string - default = "user@example.com" + default = "testuser@ibm.com" } // Resource arguments for mqcloud_keystore_certificate @@ -78,13 +78,18 @@ variable "mqcloud_keystore_certificate_queue_manager_id" { variable "mqcloud_keystore_certificate_label" { description = "The label to use for the certificate to be uploaded." type = string - default = "label" + default = "certlabel" } variable "mqcloud_keystore_certificate_certificate_file" { description = "The filename and path of the certificate to be uploaded." type = string default = "SGVsbG8gd29ybGQ=" } +variable "mqcloud_keystore_certificate_config_ams_channel_name" { + description = "A channel's information that is configured with this certificate." + type = string + default = "CLOUD.APP.SVRCONN" +} // Resource arguments for mqcloud_truststore_certificate variable "mqcloud_truststore_certificate_service_instance_guid" { @@ -100,7 +105,7 @@ variable "mqcloud_truststore_certificate_queue_manager_id" { variable "mqcloud_truststore_certificate_label" { description = "The label to use for the certificate to be uploaded." type = string - default = "label" + default = "certlabel" } variable "mqcloud_truststore_certificate_certificate_file" { description = "The filename and path of the certificate to be uploaded." @@ -108,6 +113,13 @@ variable "mqcloud_truststore_certificate_certificate_file" { default = "SGVsbG8gd29ybGQ=" } +// Data source arguments for mqcloud_queue_manager_options +variable "mqcloud_queue_manager_options_service_instance_guid" { + description = "The GUID that uniquely identifies the MQ on Cloud service instance." + type = string + default = "Service Instance ID" +} + // Data source arguments for mqcloud_queue_manager variable "data_mqcloud_queue_manager_service_instance_guid" { description = "The GUID that uniquely identifies the MQ on Cloud service instance." diff --git a/go.mod b/go.mod index 11fcd222a76..71f0a858c3e 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ 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.0 + 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/ibm-hpcs-tke-sdk v0.0.0-20211109141421-a4b61b05f7d1 @@ -66,7 +66,7 @@ require ( github.com/IBM-Cloud/bluemix-go v0.0.0-20240423071914-9e96525baef4 github.com/IBM/go-sdk-core v1.1.0 github.com/IBM/logs-go-sdk v0.1.1 - github.com/IBM/mqcloud-go-sdk v0.0.4 + github.com/IBM/mqcloud-go-sdk v0.1.0 github.com/IBM/sarama v1.41.2 github.com/IBM/vmware-go-sdk v0.1.2 github.com/stretchr/testify v1.9.0 @@ -77,7 +77,6 @@ require ( require ( cloud.google.com/go/kms v1.10.1 // indirect cloud.google.com/go/monitoring v1.13.0 // indirect - github.com/Bowery/prompt v0.0.0-20190916142128-fa8279994f75 // indirect github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56 // indirect github.com/PromonLogicalis/asn1 v0.0.0-20190312173541-d60463189a56 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect @@ -96,7 +95,6 @@ require ( github.com/coreos/pkg v0.0.0-20220810130054-c7d1c02cb6cf // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dchest/bcrypt_pbkdf v0.0.0-20150205184540-83f37f9c154a // indirect - github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185 // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect github.com/eapache/go-resiliency v1.4.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect @@ -129,7 +127,6 @@ require ( github.com/google/gnostic v0.6.9 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -170,7 +167,6 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/kardianos/govendor v1.0.9 // indirect github.com/klauspost/compress v1.16.7 // indirect github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20221122204822-d1a8c34382f1 // indirect github.com/leodido/go-urn v1.4.0 // indirect @@ -182,8 +178,6 @@ require ( github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/go-wordwrap v1.0.0 // indirect - github.com/mitchellh/gox v1.0.1 // indirect - github.com/mitchellh/iochan v1.0.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/spdystream v0.2.0 // indirect @@ -224,9 +218,6 @@ require ( golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.16.1 // indirect - golang.org/x/tools/cmd/cover v0.1.0-deprecated // indirect - golang.org/x/tools/go/vcs v0.1.0-deprecated // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect @@ -250,7 +241,6 @@ replace github.com/dgrijalva/jwt-go v3.2.0+incompatible => github.com/golang-jwt // add sdk changes. replace github.com/portworx/sched-ops v0.0.0-20200831185134-3e8010dc7056 => github.com/portworx/sched-ops v0.20.4-openstorage-rc3 // required by rook v1.7 - exclude ( github.com/kubernetes-incubator/external-storage v0.20.4-openstorage-rc2 k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible diff --git a/go.sum b/go.sum index bd176292a5d..1acc7793c89 100644 --- a/go.sum +++ b/go.sum @@ -29,11 +29,14 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= cloud.google.com/go/kms v1.10.1 h1:7hm1bRqGCA1GBRQUrp831TwJ9TWhP+tvLuP497CQS2g= cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= cloud.google.com/go/monitoring v1.13.0 h1:2qsrgXGVoRXpP7otZ14eE1I568zAa92sJSDPyOJvwjM= @@ -49,10 +52,12 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/Azure/azure-sdk-for-go v36.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v67.2.0+incompatible h1:Uu/Ww6ernvPTrpq31kITVTIm/I5jlJ1wjtEH/bmSB2k= +github.com/Azure/azure-sdk-for-go v67.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -62,6 +67,7 @@ github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdA github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.6.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.7.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= @@ -70,10 +76,13 @@ github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQW github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/azure/auth v0.4.0/go.mod h1:Oo5cRhLvZteXzI2itUm5ziqsoIxRkzrt3t61FeZaS18= github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 h1:wkAZRgT/pn8HhFyzfe9UnqOjJYqlembgCTi72Bm/xKk= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.12/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= github.com/Azure/go-autorest/autorest/azure/cli v0.3.0/go.mod h1:rNYMNAefZMRowqCV0cVhr/YDW5dD7afFq9nXAXL4ykE= github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 h1:0W/yGmFdTIT77fvdlGZ0LMISoLHFJ7Tx4U0yeB+uFs4= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.5/go.mod h1:ADQAXrkgm7acgWVUNamOgh8YNrv4p27l3Wc55oVfpzg= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= @@ -85,8 +94,10 @@ github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935 github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= +github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= +github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= @@ -94,10 +105,9 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/Bowery/prompt v0.0.0-20190916142128-fa8279994f75 h1:xGHheKK44eC6K0u5X+DZW/fRaR1LnDdqPHMZMWx5fv8= -github.com/Bowery/prompt v0.0.0-20190916142128-fa8279994f75/go.mod h1:4/6eNcqZ09BZ9wLK3tZOjBA1nDj+B0728nlX5YRlSmQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0= +github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= @@ -143,8 +153,8 @@ 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.0 h1:J/8by7r70JmCYqXL/NHFcgpneFAqv16oKMtif+syA14= -github.com/IBM/go-sdk-core/v5 v5.17.0/go.mod h1:GatGZpxlo1KaxiRN6E10/rNgWtUtx1hN/GoHSCaSPKA= +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= @@ -158,8 +168,8 @@ github.com/IBM/keyprotect-go-client v0.14.0 h1:GqgK3BdczA/w7+B1RxEPLya0w9S/ZXi5Y github.com/IBM/keyprotect-go-client v0.14.0/go.mod h1:cAt714Vnwnd03mmkBHHSJlDNRVthdRmJB6RePd4/B8Q= github.com/IBM/logs-go-sdk v0.1.1 h1:aiVnKHJzYcsHvQY58vLB7QbUV/kXcWTpCPqRKC2QS0A= github.com/IBM/logs-go-sdk v0.1.1/go.mod h1:yv/GCXC4/p+MZEeXl4xjZAOMvDAVRwu61WyHZFKFXQM= -github.com/IBM/mqcloud-go-sdk v0.0.4 h1:gqMpoU5a0qJ0GETG4PQrkgeEEoaQLvbxRJnEe6ytvC4= -github.com/IBM/mqcloud-go-sdk v0.0.4/go.mod h1:gQptHC6D+rxfg0muRFFGvTDmvl4YfiDE0uXkaRRewRk= +github.com/IBM/mqcloud-go-sdk v0.1.0 h1:fWt4uisg5GbbsfNmAxx5/6c5gQIPM+VrEsTtnimELeA= +github.com/IBM/mqcloud-go-sdk v0.1.0/go.mod h1:LesMQlKHXvdks4jqQLZH7HfATY5lvTzHuwQU5+y7b2g= github.com/IBM/networking-go-sdk v0.46.1 h1:DnnLR7YDJQRE38/nIeeD7PaKyxpoiIe/aW7NP6bcPHM= github.com/IBM/networking-go-sdk v0.46.1/go.mod h1:yF4XStkswGgVwQVqPUk6b4YTP0dVap52q8HDYwY4gXQ= github.com/IBM/platform-services-go-sdk v0.62.11 h1:EGsiY90bM9M9sSdBVgpsX4QK1z99JZzedVDlrY2gzmc= @@ -187,13 +197,17 @@ github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/ github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56 h1:vuquMR410psHNax14XKNWa0Ae/kYgWJcXi0IFuX60N0= github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56/go.mod h1:Zb3OT4l0mf7P/GOs2w2Ilj5sdm5Whoq3pa24dAEBHFc= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= github.com/Masterminds/sprig/v3 v3.2.1 h1:n6EPaDyLSvCEa3frruQvAiHuNp2dhBlMSmkEr+HuzGc= +github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Microsoft/go-winio v0.4.13/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= @@ -217,6 +231,7 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= +github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= @@ -232,6 +247,7 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5 github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190412020505-60e2075261b6/go.mod h1:T9M45xf79ahXVelWoOBmH0y4aC1t5kXO5BxwyakgIGA= github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190620160927-9418d7b0cd0f/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= github.com/aliyun/alibaba-cloud-sdk-go v1.62.146 h1:zAH0YjWzonbKHvNkfbxqTmX51uHbkQYu+jJah2IAiCA= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.146/go.mod h1:Api2AkmMgGaSUAhmk76oaFObkoeCPc/bKAqcyplPODs= github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= @@ -265,6 +281,7 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= @@ -277,7 +294,9 @@ github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.44.191 h1:GnbkalCx/AgobaorDMFCa248acmk+91+aHBQOk7ljzU= +github.com/aws/aws-sdk-go v1.44.191/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/axiomhq/hyperloglog v0.0.0-20220105174342-98591331716a h1:eqjiAL3qooftPm8b9C1GsSSRcmlw7iOva8vdBTmV2PY= +github.com/axiomhq/hyperloglog v0.0.0-20220105174342-98591331716a/go.mod h1:2stgcRjl6QmW+gU2h5E7BQXg4HU0gzxKWDuT5HviN9s= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -294,8 +313,10 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dR github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/briankassouf/jose v0.9.2-0.20180619214549-d2569464773f/go.mod h1:HQhVmdUf7dBNwIIdBTivnCDxcf6IZY3/zrb+uKSJz6Y= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= @@ -304,6 +325,7 @@ github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4r github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/centrify/cloud-golang-sdk v0.0.0-20190214225812-119110094d0f/go.mod h1:C0rtzmGXgN78pYR0tGJFhtHgkbAs0lIbHwkB81VxDQE= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -360,30 +382,36 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dchest/bcrypt_pbkdf v0.0.0-20150205184540-83f37f9c154a h1:saTgr5tMLFnmy/yg3qDTft4rE5DY2uJ/cCxCe3q0XTU= github.com/dchest/bcrypt_pbkdf v0.0.0-20150205184540-83f37f9c154a/go.mod h1:Bw9BbhOJVNR+t0jCqx2GC6zv0TGBsShs56Y3gfSCvl0= -github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185 h1:3T8ZyTDp5QxTx3NU48JVb2u+75xc040fofcBaN+6jPA= -github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185/go.mod h1:cFRxtTwTOJkz2x3rQUNCYKWC93yP1VKjR8NUhqFxZNU= github.com/denisenkom/go-mssqldb v0.0.0-20190412130859-3b1d194e553a/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba h1:p6poVbjHDkKa+wtC8frBMwQtT3BmqGYBjzMwJ63tuR4= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc h1:8WFBn63wegobsYAX0YjD+8suexZDga5CctH4CCTx2+8= +github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.65.0 h1:3SywGJBC18HaYtPQF+T36jYzXBi+a6eIMonSjDll7TA= +github.com/digitalocean/godo v1.65.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= +github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= +github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= @@ -412,6 +440,7 @@ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -427,6 +456,7 @@ github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= @@ -440,6 +470,7 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.4.0/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= @@ -465,8 +496,11 @@ github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0 github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= +github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -495,9 +529,11 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -575,9 +611,11 @@ github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85n github.com/go-openapi/validate v0.22.4 h1:5v3jmMyIPKTR8Lv9syBAIRxG6lY0RqeBPB1LKEijzk8= github.com/go-openapi/validate v0.22.4/go.mod h1:qm6O8ZIcPVdSY5219468Jv7kBdGvkiZLPOmqnqTUZ2A= github.com/go-ozzo/ozzo-validation v3.6.0+incompatible h1:msy24VGS42fKO9K1vLz82/GeYW1cILu7Nuuj1N3BBkE= +github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= @@ -593,6 +631,7 @@ github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaC github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= @@ -601,6 +640,7 @@ github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3a github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= +github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= @@ -639,6 +679,7 @@ github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -731,9 +772,8 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20230510103437-eeec1cb781c3 h1:2XF1Vzq06X+inNqgJ9tRnGuw+ZVCB3FazXODD6JE1R8= +github.com/google/pprof v0.0.0-20230510103437-eeec1cb781c3/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -742,9 +782,11 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= @@ -787,6 +829,7 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/eventlogger v0.1.1 h1:zyCjxsy7KunFsMPZKU5PnwWEakSrp1zjj2vPFmrDaeo= +github.com/hashicorp/eventlogger v0.1.1/go.mod h1://CHt6/j+Q2lc0NlUB5af4aS2M0c0aVBg9/JfcpAyhM= github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU= github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -796,6 +839,7 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= github.com/hashicorp/go-discover v0.0.0-20210818145131-c573d69da192 h1:eje2KOX8Sf7aYPiAsLnpWdAIrGRMcpFjN/Go/Exb7Zo= +github.com/hashicorp/go-discover v0.0.0-20210818145131-c573d69da192/go.mod h1:3/4dzY4lR1Hzt9bBqMhBzG7lngZ0GKx/nL6G/ad62wE= github.com/hashicorp/go-gatedio v0.5.0/go.mod h1:Lr3t8L6IyxD3DAeaUxGcgl2JnRUpWMCsmBl4Omu/2t4= github.com/hashicorp/go-gcp-common v0.5.0/go.mod h1:IDGUI2N/OS3PiU4qZcXJeWKPI6O/9Y8hOrbSiMcqyYw= github.com/hashicorp/go-gcp-common v0.6.0/go.mod h1:RuZi18562/z30wxOzpjeRrGcmk9Ro/rBzixaSZDhIhY= @@ -822,18 +866,28 @@ github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jU github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0 h1:pSjQfW3vPtrOTcasTUKgCTQT7OGPPTTMVRrOfU6FJD8= github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0/go.mod h1:xvb32K2keAc+R8DSFG2IwDcydK9DBQE+fGA5fsw6hSk= github.com/hashicorp/go-kms-wrapping/v2 v2.0.9-0.20230228100945-740d2999c798 h1:22yjMhn+kJ7u8RaP5qcYEn02zHWnIg1/JxE4BL8JLtQ= +github.com/hashicorp/go-kms-wrapping/v2 v2.0.9-0.20230228100945-740d2999c798/go.mod h1:iRHxwFG8L24HhemSuvDYtuwVkjkl+OkTLvQ5bmqzAqE= github.com/hashicorp/go-kms-wrapping/wrappers/aead/v2 v2.0.7-1 h1:ZV26VJYcITBom0QqYSUOIj4HOHCVPEFjLqjxyXV/AbA= +github.com/hashicorp/go-kms-wrapping/wrappers/aead/v2 v2.0.7-1/go.mod h1:b99cDSA+OzcyRoBZroSf174/ss/e6gUuS45wue9ZQfc= github.com/hashicorp/go-kms-wrapping/wrappers/alicloudkms/v2 v2.0.1 h1:ydUCtmr8f9F+mHZ1iCsvzqFTXqNVpewX3s9zcYipMKI= +github.com/hashicorp/go-kms-wrapping/wrappers/alicloudkms/v2 v2.0.1/go.mod h1:Sl/ffzV57UAyjtSg1h5Km0rN5+dtzZJm1CUztkoCW2c= github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.7 h1:E3eEWpkofgPNrYyYznfS1+drq4/jFcqHQVNcL7WhUCo= +github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.7/go.mod h1:j5vefRoguQUG7iM4reS/hKIZssU1lZRqNPM5Wow6UnM= github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.8-0.20230905162003-bfa3347a7c85 h1:yZqD2ZQ4kWyVI2reKGC8Hl78ywWBtl1iLz/Bb5GBvMA= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.8-0.20230905162003-bfa3347a7c85/go.mod h1:0mKsr+G70TGABNbdS5dGiZTVoXe9qM/mhEIQL3lOQRc= github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.8 h1:16I8OqBEuxZIowwn3jiLvhlx+z+ia4dJc9stvz0yUBU= +github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.8/go.mod h1:6QUMo5BrXAtbzSuZilqmx0A4px2u6PeFK7vfp2WIzeM= github.com/hashicorp/go-kms-wrapping/wrappers/ocikms/v2 v2.0.7 h1:KeG3QGrbxbr2qAqCJdf3NR4ijAYwdcWLTmwSbR0yusM= +github.com/hashicorp/go-kms-wrapping/wrappers/ocikms/v2 v2.0.7/go.mod h1:rXxYzjjGw4HltEwxPp9zYSRIo6R+rBf1MSPk01bvodc= github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.7 h1:G25tZFw/LrAzJWxvS0/BFI7V1xAP/UsAIsgBwiE0mwo= +github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.7/go.mod h1:hxNA5oTfAvwPacWVg1axtF/lvTafwlAa6a6K4uzWHhw= github.com/hashicorp/go-memdb v1.0.2/go.mod h1:I6dKdmYhZqU0RJSheVEWgTNWdVQH5QvTgIUQ0t/t32M= github.com/hashicorp/go-memdb v1.3.4 h1:XSL3NR682X/cVk2IeV0d70N4DZ9ljI885xAEU8IoK3c= +github.com/hashicorp/go-memdb v1.3.4/go.mod h1:uBTr1oQbtuMgd1SSGoR8YV27eT3sBHbYiNm53bMpgSg= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-msgpack v1.1.5 h1:9byZdVjKTe5mce63pRVNP1L7UAmdHOTEMGehn6KvJWs= +github.com/hashicorp/go-msgpack v1.1.5/go.mod h1:gWVc3sv/wbDmR3rQsj1CAktEZzoz1YNK9NfGLXJ69/4= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= @@ -857,10 +911,13 @@ github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR3 github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6 h1:W9WN8p6moV1fjKLkeqEgkAMu5rauy9QeYDAmIaPuuiA= +github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6/go.mod h1:MpCPSPGLDILGb4JMm94/mMi3YysIqsXzGCzkEZjcjXg= github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= github.com/hashicorp/go-secure-stdlib/base62 v0.1.2 h1:ET4pqyjiGmY09R5y+rSd70J2w45CtbWDNvGqWp/R3Ng= +github.com/hashicorp/go-secure-stdlib/base62 v0.1.2/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 h1:p4AKXPPS24tO8Wc8i1gLvSKdmkiSY5xuju57czJ/IJQ= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.2/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 h1:UpiO20jno/eV1eVZcxqWnUohyKRe1g8FPV/xH1s/2qs= @@ -868,12 +925,15 @@ github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7/go.mod h1:QmrqtbKuxxSWTN3 github.com/hashicorp/go-secure-stdlib/password v0.1.1 h1:6JzmBqXprakgFEHwBgdchsjaA9x3GyjdI568bXKxa60= github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= github.com/hashicorp/go-secure-stdlib/plugincontainer v0.1.1 h1:1F0n5stk5uz4yIw2elN3k6bGbIv95OQaJVR2sVQ1kk0= +github.com/hashicorp/go-secure-stdlib/plugincontainer v0.1.1/go.mod h1:kRpzC4wHYXc2+sjXA9vuKawXYs0x0d0HuqqbaW1fj1w= github.com/hashicorp/go-secure-stdlib/reloadutil v0.1.1 h1:SMGUnbpAcat8rIKHkBPjfv81yC46a8eCNZ2hsR2l1EI= +github.com/hashicorp/go-secure-stdlib/reloadutil v0.1.1/go.mod h1:Ch/bf00Qnx77MZd49JRgHYqHQjtEmTgGU2faufpVZb0= github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.2 h1:phcbL8urUzF/kxA/Oj6awENaRwfWsjP59GW7u2qlDyY= +github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.2/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= @@ -884,7 +944,6 @@ github.com/hashicorp/go-uuid v1.0.2-0.20191001231223-f32f5fe8d6a8/go.mod h1:6SBZ github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= @@ -904,22 +963,28 @@ github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06A github.com/hashicorp/hcl/v2 v2.19.1 h1://i05Jqznmb2EXqa39Nsvyan2o5XyMowW5fnCKW5RPI= github.com/hashicorp/hcl/v2 v2.19.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= github.com/hashicorp/hcp-sdk-go v0.23.0 h1:3WarkQSK0VzxJaH6psHIGQagag3ujL+NjWagZZHpiZM= +github.com/hashicorp/hcp-sdk-go v0.23.0/go.mod h1:/9UoDY2FYYA8lFaKBb2HmM/jKYZGANmf65q9QRc/cVw= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/mdns v1.0.4 h1:sY0CMhFmjIPDMlTB+HfymFHCaYLhgifZ0QhjaYKD/UQ= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/nomad/api v0.0.0-20191220223628-edc62acd919d/go.mod h1:WKCL+tLVhN1D+APwH3JiTRZoxcdwRk86bWu1LVCUPaE= github.com/hashicorp/raft v1.0.1/go.mod h1:DVSAWItjLjTOkVbSpWQ0j0kUADIvDaCtBxIcbNAQLkI= github.com/hashicorp/raft v1.1.2-0.20191002163536-9c6bd3e3eb17/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= github.com/hashicorp/raft v1.3.10 h1:LR5QZX1VQd0DFWZfeCwWawyeKfpS/Tm1yjnJIY5X4Tw= +github.com/hashicorp/raft v1.3.10/go.mod h1:J8naEwc6XaaCfts7+28whSeRvCqTd6e20BlCU3LtEO4= github.com/hashicorp/raft-autopilot v0.2.0 h1:2/R2RPgamgRKgNWGQioULZvjeKXQZmDuw5Ty+6c+H7Y= +github.com/hashicorp/raft-autopilot v0.2.0/go.mod h1:q6tZ8UAZ5xio2gv2JvjgmtOlh80M6ic8xQYBe2Egkg8= github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea h1:xykPFhrBAS2J0VBzVa5e80b5ZtYuNQtgXjN40qBZlD4= github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= github.com/hashicorp/raft-boltdb/v2 v2.0.0-20210421194847-a7e34179d62c h1:oiKun9QlrOz5yQxMZJ3tf1kWtFYuKSJzxzEDxDPevj4= +github.com/hashicorp/raft-boltdb/v2 v2.0.0-20210421194847-a7e34179d62c/go.mod h1:kiPs9g148eLShc2TYagUAyKDnD+dH9U+CQKsXzlY9xo= github.com/hashicorp/raft-snapshot v1.0.2-0.20190827162939-8117efcc5aab/go.mod h1:5sL9eUn72lH5DzsFIJ9jaysITbHksSSszImWSOTC8Ic= github.com/hashicorp/raft-snapshot v1.0.4 h1:EuDuayAJPdiDmVk1ygTDnG2zDzrs0/6/yBuma1IYSow= +github.com/hashicorp/raft-snapshot v1.0.4/go.mod h1:5sL9eUn72lH5DzsFIJ9jaysITbHksSSszImWSOTC8Ic= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.8.3/go.mod h1:UpNcs7fFbpKIyZaUuSW6EPiH+eZC7OuyFD+wc1oal+k= github.com/hashicorp/terraform-exec v0.19.0 h1:FpqZ6n50Tk95mItTSS9BjeOVUb4eg81SpgVtZNNtFSM= @@ -985,6 +1050,7 @@ github.com/hashicorp/vault/sdk v0.6.0/go.mod h1:+DRpzoXIdMvKc88R4qxr+edwy/RvH5QK github.com/hashicorp/vault/sdk v0.10.0 h1:dDAe1mMG7Qqor1h3i7TU70ykwJy8ijyWeZZkN2CB0j4= github.com/hashicorp/vault/sdk v0.10.0/go.mod h1:s9F8+FF/Q9HuChoi1OWnIPoHRU6V675qHhCYkXVPPQE= github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 h1:O/pT5C1Q3mVXMyuqg7yuAWUg/jMZR1/0QTzTRdNR6Uw= +github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443/go.mod h1:bEpDU35nTu0ey1EXjwNwPjI9xErAsoOCmcMb9GKvyxo= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -993,6 +1059,7 @@ github.com/hokaccha/go-prettyjson v0.0.0-20170213120834-e6b9231a2b1c h1:vlXZsaTg github.com/hokaccha/go-prettyjson v0.0.0-20170213120834-e6b9231a2b1c/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -1008,6 +1075,7 @@ github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT github.com/jarcoal/httpmock v1.0.7 h1:d1a2VFpSdm5gtjhCPWsQHSnx8+5V3ms5431YwvmkuNk= github.com/jarcoal/httpmock v1.0.7/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jcmturner/aescts v1.0.1/go.mod h1:k9gJoDUf1GH5r2IBtBjwjDCoLELYxOcEhitdP8RL7qQ= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= @@ -1033,6 +1101,7 @@ github.com/jefferai/jsonx v1.0.0/go.mod h1:OGmqmi2tTeI/PS+qQfBDToLHHJIy/RMp24fPo github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jinzhu/copier v0.3.2 h1:QdBOCbaouLDYaIPFfi1bKv5F5tPpeTwXe4sD0jqtz5w= github.com/jinzhu/copier v0.3.2/go.mod h1:24xnZezI2Yqac9J61UC6/dG/k76ttpq0DdJI3QmUvro= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -1047,6 +1116,7 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f h1:ENpDacvnr8faw5ugQmEF1QYk+f/Y9lXFvuYmRxykago= +github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f/go.mod h1:KDSfL7qe5ZfQqvlDMkVjCztbmcpp/c8M77vhQP8ZPvk= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -1065,13 +1135,13 @@ github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVY github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kardianos/govendor v1.0.9 h1:WOH3FcVI9eOgnIZYg96iwUwrL4eOVx+aQ66oyX2R8Yc= -github.com/kardianos/govendor v1.0.9/go.mod h1:yvmR6q9ZZ7nSF5Wvh40v0wfP+3TwwL8zYQp+itoZSVM= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kelseyhightower/envconfig v1.3.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= @@ -1092,6 +1162,7 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -1101,6 +1172,7 @@ github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20221122204822-d1a8 github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20221122204822-d1a8c34382f1/go.mod h1:my+EVjOJLeQ9lUR9uVkxRvNNkhO2saSGIgzV8GZT9HY= github.com/kubernetes-csi/external-snapshotter/client/v4 v4.0.0/go.mod h1:YBCo4DoEeDndqvAn6eeu0vWM7QdXmHEeI9cFWplmBys= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= @@ -1113,7 +1185,9 @@ github.com/libopenstorage/secrets v0.0.0-20220823020833-2ecadaf59d8a h1:dHCYranr github.com/libopenstorage/secrets v0.0.0-20220823020833-2ecadaf59d8a/go.mod h1:JqaGrr4zerBaTqX04dajFE14AHcDDrxvCq8nZ5/r4AU= github.com/libopenstorage/stork v1.3.0-beta1.0.20200630005842-9255e7a98775/go.mod h1:qBSzYTJVHlOMg5RINNiHD1kBzlasnrc2uKLPZLgu1Qs= github.com/linode/linodego v0.7.1 h1:4WZmMpSA2NRwlPZcc0+4Gyn7rr99Evk9bnr0B3gXRKE= +github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -1160,10 +1234,12 @@ github.com/michaelklishin/rabbit-hole v0.0.0-20191008194146-93d9988f0cd5/go.mod github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/minsikl/netscaler-nitro-go v0.0.0-20170827154432-5b14ce3643e3 h1:PHPBYVeLuR7/2XSOfVwDpW+70KNuxMWygsyOZSKK15Y= github.com/minsikl/netscaler-nitro-go v0.0.0-20170827154432-5b14ce3643e3/go.mod h1:jh28TRFZwBumf7OjMQbRb8TNtDuuX7QNAGRjFEt+h6I= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.5 h1:OxRIeJXpAMztws/XHlN2vu6imG5Dpq+j61AzAX5fLng= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -1177,10 +1253,7 @@ github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI= -github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4= github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -1220,11 +1293,13 @@ github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q= github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 h1:BQ1HW7hr4IVovMwWg0E0PYcyW8CzqDcVmaew9cujU4s= +github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= @@ -1233,6 +1308,7 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/okta/okta-sdk-golang v1.0.1 h1:1DGm5+h2JvfdHz07yVVM7+LgUVSwxnk+6RoLUOB6CwI= github.com/okta/okta-sdk-golang v1.0.1/go.mod h1:8k//sN2mFTq8Ayo90DqGbcumCkSmYjF0+2zkIbZysec= github.com/okta/okta-sdk-golang/v2 v2.12.1 h1:U+smE7trkHSZO8Mval3Ow85dbxawO+pMAr692VZq9gM= +github.com/okta/okta-sdk-golang/v2 v2.12.1/go.mod h1:KRoAArk1H216oiRnQT77UN6JAhBOnOWkK27yA1SM7FQ= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -1300,8 +1376,10 @@ github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= 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= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= +github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/openshift/api v0.0.0-20210105115604-44119421ec6b/go.mod h1:aqU5Cq+kqKKPbDMqxo9FojgDeSpNJI7iuskjXjtojDg= github.com/openshift/api v0.0.0-20230329202819-04d4fb776982 h1:WQ6AkeLlqh6OrGuric5yYJ7j29QpsDiDNkdMKIqq3Dc= @@ -1318,10 +1396,12 @@ github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukw github.com/oracle/oci-go-sdk v12.5.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= github.com/oracle/oci-go-sdk v24.3.0+incompatible h1:x4mcfb4agelf1O4/1/auGlZ1lr97jXRSSN5MxTgG/zU= github.com/oracle/oci-go-sdk/v60 v60.0.0 h1:EJAWjEi4SY5Raha6iUzq4LTQ0uM5YFw/wat/L1ehIEM= +github.com/oracle/oci-go-sdk/v60 v60.0.0/go.mod h1:krz+2gkSzlSL/L4PvP0Z9pZpag9HYLNtsMd1PmxlA2w= github.com/ory/dockertest v3.3.4+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0= github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c h1:vwpFWvAO8DeIZfFeqASzZfsxuWPno9ncAebBEP0N3uE= +github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= @@ -1336,6 +1416,7 @@ github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIG github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.2.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -1345,7 +1426,9 @@ github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pires/go-proxyproto v0.6.1 h1:EBupykFmo22SDjv4fQVQd2J9NOoLPmyZA/15ldOGkPw= +github.com/pires/go-proxyproto v0.6.1/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1360,7 +1443,9 @@ github.com/portworx/talisman v0.0.0-20191007232806-837747f38224/go.mod h1:OjpMH9 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/pquerna/otp v1.2.1-0.20191009055518-468c2dd2b58d h1:PinQItctnaL2LtkaSM678+ZLLy5TajwOeXzWvYC7tII= @@ -1414,6 +1499,7 @@ github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5 github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rboyer/safeio v0.2.1 h1:05xhhdRNAdS3apYm7JRjOqngf4xruaW959jmRxGDuSU= +github.com/rboyer/safeio v0.2.1/go.mod h1:Cq/cEPK+YXFn622lsQ0K4KsPZSPtaptHHEldsy7Fmig= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1426,6 +1512,7 @@ github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rook/rook v1.11.4 h1:V5+r8JnVpSCdWGZ8eV5zUX1SnMTgCnz3azux+7Jefzc= github.com/rook/rook v1.11.4/go.mod h1:RwQdIZvb7BGomy9yR9caWYCoT8pHngYsxBXg6Fl8LZk= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -1436,17 +1523,22 @@ github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkB github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.2.0 h1:lMqc+fUb7RrFS3gQLtoQsJ7/6TV/pAIFvBsqX73DK8Y= +github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sethvargo/go-limiter v0.7.2 h1:FgC4N7RMpV5gMrUdda15FaFTkQ/L4fEqM7seXMs4oO8= +github.com/sethvargo/go-limiter v0.7.2/go.mod h1:C0kbSFbiriE5k2FFOe18M1YZbAR2Fiwf72uGu0CXCcU= github.com/shirou/gopsutil v2.19.9+incompatible h1:IrPVlK4nfwW10DF7pW+7YJKws9NkgNzWozwwWv9FsgY= github.com/shirou/gopsutil v2.19.9+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.22.6 h1:FnHOFOh+cYAM0C30P+zysPISzlknLC5Z1G4EAElznfQ= +github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -1456,6 +1548,7 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= +github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= @@ -1468,11 +1561,13 @@ github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e h1:3OgWYFw7jxCZPc github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e/go.mod h1:fKZCUVdirrxrBpwd9wb+lSoVixvpwAu8eHzbQB2tums= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b h1:br+bPNZsJWKicw/5rALEo67QHs5weyD5tf8WST+4sJ0= +github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= @@ -1510,6 +1605,7 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT 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= github.com/tencentcloud/tencentcloud-sdk-go v3.0.171+incompatible h1:K3fcS92NS8cRntIdu8Uqy2ZSePvX73nNhOkKuPGJLXQ= +github.com/tencentcloud/tencentcloud-sdk-go v3.0.171+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= @@ -1519,11 +1615,14 @@ github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eN github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= @@ -1537,14 +1636,14 @@ github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vmware/govmomi v0.18.0 h1:f7QxSmP7meCtoAmiKZogvVbLInT+CZx6Px6K5rYsJZo= +github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= @@ -1563,12 +1662,14 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zclconf/go-cty v1.14.1 h1:t9fyA35fwjjUMcmL5hLER+e/rEPqrbCK1/OSE4SI9KA= github.com/zclconf/go-cty v1.14.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= @@ -1595,9 +1696,11 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= +go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -1606,13 +1709,16 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2063,10 +2169,6 @@ golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= -golang.org/x/tools/cmd/cover v0.1.0-deprecated h1:Rwy+mWYz6loAF+LnG1jHG/JWMHRMMC2/1XX3Ejkx9lA= -golang.org/x/tools/cmd/cover v0.1.0-deprecated/go.mod h1:hMDiIvlpN1NoVgmjLjUJE9tMHyxHjFX7RuQ+rW12mSA= -golang.org/x/tools/go/vcs v0.1.0-deprecated h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4= -golang.org/x/tools/go/vcs v0.1.0-deprecated/go.mod h1:zUrvATBAvEI9535oC0yWYsLsHIV4Z7g63sNPVMtuBy8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2102,6 +2204,7 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -2161,7 +2264,9 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 h1:9NWlQfY2ePejTmfwUH1OWwmznFa+0kKcHGPDvcPza9M= +google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 h1:m8v1xLLLzMe1m5P+gCTF8nJB9epwZQUBERm20Oy1poQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 h1:0nDDozoAU19Qb2HwhXadU8OcsiO/09cnTqhUtq2MEOM= google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -2250,9 +2355,11 @@ gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= +gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -2296,6 +2403,7 @@ k8s.io/apiextensions-apiserver v0.0.0-20190409022649-727a075fdec8/go.mod h1:Ixke k8s.io/apiextensions-apiserver v0.18.3/go.mod h1:TMsNGs7DYpMXd+8MOCX8KzPOCx8fnZMoIGB24m03+JE= k8s.io/apiextensions-apiserver v0.20.1/go.mod h1:ntnrZV+6a3dB504qwC5PN/Yg9PBiDNt1EVqbW2kORVk= k8s.io/apiextensions-apiserver v0.26.0 h1:Gy93Xo1eg2ZIkNX/8vy5xviVSxwQulsnUdQ00nEdpDo= +k8s.io/apiextensions-apiserver v0.26.0/go.mod h1:7ez0LTiyW5nq3vADtK6C3kMESxadD51Bh6uz3JOlqWQ= k8s.io/apimachinery v0.0.0-20190404173353-6a84e37a896d/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= k8s.io/apimachinery v0.0.0-20190409092423-760d1845f48b/go.mod h1:FW86P8YXVLsbuplGMZeb20J3jYHscrDqw4jELaFJvRU= k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= @@ -2324,6 +2432,7 @@ k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbW k8s.io/component-base v0.18.3/go.mod h1:bp5GzGR0aGkYEfTj+eTY0AN/vXTgkJdQXjNTTVUaa3k= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= +k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -2359,6 +2468,7 @@ k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1E k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= layeh.com/radius v0.0.0-20190322222518-890bc1058917/go.mod h1:fywZKyu//X7iRzaxLgPWsvc0L26IUpVvE/aeIL2JtIQ= nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index 4742238a840..27898068533 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -780,6 +780,7 @@ func Provider() *schema.Provider { "ibm_metrics_router_routes": metricsrouter.DataSourceIBMMetricsRouterRoutes(), // MQ on Cloud + "ibm_mqcloud_queue_manager_options": mqcloud.DataSourceIbmMqcloudQueueManagerOptions(), "ibm_mqcloud_queue_manager": mqcloud.DataSourceIbmMqcloudQueueManager(), "ibm_mqcloud_queue_manager_status": mqcloud.DataSourceIbmMqcloudQueueManagerStatus(), "ibm_mqcloud_application": mqcloud.DataSourceIbmMqcloudApplication(), diff --git a/ibm/service/mqcloud/README.md b/ibm/service/mqcloud/README.md index c95818ac944..e5b8be5fc8a 100644 --- a/ibm/service/mqcloud/README.md +++ b/ibm/service/mqcloud/README.md @@ -1,4 +1,4 @@ -# Terraform IBM Provider +# Terraform IBM Provider MQ on Cloud This area is primarily for IBM provider contributors and maintainers. For information on _using_ Terraform and the IBM provider, see the links below. @@ -6,6 +6,6 @@ This area is primarily for IBM provider contributors and maintainers. For inform ## Handy Links * [Find out about contributing](../../../CONTRIBUTING.md) to the IBM provider! * IBM Provider Docs: [Home](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs) -* IBM Provider Docs: [One of the resources](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/mqcloud_queue_manager) -* IBM API Docs: [IBM API Docs for ]() -* IBM SDK: [IBM SDK for ](https://github.com/IBM/appconfiguration-go-admin-sdk/tree/master/mqcloudv1) +* IBM Provider Docs: [One of the MQ on Cloud resources](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/mqcloud_queue_manager) +* IBM API Docs: [IBM API Docs for MQ on Cloud](https://cloud.ibm.com/apidocs/mq-on-cloud) +* IBM MQ on Cloud SDK: [IBM SDK for MQ on Cloud](https://github.com/IBM/mqcloud-go-sdk/tree/main/mqcloudv1) \ No newline at end of file diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_application.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_application.go index 8f2ea428107..7832401901c 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_application.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_application.go @@ -1,18 +1,23 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( "context" "fmt" - + "log" "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" ) @@ -67,50 +72,41 @@ func DataSourceIbmMqcloudApplication() *schema.Resource { func dataSourceIbmMqcloudApplicationRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_application", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Read Application failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Read Application failed: %s", err.Error()), "(Data) ibm_mqcloud_application", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } - serviceInstanceGuid := d.Get("service_instance_guid").(string) - - // Support for pagination - offset := int64(0) - limit := int64(25) - allItems := []mqcloudv1.ApplicationDetails{} - - for { - listApplicationsOptions := &mqcloudv1.ListApplicationsOptions{ - ServiceInstanceGuid: &serviceInstanceGuid, - Limit: &limit, - Offset: &offset, - } + listApplicationsOptions := &mqcloudv1.ListApplicationsOptions{} - result, response, err := mqcloudClient.ListApplicationsWithContext(context, listApplicationsOptions) - if err != nil { - return diag.FromErr(fmt.Errorf("[ERROR] Error Getting Applications %s\n%s", err, response)) - } - if result == nil { - return diag.FromErr(fmt.Errorf("List Applications returned nil")) - } + listApplicationsOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) - allItems = append(allItems, result.Applications...) - - // Check if the number of returned records is less than the limit - if int64(len(result.Applications)) < limit { - break - } + var pager *mqcloudv1.ApplicationsPager + pager, err = mqcloudClient.NewApplicationsPager(listApplicationsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_application", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } - offset += limit + allItems, err := pager.GetAll() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ApplicationsPager.GetAll() failed %s", err), "(Data) ibm_mqcloud_application", "read") + log.Printf("[DEBUG] %s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } // Use the provided filter argument and construct a new list with only the requested resource(s) var matchApplications []mqcloudv1.ApplicationDetails - var name string var suppliedFilter bool + var name string if v, ok := d.GetOk("name"); ok { name = v.(string) @@ -138,15 +134,17 @@ func dataSourceIbmMqcloudApplicationRead(context context.Context, d *schema.Reso mapSlice := []map[string]interface{}{} for _, modelItem := range allItems { modelItem := modelItem - modelMap, err := dataSourceIbmMqcloudApplicationApplicationDetailsToMap(&modelItem) + modelMap, err := DataSourceIbmMqcloudApplicationApplicationDetailsToMap(&modelItem) if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_application", "read") + return tfErr.GetDiag() } mapSlice = append(mapSlice, modelMap) } if err = d.Set("applications", mapSlice); err != nil { - return diag.FromErr(fmt.Errorf("Error setting applications: %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting applications %s", err), "(Data) ibm_mqcloud_application", "read") + return tfErr.GetDiag() } return nil @@ -157,11 +155,11 @@ func dataSourceIbmMqcloudApplicationID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func dataSourceIbmMqcloudApplicationApplicationDetailsToMap(model *mqcloudv1.ApplicationDetails) (map[string]interface{}, error) { +func DataSourceIbmMqcloudApplicationApplicationDetailsToMap(model *mqcloudv1.ApplicationDetails) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["id"] = model.ID - modelMap["name"] = model.Name - modelMap["create_api_key_uri"] = model.CreateApiKeyURI - modelMap["href"] = model.Href + modelMap["id"] = *model.ID + modelMap["name"] = *model.Name + modelMap["create_api_key_uri"] = *model.CreateApiKeyURI + modelMap["href"] = *model.Href return modelMap, nil } diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_application_test.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_application_test.go index 49eed96b150..a5162926cd9 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_application_test.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_application_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud_test import ( @@ -10,6 +14,10 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/mqcloud" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/mqcloud-go-sdk/mqcloudv1" + "github.com/stretchr/testify/assert" ) func TestAccIbmMqcloudApplicationDataSourceBasic(t *testing.T) { @@ -47,3 +55,25 @@ func testAccCheckIbmMqcloudApplicationDataSourceConfigBasic(applicationDetailsSe } `, applicationDetailsServiceInstanceGuid, applicationDetailsName) } + +func TestDataSourceIbmMqcloudApplicationApplicationDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["name"] = "testString" + model["create_api_key_uri"] = "testString" + model["href"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(mqcloudv1.ApplicationDetails) + model.ID = core.StringPtr("testString") + model.Name = core.StringPtr("testString") + model.CreateApiKeyURI = core.StringPtr("testString") + model.Href = core.StringPtr("testString") + + result, err := mqcloud.DataSourceIbmMqcloudApplicationApplicationDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate.go index 0881b79156a..fa5c85a1528 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -121,6 +125,38 @@ func DataSourceIbmMqcloudKeystoreCertificate() *schema.Resource { Computed: true, Description: "The URL for this key store certificate.", }, + "config": { + Type: schema.TypeList, + Computed: true, + Description: "The configuration details for this certificate.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "ams": { + Type: schema.TypeList, + Computed: true, + Description: "A list of channels that are configured with this certificate.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "channels": { + Type: schema.TypeList, + Computed: true, + Description: "A list of channels that are configured with this certificate.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Computed: true, + Description: "The name of the channel.", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, }, }, }, @@ -131,11 +167,17 @@ func DataSourceIbmMqcloudKeystoreCertificate() *schema.Resource { func dataSourceIbmMqcloudKeystoreCertificateRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_keystore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Read Keystore Certificate failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Read Keystore Certificate failed: %s", err.Error()), "(Data) ibm_mqcloud_keystore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } listKeyStoreCertificatesOptions := &mqcloudv1.ListKeyStoreCertificatesOptions{} @@ -143,10 +185,11 @@ func dataSourceIbmMqcloudKeystoreCertificateRead(context context.Context, d *sch listKeyStoreCertificatesOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) listKeyStoreCertificatesOptions.SetQueueManagerID(d.Get("queue_manager_id").(string)) - keyStoreCertificateDetailsCollection, response, err := mqcloudClient.ListKeyStoreCertificatesWithContext(context, listKeyStoreCertificatesOptions) + keyStoreCertificateDetailsCollection, _, err := mqcloudClient.ListKeyStoreCertificatesWithContext(context, listKeyStoreCertificatesOptions) if err != nil { - log.Printf("[DEBUG] ListKeyStoreCertificatesWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("ListKeyStoreCertificatesWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ListKeyStoreCertificatesWithContext failed: %s", err.Error()), "(Data) ibm_mqcloud_keystore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } // Use the provided filter argument and construct a new list with only the requested resource(s) @@ -169,7 +212,7 @@ func dataSourceIbmMqcloudKeystoreCertificateRead(context context.Context, d *sch if suppliedFilter { if len(keyStoreCertificateDetailsCollection.KeyStore) == 0 { - return diag.FromErr(fmt.Errorf("No Key Store Certificate found with label: \"%s\"", label)) + return flex.DiscriminatedTerraformErrorf(nil, fmt.Sprintf("no KeyStore found with label %s", label), "(Data) ibm_mqcloud_keystore_certificate", "read", "no-collection-found").GetDiag() } d.SetId(label) } else { @@ -177,22 +220,22 @@ func dataSourceIbmMqcloudKeystoreCertificateRead(context context.Context, d *sch } if err = d.Set("total_count", flex.IntValue(keyStoreCertificateDetailsCollection.TotalCount)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting total_count: %s", err)) + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting total_count: %s", err), "(Data) ibm_mqcloud_keystore_certificate", "read", "set-total_count").GetDiag() } keyStore := []map[string]interface{}{} if keyStoreCertificateDetailsCollection.KeyStore != nil { for _, modelItem := range keyStoreCertificateDetailsCollection.KeyStore { modelItem := modelItem - modelMap, err := dataSourceIbmMqcloudKeystoreCertificateKeyStoreCertificateDetailsToMap(&modelItem) + modelMap, err := DataSourceIbmMqcloudKeystoreCertificateKeyStoreCertificateDetailsToMap(&modelItem) if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_keystore_certificate", "read", "key_store-to-map").GetDiag() } keyStore = append(keyStore, modelMap) } } if err = d.Set("key_store", keyStore); err != nil { - return diag.FromErr(fmt.Errorf("Error setting key_store: %s", err)) + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting key_store: %s", err), "(Data) ibm_mqcloud_keystore_certificate", "read", "set-key_store").GetDiag() } return nil @@ -203,21 +246,59 @@ func dataSourceIbmMqcloudKeystoreCertificateID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func dataSourceIbmMqcloudKeystoreCertificateKeyStoreCertificateDetailsToMap(model *mqcloudv1.KeyStoreCertificateDetails) (map[string]interface{}, error) { +func DataSourceIbmMqcloudKeystoreCertificateKeyStoreCertificateDetailsToMap(model *mqcloudv1.KeyStoreCertificateDetails) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["id"] = model.ID - modelMap["label"] = model.Label - modelMap["certificate_type"] = model.CertificateType - modelMap["fingerprint_sha256"] = model.FingerprintSha256 - modelMap["subject_dn"] = model.SubjectDn - modelMap["subject_cn"] = model.SubjectCn - modelMap["issuer_dn"] = model.IssuerDn - modelMap["issuer_cn"] = model.IssuerCn + modelMap["id"] = *model.ID + modelMap["label"] = *model.Label + modelMap["certificate_type"] = *model.CertificateType + modelMap["fingerprint_sha256"] = *model.FingerprintSha256 + modelMap["subject_dn"] = *model.SubjectDn + modelMap["subject_cn"] = *model.SubjectCn + modelMap["issuer_dn"] = *model.IssuerDn + modelMap["issuer_cn"] = *model.IssuerCn modelMap["issued"] = model.Issued.String() modelMap["expiry"] = model.Expiry.String() - modelMap["is_default"] = model.IsDefault + modelMap["is_default"] = *model.IsDefault modelMap["dns_names_total_count"] = flex.IntValue(model.DnsNamesTotalCount) modelMap["dns_names"] = model.DnsNames - modelMap["href"] = model.Href + modelMap["href"] = *model.Href + configMap, err := DataSourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(model.Config) + if err != nil { + return modelMap, err + } + modelMap["config"] = []map[string]interface{}{configMap} + return modelMap, nil +} + +func DataSourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(model *mqcloudv1.CertificateConfiguration) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + amsMap, err := DataSourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(model.Ams) + if err != nil { + return modelMap, err + } + modelMap["ams"] = []map[string]interface{}{amsMap} + return modelMap, nil +} + +func DataSourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(model *mqcloudv1.ChannelsDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + channels := []map[string]interface{}{} + for _, channelsItem := range model.Channels { + channelsItem := channelsItem + channelsItemMap, err := DataSourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(&channelsItem) + if err != nil { + return modelMap, err + } + channels = append(channels, channelsItemMap) + } + modelMap["channels"] = channels + return modelMap, nil +} + +func DataSourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(model *mqcloudv1.ChannelDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Name != nil { + modelMap["name"] = *model.Name + } return modelMap, nil } diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate_test.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate_test.go index 984831aac72..f96cb6fc465 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate_test.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_keystore_certificate_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud_test import ( @@ -11,6 +15,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/mqcloud" + . "github.com/IBM-Cloud/terraform-provider-ibm/ibm/unittest" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/mqcloud-go-sdk/mqcloudv1" + "github.com/stretchr/testify/assert" ) func TestAccIbmMqcloudKeystoreCertificateDataSourceBasic(t *testing.T) { @@ -52,3 +61,131 @@ func testAccCheckIbmMqcloudKeystoreCertificateDataSourceConfigBasic(keyStoreCert } `, keyStoreCertificateDetailsServiceInstanceGuid, keyStoreCertificateDetailsQueueManagerID, keyStoreCertificateDetailsLabel, keyStoreCertificateDetailsCertificateFile) } + +func TestDataSourceIbmMqcloudKeystoreCertificateKeyStoreCertificateDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + channelDetailsModel := make(map[string]interface{}) + channelDetailsModel["name"] = "CLOUD.APP.SVRCONN" + + channelsDetailsModel := make(map[string]interface{}) + channelsDetailsModel["channels"] = []map[string]interface{}{channelDetailsModel} + + certificateConfigurationModel := make(map[string]interface{}) + certificateConfigurationModel["ams"] = []map[string]interface{}{channelsDetailsModel} + + model := make(map[string]interface{}) + model["id"] = "testString" + model["label"] = "testString" + model["certificate_type"] = "key_store" + model["fingerprint_sha256"] = "testString" + model["subject_dn"] = "testString" + model["subject_cn"] = "testString" + model["issuer_dn"] = "testString" + model["issuer_cn"] = "testString" + model["issued"] = "2019-01-01T12:00:00.000Z" + model["expiry"] = "2019-01-01T12:00:00.000Z" + model["is_default"] = true + model["dns_names_total_count"] = int(38) + model["dns_names"] = []string{"testString"} + model["href"] = "testString" + model["config"] = []map[string]interface{}{certificateConfigurationModel} + + assert.Equal(t, result, model) + } + + channelDetailsModel := new(mqcloudv1.ChannelDetails) + channelDetailsModel.Name = core.StringPtr("CLOUD.APP.SVRCONN") + + channelsDetailsModel := new(mqcloudv1.ChannelsDetails) + channelsDetailsModel.Channels = []mqcloudv1.ChannelDetails{*channelDetailsModel} + + certificateConfigurationModel := new(mqcloudv1.CertificateConfiguration) + certificateConfigurationModel.Ams = channelsDetailsModel + + model := new(mqcloudv1.KeyStoreCertificateDetails) + model.ID = core.StringPtr("testString") + model.Label = core.StringPtr("testString") + model.CertificateType = core.StringPtr("key_store") + model.FingerprintSha256 = core.StringPtr("testString") + model.SubjectDn = core.StringPtr("testString") + model.SubjectCn = core.StringPtr("testString") + model.IssuerDn = core.StringPtr("testString") + model.IssuerCn = core.StringPtr("testString") + model.Issued = CreateMockDateTime("2019-01-01T12:00:00.000Z") + model.Expiry = CreateMockDateTime("2019-01-01T12:00:00.000Z") + model.IsDefault = core.BoolPtr(true) + model.DnsNamesTotalCount = core.Int64Ptr(int64(38)) + model.DnsNames = []string{"testString"} + model.Href = core.StringPtr("testString") + model.Config = certificateConfigurationModel + + result, err := mqcloud.DataSourceIbmMqcloudKeystoreCertificateKeyStoreCertificateDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + channelDetailsModel := make(map[string]interface{}) + channelDetailsModel["name"] = "CLOUD.APP.SVRCONN" + + channelsDetailsModel := make(map[string]interface{}) + channelsDetailsModel["channels"] = []map[string]interface{}{channelDetailsModel} + + model := make(map[string]interface{}) + model["ams"] = []map[string]interface{}{channelsDetailsModel} + + assert.Equal(t, result, model) + } + + channelDetailsModel := new(mqcloudv1.ChannelDetails) + channelDetailsModel.Name = core.StringPtr("CLOUD.APP.SVRCONN") + + channelsDetailsModel := new(mqcloudv1.ChannelsDetails) + channelsDetailsModel.Channels = []mqcloudv1.ChannelDetails{*channelDetailsModel} + + model := new(mqcloudv1.CertificateConfiguration) + model.Ams = channelsDetailsModel + + result, err := mqcloud.DataSourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + channelDetailsModel := make(map[string]interface{}) + channelDetailsModel["name"] = "CLOUD.APP.SVRCONN" + + model := make(map[string]interface{}) + model["channels"] = []map[string]interface{}{channelDetailsModel} + + assert.Equal(t, result, model) + } + + channelDetailsModel := new(mqcloudv1.ChannelDetails) + channelDetailsModel.Name = core.StringPtr("CLOUD.APP.SVRCONN") + + model := new(mqcloudv1.ChannelsDetails) + model.Channels = []mqcloudv1.ChannelDetails{*channelDetailsModel} + + result, err := mqcloud.DataSourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["name"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(mqcloudv1.ChannelDetails) + model.Name = core.StringPtr("testString") + + result, err := mqcloud.DataSourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager.go index 245cbf93b7f..857cdf7f9a5 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager.go @@ -1,17 +1,23 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( "context" "fmt" + "log" "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" ) @@ -59,7 +65,7 @@ func DataSourceIbmMqcloudQueueManager() *schema.Resource { "size": { Type: schema.TypeString, Computed: true, - Description: "The queue manager sizes of deployment available. Deployment of lite queue managers for aws_us_east_1 and aws_eu_west_1 locations is not available.", + Description: "The queue manager sizes of deployment available.", }, "status_uri": { Type: schema.TypeString, @@ -121,50 +127,41 @@ func DataSourceIbmMqcloudQueueManager() *schema.Resource { func dataSourceIbmMqcloudQueueManagerRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_queue_manager", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Read Queue Manager failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Read Queue Manager failed: %s", err.Error()), "(Data) ibm_mqcloud_queue_manager", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } - serviceInstanceGuid := d.Get("service_instance_guid").(string) - - // Support for pagination - offset := int64(0) - limit := int64(25) - allItems := []mqcloudv1.QueueManagerDetails{} - - for { - listQueueManagersOptions := &mqcloudv1.ListQueueManagersOptions{ - ServiceInstanceGuid: &serviceInstanceGuid, - Limit: &limit, - Offset: &offset, - } - - result, response, err := mqcloudClient.ListQueueManagersWithContext(context, listQueueManagersOptions) - if err != nil { - return diag.FromErr(fmt.Errorf("[ERROR] Error Getting QueueManagers %s\n%s", err, response)) - } - if result == nil { - return diag.FromErr(fmt.Errorf("List QueueManagers returned nil")) - } + listQueueManagersOptions := &mqcloudv1.ListQueueManagersOptions{} - allItems = append(allItems, result.QueueManagers...) + listQueueManagersOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) - // Check if the number of returned records is less than the limit - if int64(len(result.QueueManagers)) < limit { - break - } + var pager *mqcloudv1.QueueManagersPager + pager, err = mqcloudClient.NewQueueManagersPager(listQueueManagersOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_queue_manager", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } - offset += limit + allItems, err := pager.GetAll() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("QueueManagersPager.GetAll() failed %s", err), "(Data) ibm_mqcloud_queue_manager", "read") + log.Printf("[DEBUG] %s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } // Use the provided filter argument and construct a new list with only the requested resource(s) var matchQueueManagers []mqcloudv1.QueueManagerDetails - var name string var suppliedFilter bool + var name string if v, ok := d.GetOk("name"); ok { name = v.(string) @@ -192,15 +189,17 @@ func dataSourceIbmMqcloudQueueManagerRead(context context.Context, d *schema.Res mapSlice := []map[string]interface{}{} for _, modelItem := range allItems { modelItem := modelItem - modelMap, err := dataSourceIbmMqcloudQueueManagerQueueManagerDetailsToMap(&modelItem) + modelMap, err := DataSourceIbmMqcloudQueueManagerQueueManagerDetailsToMap(&modelItem) if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_queue_manager", "read") + return tfErr.GetDiag() } mapSlice = append(mapSlice, modelMap) } if err = d.Set("queue_managers", mapSlice); err != nil { - return diag.FromErr(fmt.Errorf("Error setting queue_managers: %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting queue_managers %s", err), "(Data) ibm_mqcloud_queue_manager", "read") + return tfErr.GetDiag() } return nil @@ -211,22 +210,22 @@ func dataSourceIbmMqcloudQueueManagerID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func dataSourceIbmMqcloudQueueManagerQueueManagerDetailsToMap(model *mqcloudv1.QueueManagerDetails) (map[string]interface{}, error) { +func DataSourceIbmMqcloudQueueManagerQueueManagerDetailsToMap(model *mqcloudv1.QueueManagerDetails) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["id"] = model.ID - modelMap["name"] = model.Name - modelMap["display_name"] = model.DisplayName - modelMap["location"] = model.Location - modelMap["size"] = model.Size - modelMap["status_uri"] = model.StatusURI - modelMap["version"] = model.Version - modelMap["web_console_url"] = model.WebConsoleURL - modelMap["rest_api_endpoint_url"] = model.RestApiEndpointURL - modelMap["administrator_api_endpoint_url"] = model.AdministratorApiEndpointURL - modelMap["connection_info_uri"] = model.ConnectionInfoURI + modelMap["id"] = *model.ID + modelMap["name"] = *model.Name + modelMap["display_name"] = *model.DisplayName + modelMap["location"] = *model.Location + modelMap["size"] = *model.Size + modelMap["status_uri"] = *model.StatusURI + modelMap["version"] = *model.Version + modelMap["web_console_url"] = *model.WebConsoleURL + modelMap["rest_api_endpoint_url"] = *model.RestApiEndpointURL + modelMap["administrator_api_endpoint_url"] = *model.AdministratorApiEndpointURL + modelMap["connection_info_uri"] = *model.ConnectionInfoURI modelMap["date_created"] = model.DateCreated.String() - modelMap["upgrade_available"] = model.UpgradeAvailable - modelMap["available_upgrade_versions_uri"] = model.AvailableUpgradeVersionsURI - modelMap["href"] = model.Href + modelMap["upgrade_available"] = *model.UpgradeAvailable + modelMap["available_upgrade_versions_uri"] = *model.AvailableUpgradeVersionsURI + modelMap["href"] = *model.Href return modelMap, nil } diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_options.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_options.go new file mode 100644 index 00000000000..98667df6630 --- /dev/null +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_options.go @@ -0,0 +1,106 @@ +// Copyright IBM Corp. 2024 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + +package mqcloud + +import ( + "context" + "fmt" + "log" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" + "github.com/IBM/mqcloud-go-sdk/mqcloudv1" +) + +func DataSourceIbmMqcloudQueueManagerOptions() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmMqcloudQueueManagerOptionsRead, + + Schema: map[string]*schema.Schema{ + "service_instance_guid": { + Type: schema.TypeString, + Required: true, + Description: "The GUID that uniquely identifies the MQ on Cloud service instance.", + }, + "locations": { + Type: schema.TypeList, + Computed: true, + Description: "List of deployment locations.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "sizes": { + Type: schema.TypeList, + Computed: true, + Description: "List of queue manager sizes.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "versions": { + Type: schema.TypeList, + Computed: true, + Description: "List of queue manager versions.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "latest_version": { + Type: schema.TypeString, + Computed: true, + Description: "The latest Queue manager version.", + }, + }, + } +} + +func dataSourceIbmMqcloudQueueManagerOptionsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() + if err != nil { + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_queue_manager_options", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + err = checkSIPlan(d, meta) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Read Queue Manager Options failed: %s", err.Error()), "(Data) ibm_mqcloud_queue_manager_options", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + getOptionsOptions := &mqcloudv1.GetOptionsOptions{} + + getOptionsOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) + + configurationOptions, _, err := mqcloudClient.GetOptionsWithContext(context, getOptionsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetOptionsWithContext failed: %s", err.Error()), "(Data) ibm_mqcloud_queue_manager_options", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + d.SetId(dataSourceIbmMqcloudQueueManagerOptionsID(d)) + + if err = d.Set("latest_version", configurationOptions.LatestVersion); err != nil { + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting latest_version: %s", err), "(Data) ibm_mqcloud_queue_manager_options", "read", "set-latest_version").GetDiag() + } + + return nil +} + +// dataSourceIbmMqcloudQueueManagerOptionsID returns a reasonable ID for the list. +func dataSourceIbmMqcloudQueueManagerOptionsID(d *schema.ResourceData) string { + return time.Now().UTC().String() +} diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_options_test.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_options_test.go new file mode 100644 index 00000000000..8dcbe81cb14 --- /dev/null +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_options_test.go @@ -0,0 +1,44 @@ +// Copyright IBM Corp. 2024 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + +package mqcloud_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmMqcloudQueueManagerOptionsDataSourceBasic(t *testing.T) { + t.Parallel() + service_instance_guid := acc.MqcloudInstanceID + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheckMqcloud(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckIbmMqcloudQueueManagerOptionsDataSourceConfigBasic(service_instance_guid), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_mqcloud_queue_manager_options.mqcloud_queue_manager_options_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_mqcloud_queue_manager_options.mqcloud_queue_manager_options_instance", "service_instance_guid"), + ), + }, + }, + }) +} + +func testAccCheckIbmMqcloudQueueManagerOptionsDataSourceConfigBasic(service_instance_guid string) string { + return fmt.Sprintf(` + data "ibm_mqcloud_queue_manager_options" "mqcloud_queue_manager_options_instance" { + service_instance_guid = "%s" + } + `, service_instance_guid) +} diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status.go index 835949afed2..9b688a37a19 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -13,6 +17,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" ) @@ -43,12 +48,17 @@ func DataSourceIbmMqcloudQueueManagerStatus() *schema.Resource { func dataSourceIbmMqcloudQueueManagerStatusRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_queue_manager_status", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Read Queue Manager Status failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Read Queue Manager Status failed: %s", err.Error()), "(Data) ibm_mqcloud_queue_manager_status", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } getQueueManagerStatusOptions := &mqcloudv1.GetQueueManagerStatusOptions{} @@ -56,16 +66,17 @@ func dataSourceIbmMqcloudQueueManagerStatusRead(context context.Context, d *sche getQueueManagerStatusOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) getQueueManagerStatusOptions.SetQueueManagerID(d.Get("queue_manager_id").(string)) - queueManagerStatus, response, err := mqcloudClient.GetQueueManagerStatusWithContext(context, getQueueManagerStatusOptions) + queueManagerStatus, _, err := mqcloudClient.GetQueueManagerStatusWithContext(context, getQueueManagerStatusOptions) if err != nil { - log.Printf("[DEBUG] GetQueueManagerStatusWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("GetQueueManagerStatusWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetQueueManagerStatusWithContext failed: %s", err.Error()), "(Data) ibm_mqcloud_queue_manager_status", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId(dataSourceIbmMqcloudQueueManagerStatusID(d)) if err = d.Set("status", queueManagerStatus.Status); err != nil { - return diag.FromErr(fmt.Errorf("Error setting status: %s", err)) + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting status: %s", err), "(Data) ibm_mqcloud_queue_manager_status", "read", "set-status").GetDiag() } return nil diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status_test.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status_test.go index c09b3d5ba68..314ef7add99 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status_test.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_status_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud_test import ( diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_test.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_test.go index 1bf9dccef8e..c08ba1ccc90 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_test.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_queue_manager_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud_test import ( @@ -11,6 +15,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/mqcloud" + . "github.com/IBM-Cloud/terraform-provider-ibm/ibm/unittest" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/mqcloud-go-sdk/mqcloudv1" + "github.com/stretchr/testify/assert" ) func TestAccIbmMqcloudQueueManagerDataSourceBasic(t *testing.T) { @@ -18,7 +27,7 @@ func TestAccIbmMqcloudQueueManagerDataSourceBasic(t *testing.T) { queueManagerDetailsServiceInstanceGuid := acc.MqcloudInstanceID queueManagerDetailsName := fmt.Sprintf("tf_queue_manager_ds_basic%d", acctest.RandIntRange(10, 100)) queueManagerDetailsLocation := acc.MqCloudQueueManagerLocation - queueManagerDetailsSize := "small" + queueManagerDetailsSize := "xsmall" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheckMqcloud(t) }, @@ -45,8 +54,8 @@ func TestAccIbmMqcloudQueueManagerDataSourceAllArgs(t *testing.T) { queueManagerDetailsName := fmt.Sprintf("tf_queue_manager_ds_allargs%d", acctest.RandIntRange(10, 100)) queueManagerDetailsDisplayName := queueManagerDetailsName queueManagerDetailsLocation := acc.MqCloudQueueManagerLocation - queueManagerDetailsSize := "small" - queueManagerDetailsVersion := acc.MqCloudQueueManagerVersion + queueManagerDetailsSize := "xsmall" + queueManagerDetailsVersion := acc.MqCloudQueueManagerVersionUpdate resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheckMqcloud(t) }, @@ -113,3 +122,47 @@ func testAccCheckIbmMqcloudQueueManagerDataSourceConfig(queueManagerDetailsServi } `, queueManagerDetailsServiceInstanceGuid, queueManagerDetailsName, queueManagerDetailsDisplayName, queueManagerDetailsLocation, queueManagerDetailsSize, queueManagerDetailsVersion) } + +func TestDataSourceIbmMqcloudQueueManagerQueueManagerDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["name"] = "testString" + model["display_name"] = "testString" + model["location"] = "reserved-eu-de-cluster-f884" + model["size"] = "xsmall" + model["status_uri"] = "testString" + model["version"] = "9.3.2_2" + model["web_console_url"] = "testString" + model["rest_api_endpoint_url"] = "testString" + model["administrator_api_endpoint_url"] = "testString" + model["connection_info_uri"] = "testString" + model["date_created"] = "2020-01-13T15:39:35.000Z" + model["upgrade_available"] = true + model["available_upgrade_versions_uri"] = "testString" + model["href"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(mqcloudv1.QueueManagerDetails) + model.ID = core.StringPtr("testString") + model.Name = core.StringPtr("testString") + model.DisplayName = core.StringPtr("testString") + model.Location = core.StringPtr("reserved-eu-de-cluster-f884") + model.Size = core.StringPtr("xsmall") + model.StatusURI = core.StringPtr("testString") + model.Version = core.StringPtr("9.3.2_2") + model.WebConsoleURL = core.StringPtr("testString") + model.RestApiEndpointURL = core.StringPtr("testString") + model.AdministratorApiEndpointURL = core.StringPtr("testString") + model.ConnectionInfoURI = core.StringPtr("testString") + model.DateCreated = CreateMockDateTime("2020-01-13T15:39:35.000Z") + model.UpgradeAvailable = core.BoolPtr(true) + model.AvailableUpgradeVersionsURI = core.StringPtr("testString") + model.Href = core.StringPtr("testString") + + result, err := mqcloud.DataSourceIbmMqcloudQueueManagerQueueManagerDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate.go index c8d0604ab0d..de647216eb0 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -118,11 +122,17 @@ func DataSourceIbmMqcloudTruststoreCertificate() *schema.Resource { func dataSourceIbmMqcloudTruststoreCertificateRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_truststore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Read Truststore Certificate failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Read Truststore Certificate failed: %s", err.Error()), "(Data) ibm_mqcloud_truststore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } listTrustStoreCertificatesOptions := &mqcloudv1.ListTrustStoreCertificatesOptions{} @@ -130,10 +140,11 @@ func dataSourceIbmMqcloudTruststoreCertificateRead(context context.Context, d *s listTrustStoreCertificatesOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) listTrustStoreCertificatesOptions.SetQueueManagerID(d.Get("queue_manager_id").(string)) - trustStoreCertificateDetailsCollection, response, err := mqcloudClient.ListTrustStoreCertificatesWithContext(context, listTrustStoreCertificatesOptions) + trustStoreCertificateDetailsCollection, _, err := mqcloudClient.ListTrustStoreCertificatesWithContext(context, listTrustStoreCertificatesOptions) if err != nil { - log.Printf("[DEBUG] ListTrustStoreCertificatesWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("ListTrustStoreCertificatesWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ListTrustStoreCertificatesWithContext failed: %s", err.Error()), "(Data) ibm_mqcloud_truststore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } // Use the provided filter argument and construct a new list with only the requested resource(s) @@ -156,7 +167,7 @@ func dataSourceIbmMqcloudTruststoreCertificateRead(context context.Context, d *s if suppliedFilter { if len(trustStoreCertificateDetailsCollection.TrustStore) == 0 { - return diag.FromErr(fmt.Errorf("No Trust Store Certificate found with label: \"%s\"", label)) + return flex.DiscriminatedTerraformErrorf(nil, fmt.Sprintf("no TrustStore found with label %s", label), "(Data) ibm_mqcloud_truststore_certificate", "read", "no-collection-found").GetDiag() } d.SetId(label) } else { @@ -164,22 +175,22 @@ func dataSourceIbmMqcloudTruststoreCertificateRead(context context.Context, d *s } if err = d.Set("total_count", flex.IntValue(trustStoreCertificateDetailsCollection.TotalCount)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting total_count: %s", err)) + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting total_count: %s", err), "(Data) ibm_mqcloud_truststore_certificate", "read", "set-total_count").GetDiag() } trustStore := []map[string]interface{}{} if trustStoreCertificateDetailsCollection.TrustStore != nil { for _, modelItem := range trustStoreCertificateDetailsCollection.TrustStore { modelItem := modelItem - modelMap, err := dataSourceIbmMqcloudTruststoreCertificateTrustStoreCertificateDetailsToMap(&modelItem) + modelMap, err := DataSourceIbmMqcloudTruststoreCertificateTrustStoreCertificateDetailsToMap(&modelItem) if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_truststore_certificate", "read", "trust_store-to-map").GetDiag() } trustStore = append(trustStore, modelMap) } } if err = d.Set("trust_store", trustStore); err != nil { - return diag.FromErr(fmt.Errorf("Error setting trust_store: %s", err)) + return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting trust_store: %s", err), "(Data) ibm_mqcloud_truststore_certificate", "read", "set-trust_store").GetDiag() } return nil @@ -190,19 +201,19 @@ func dataSourceIbmMqcloudTruststoreCertificateID(d *schema.ResourceData) string return time.Now().UTC().String() } -func dataSourceIbmMqcloudTruststoreCertificateTrustStoreCertificateDetailsToMap(model *mqcloudv1.TrustStoreCertificateDetails) (map[string]interface{}, error) { +func DataSourceIbmMqcloudTruststoreCertificateTrustStoreCertificateDetailsToMap(model *mqcloudv1.TrustStoreCertificateDetails) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["id"] = model.ID - modelMap["label"] = model.Label - modelMap["certificate_type"] = model.CertificateType - modelMap["fingerprint_sha256"] = model.FingerprintSha256 - modelMap["subject_dn"] = model.SubjectDn - modelMap["subject_cn"] = model.SubjectCn - modelMap["issuer_dn"] = model.IssuerDn - modelMap["issuer_cn"] = model.IssuerCn + modelMap["id"] = *model.ID + modelMap["label"] = *model.Label + modelMap["certificate_type"] = *model.CertificateType + modelMap["fingerprint_sha256"] = *model.FingerprintSha256 + modelMap["subject_dn"] = *model.SubjectDn + modelMap["subject_cn"] = *model.SubjectCn + modelMap["issuer_dn"] = *model.IssuerDn + modelMap["issuer_cn"] = *model.IssuerCn modelMap["issued"] = model.Issued.String() modelMap["expiry"] = model.Expiry.String() - modelMap["trusted"] = model.Trusted - modelMap["href"] = model.Href + modelMap["trusted"] = *model.Trusted + modelMap["href"] = *model.Href return modelMap, nil } diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate_test.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate_test.go index 75552460a42..72229f71d24 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate_test.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_truststore_certificate_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud_test import ( @@ -11,6 +15,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/mqcloud" + . "github.com/IBM-Cloud/terraform-provider-ibm/ibm/unittest" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/mqcloud-go-sdk/mqcloudv1" + "github.com/stretchr/testify/assert" ) func TestAccIbmMqcloudTruststoreCertificateDataSourceBasic(t *testing.T) { @@ -52,3 +61,41 @@ func testAccCheckIbmMqcloudTruststoreCertificateDataSourceConfigBasic(trustStore } `, trustStoreCertificateDetailsServiceInstanceGuid, trustStoreCertificateDetailsQueueManagerID, trustStoreCertificateDetailsLabel, trustStoreCertificateDetailsCertificateFile) } + +func TestDataSourceIbmMqcloudTruststoreCertificateTrustStoreCertificateDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["label"] = "testString" + model["certificate_type"] = "trust_store" + model["fingerprint_sha256"] = "testString" + model["subject_dn"] = "testString" + model["subject_cn"] = "testString" + model["issuer_dn"] = "testString" + model["issuer_cn"] = "testString" + model["issued"] = "2019-01-01T12:00:00.000Z" + model["expiry"] = "2019-01-01T12:00:00.000Z" + model["trusted"] = true + model["href"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(mqcloudv1.TrustStoreCertificateDetails) + model.ID = core.StringPtr("testString") + model.Label = core.StringPtr("testString") + model.CertificateType = core.StringPtr("trust_store") + model.FingerprintSha256 = core.StringPtr("testString") + model.SubjectDn = core.StringPtr("testString") + model.SubjectCn = core.StringPtr("testString") + model.IssuerDn = core.StringPtr("testString") + model.IssuerCn = core.StringPtr("testString") + model.Issued = CreateMockDateTime("2019-01-01T12:00:00.000Z") + model.Expiry = CreateMockDateTime("2019-01-01T12:00:00.000Z") + model.Trusted = core.BoolPtr(true) + model.Href = core.StringPtr("testString") + + result, err := mqcloud.DataSourceIbmMqcloudTruststoreCertificateTrustStoreCertificateDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_user.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_user.go index c89a9e0f9eb..b46e6465ec7 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_user.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_user.go @@ -1,17 +1,23 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( "context" "fmt" + "log" "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" ) @@ -66,50 +72,41 @@ func DataSourceIbmMqcloudUser() *schema.Resource { func dataSourceIbmMqcloudUserRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_user", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Read User failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Read User failed: %s", err.Error()), "(Data) ibm_mqcloud_user", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } - serviceInstanceGuid := d.Get("service_instance_guid").(string) - - // Support for pagination - offset := int64(0) - limit := int64(25) - allItems := []mqcloudv1.UserDetails{} - - for { - listUsersOptions := &mqcloudv1.ListUsersOptions{ - ServiceInstanceGuid: &serviceInstanceGuid, - Limit: &limit, - Offset: &offset, - } - - result, response, err := mqcloudClient.ListUsersWithContext(context, listUsersOptions) - if err != nil { - return diag.FromErr(fmt.Errorf("[ERROR] Error Getting Users %s\n%s", err, response)) - } - if result == nil { - return diag.FromErr(fmt.Errorf("List Users returned nil")) - } + listUsersOptions := &mqcloudv1.ListUsersOptions{} - allItems = append(allItems, result.Users...) + listUsersOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) - // Check if the number of returned records is less than the limit - if int64(len(result.Users)) < limit { - break - } + var pager *mqcloudv1.UsersPager + pager, err = mqcloudClient.NewUsersPager(listUsersOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_user", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } - offset += limit + allItems, err := pager.GetAll() + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("UsersPager.GetAll() failed %s", err), "(Data) ibm_mqcloud_user", "read") + log.Printf("[DEBUG] %s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } // Use the provided filter argument and construct a new list with only the requested resource(s) var matchUsers []mqcloudv1.UserDetails - var name string var suppliedFilter bool + var name string if v, ok := d.GetOk("name"); ok { name = v.(string) @@ -137,15 +134,17 @@ func dataSourceIbmMqcloudUserRead(context context.Context, d *schema.ResourceDat mapSlice := []map[string]interface{}{} for _, modelItem := range allItems { modelItem := modelItem - modelMap, err := dataSourceIbmMqcloudUserUserDetailsToMap(&modelItem) + modelMap, err := DataSourceIbmMqcloudUserUserDetailsToMap(&modelItem) if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_mqcloud_user", "read") + return tfErr.GetDiag() } mapSlice = append(mapSlice, modelMap) } if err = d.Set("users", mapSlice); err != nil { - return diag.FromErr(fmt.Errorf("Error setting users: %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting users %s", err), "(Data) ibm_mqcloud_user", "read") + return tfErr.GetDiag() } return nil @@ -156,11 +155,11 @@ func dataSourceIbmMqcloudUserID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func dataSourceIbmMqcloudUserUserDetailsToMap(model *mqcloudv1.UserDetails) (map[string]interface{}, error) { +func DataSourceIbmMqcloudUserUserDetailsToMap(model *mqcloudv1.UserDetails) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["id"] = model.ID - modelMap["name"] = model.Name - modelMap["email"] = model.Email - modelMap["href"] = model.Href + modelMap["id"] = *model.ID + modelMap["name"] = *model.Name + modelMap["email"] = *model.Email + modelMap["href"] = *model.Href return modelMap, nil } diff --git a/ibm/service/mqcloud/data_source_ibm_mqcloud_user_test.go b/ibm/service/mqcloud/data_source_ibm_mqcloud_user_test.go index 8823e06d764..0b7edf6fec3 100644 --- a/ibm/service/mqcloud/data_source_ibm_mqcloud_user_test.go +++ b/ibm/service/mqcloud/data_source_ibm_mqcloud_user_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud_test import ( @@ -11,6 +15,10 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/mqcloud" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/mqcloud-go-sdk/mqcloudv1" + "github.com/stretchr/testify/assert" ) func TestAccIbmMqcloudUserDataSourceBasic(t *testing.T) { @@ -51,3 +59,25 @@ func testAccCheckIbmMqcloudUserDataSourceConfigBasic(userDetailsServiceInstanceG } `, userDetailsServiceInstanceGuid, userDetailsName, userDetailsEmail) } + +func TestDataSourceIbmMqcloudUserUserDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "testString" + model["name"] = "testString" + model["email"] = "user@host.org" + model["href"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(mqcloudv1.UserDetails) + model.ID = core.StringPtr("testString") + model.Name = core.StringPtr("testString") + model.Email = core.StringPtr("user@host.org") + model.Href = core.StringPtr("testString") + + result, err := mqcloud.DataSourceIbmMqcloudUserUserDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_application.go b/ibm/service/mqcloud/resource_ibm_mqcloud_application.go index 6b317ad242d..fb339ce2faf 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_application.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_application.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -88,11 +92,17 @@ func ResourceIbmMqcloudApplicationValidator() *validate.ResourceValidator { func resourceIbmMqcloudApplicationCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Create Application failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Create Application failed: %s", err.Error()), "ibm_mqcloud_application", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } createApplicationOptions := &mqcloudv1.CreateApplicationOptions{} @@ -100,10 +110,11 @@ func resourceIbmMqcloudApplicationCreate(context context.Context, d *schema.Reso createApplicationOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) createApplicationOptions.SetName(d.Get("name").(string)) - applicationCreated, response, err := mqcloudClient.CreateApplicationWithContext(context, createApplicationOptions) + applicationCreated, _, err := mqcloudClient.CreateApplicationWithContext(context, createApplicationOptions) if err != nil { - log.Printf("[DEBUG] CreateApplicationWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("CreateApplicationWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateApplicationWithContext failed: %s", err.Error()), "ibm_mqcloud_application", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId(fmt.Sprintf("%s/%s", *createApplicationOptions.ServiceInstanceGuid, *applicationCreated.ID)) @@ -114,14 +125,16 @@ func resourceIbmMqcloudApplicationCreate(context context.Context, d *schema.Reso func resourceIbmMqcloudApplicationRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } getApplicationOptions := &mqcloudv1.GetApplicationOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "read", "sep-id-parts").GetDiag() } getApplicationOptions.SetServiceInstanceGuid(parts[0]) @@ -133,24 +146,30 @@ func resourceIbmMqcloudApplicationRead(context context.Context, d *schema.Resour d.SetId("") return nil } - log.Printf("[DEBUG] GetApplicationWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("GetApplicationWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetApplicationWithContext failed: %s", err.Error()), "ibm_mqcloud_application", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } if err = d.Set("name", applicationDetails.Name); err != nil { - return diag.FromErr(fmt.Errorf("Error setting name: %s", err)) + err = fmt.Errorf("Error setting name: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "read", "set-name").GetDiag() } if err = d.Set("service_instance_guid", parts[0]); err != nil { - return diag.FromErr(fmt.Errorf("Error setting service instance guid: %s", err)) + err = fmt.Errorf("Error setting service_instance_guid: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "read", "set-service_instance_guid").GetDiag() } if err = d.Set("create_api_key_uri", applicationDetails.CreateApiKeyURI); err != nil { - return diag.FromErr(fmt.Errorf("Error setting create_api_key_uri: %s", err)) + err = fmt.Errorf("Error setting create_api_key_uri: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "read", "set-create_api_key_uri").GetDiag() } if err = d.Set("href", applicationDetails.Href); err != nil { - return diag.FromErr(fmt.Errorf("Error setting href: %s", err)) + err = fmt.Errorf("Error setting href: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "read", "set-href").GetDiag() } if err = d.Set("application_id", applicationDetails.ID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting application_id: %s", err)) + err = fmt.Errorf("Error setting application_id: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "read", "set-application_id").GetDiag() } return nil @@ -159,27 +178,33 @@ func resourceIbmMqcloudApplicationRead(context context.Context, d *schema.Resour func resourceIbmMqcloudApplicationDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Delete Application failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Delete Application failed: %s", err.Error()), "ibm_mqcloud_application", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } deleteApplicationOptions := &mqcloudv1.DeleteApplicationOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_application", "delete", "sep-id-parts").GetDiag() } deleteApplicationOptions.SetServiceInstanceGuid(parts[0]) deleteApplicationOptions.SetApplicationID(parts[1]) - response, err := mqcloudClient.DeleteApplicationWithContext(context, deleteApplicationOptions) + _, err = mqcloudClient.DeleteApplicationWithContext(context, deleteApplicationOptions) if err != nil { - log.Printf("[DEBUG] DeleteApplicationWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("DeleteApplicationWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteApplicationWithContext failed: %s", err.Error()), "ibm_mqcloud_application", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId("") diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_application_test.go b/ibm/service/mqcloud/resource_ibm_mqcloud_application_test.go index fec357e6ed4..de132abe23c 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_application_test.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_application_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package mqcloud_test diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate.go b/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate.go index 9cc0f6be061..7c0b03bac6f 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -17,6 +21,7 @@ import ( "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate" + "github.com/IBM/go-sdk-core/v5/core" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" ) @@ -24,6 +29,7 @@ func ResourceIbmMqcloudKeystoreCertificate() *schema.Resource { return &schema.Resource{ CreateContext: resourceIbmMqcloudKeystoreCertificateCreate, ReadContext: resourceIbmMqcloudKeystoreCertificateRead, + UpdateContext: resourceIbmMqcloudKeystoreCertificateUpdate, DeleteContext: resourceIbmMqcloudKeystoreCertificateDelete, Importer: &schema.ResourceImporter{}, @@ -116,6 +122,38 @@ func ResourceIbmMqcloudKeystoreCertificate() *schema.Resource { Computed: true, Description: "The URL for this key store certificate.", }, + "config": { + Type: schema.TypeList, + Optional: true, + Description: "The configuration details for this certificate.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "ams": { + Type: schema.TypeList, + Optional: true, + Description: "A list of channels that are configured with this certificate.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "channels": { + Type: schema.TypeList, + Optional: true, + Description: "A list of channels that are configured with this certificate.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Optional: true, + Description: "The name of the channel.", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, "certificate_id": { Type: schema.TypeString, Computed: true, @@ -164,12 +202,19 @@ func ResourceIbmMqcloudKeystoreCertificateValidator() *validate.ResourceValidato func resourceIbmMqcloudKeystoreCertificateCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Create Keystore Certificate failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Create Keystore Certificate failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + createKeyStorePemCertificateOptions := &mqcloudv1.CreateKeyStorePemCertificateOptions{} createKeyStorePemCertificateOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) @@ -177,32 +222,67 @@ func resourceIbmMqcloudKeystoreCertificateCreate(context context.Context, d *sch createKeyStorePemCertificateOptions.SetLabel(d.Get("label").(string)) certificateFileBytes, err := base64.StdEncoding.DecodeString(d.Get("certificate_file").(string)) if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "create", "parse-certificate_file").GetDiag() } createKeyStorePemCertificateOptions.SetCertificateFile(io.NopCloser(bytes.NewReader(certificateFileBytes))) - keyStoreCertificateDetails, response, err := mqcloudClient.CreateKeyStorePemCertificateWithContext(context, createKeyStorePemCertificateOptions) + keyStoreCertificateDetails, _, err := mqcloudClient.CreateKeyStorePemCertificateWithContext(context, createKeyStorePemCertificateOptions) if err != nil { - log.Printf("[DEBUG] CreateKeyStorePemCertificateWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("CreateKeyStorePemCertificateWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateKeyStorePemCertificateWithContext failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId(fmt.Sprintf("%s/%s/%s", *createKeyStorePemCertificateOptions.ServiceInstanceGuid, *createKeyStorePemCertificateOptions.QueueManagerID, *keyStoreCertificateDetails.ID)) + // Update channel after creating the certificate + setCertificateAmsChannelsOptions := &mqcloudv1.SetCertificateAmsChannelsOptions{} + + parts, err := flex.SepIdParts(d.Id(), "/") + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "create", "sep-id-parts").GetDiag() + } + setCertificateAmsChannelsOptions.SetServiceInstanceGuid(parts[0]) + setCertificateAmsChannelsOptions.SetQueueManagerID(parts[1]) + setCertificateAmsChannelsOptions.SetCertificateID(parts[2]) + + var channels []mqcloudv1.ChannelDetails + channels = []mqcloudv1.ChannelDetails{} + for _, v := range d.Get("config.0.ams.0.channels").([]interface{}) { + value := v.(map[string]interface{}) + channelsItem, err := ResourceIbmMqcloudKeystoreCertificateMapToChannelDetails(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "create", "parse-channels").GetDiag() + } + channels = append(channels, *channelsItem) + } + + setCertificateAmsChannelsOptions.SetChannels(channels) + setCertificateAmsChannelsOptions.SetUpdateStrategy("replace") + + _, _, err = mqcloudClient.SetCertificateAmsChannelsWithContext(context, setCertificateAmsChannelsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("SetCertificateAmsChannelsWithContext failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + return resourceIbmMqcloudKeystoreCertificateRead(context, d, meta) } func resourceIbmMqcloudKeystoreCertificateRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } getKeyStoreCertificateOptions := &mqcloudv1.GetKeyStoreCertificateOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "sep-id-parts").GetDiag() } getKeyStoreCertificateOptions.SetServiceInstanceGuid(parts[0]) @@ -215,90 +295,246 @@ func resourceIbmMqcloudKeystoreCertificateRead(context context.Context, d *schem d.SetId("") return nil } - log.Printf("[DEBUG] GetKeyStoreCertificateWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("GetKeyStoreCertificateWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetKeyStoreCertificateWithContext failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } if err = d.Set("service_instance_guid", parts[0]); err != nil { - return diag.FromErr(fmt.Errorf("Error setting service_instance_guid: %s", err)) + err = fmt.Errorf("Error setting service_instance_guid: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-service_instance_guid").GetDiag() } if err = d.Set("queue_manager_id", parts[1]); err != nil { - return diag.FromErr(fmt.Errorf("Error setting queue_manager_id: %s", err)) + err = fmt.Errorf("Error setting queue_manager_id: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-queue_manager_id").GetDiag() } if err = d.Set("label", keyStoreCertificateDetails.Label); err != nil { - return diag.FromErr(fmt.Errorf("Error setting label: %s", err)) + err = fmt.Errorf("Error setting label: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-label").GetDiag() } if err = d.Set("certificate_type", keyStoreCertificateDetails.CertificateType); err != nil { - return diag.FromErr(fmt.Errorf("Error setting certificate_type: %s", err)) + err = fmt.Errorf("Error setting certificate_type: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-certificate_type").GetDiag() } if err = d.Set("fingerprint_sha256", keyStoreCertificateDetails.FingerprintSha256); err != nil { - return diag.FromErr(fmt.Errorf("Error setting fingerprint_sha256: %s", err)) + err = fmt.Errorf("Error setting fingerprint_sha256: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-fingerprint_sha256").GetDiag() } if err = d.Set("subject_dn", keyStoreCertificateDetails.SubjectDn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting subject_dn: %s", err)) + err = fmt.Errorf("Error setting subject_dn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-subject_dn").GetDiag() } if err = d.Set("subject_cn", keyStoreCertificateDetails.SubjectCn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting subject_cn: %s", err)) + err = fmt.Errorf("Error setting subject_cn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-subject_cn").GetDiag() } if err = d.Set("issuer_dn", keyStoreCertificateDetails.IssuerDn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting issuer_dn: %s", err)) + err = fmt.Errorf("Error setting issuer_dn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-issuer_dn").GetDiag() } if err = d.Set("issuer_cn", keyStoreCertificateDetails.IssuerCn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting issuer_cn: %s", err)) + err = fmt.Errorf("Error setting issuer_cn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-issuer_cn").GetDiag() } if err = d.Set("issued", flex.DateTimeToString(keyStoreCertificateDetails.Issued)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting issued: %s", err)) + err = fmt.Errorf("Error setting issued: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-issued").GetDiag() } if err = d.Set("expiry", flex.DateTimeToString(keyStoreCertificateDetails.Expiry)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting expiry: %s", err)) + err = fmt.Errorf("Error setting expiry: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-expiry").GetDiag() } if err = d.Set("is_default", keyStoreCertificateDetails.IsDefault); err != nil { - return diag.FromErr(fmt.Errorf("Error setting is_default: %s", err)) + err = fmt.Errorf("Error setting is_default: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-is_default").GetDiag() } if err = d.Set("dns_names_total_count", flex.IntValue(keyStoreCertificateDetails.DnsNamesTotalCount)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting dns_names_total_count: %s", err)) + err = fmt.Errorf("Error setting dns_names_total_count: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-dns_names_total_count").GetDiag() } if err = d.Set("dns_names", keyStoreCertificateDetails.DnsNames); err != nil { - return diag.FromErr(fmt.Errorf("Error setting dns_names: %s", err)) + err = fmt.Errorf("Error setting dns_names: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-dns_names").GetDiag() } if err = d.Set("href", keyStoreCertificateDetails.Href); err != nil { - return diag.FromErr(fmt.Errorf("Error setting href: %s", err)) + err = fmt.Errorf("Error setting href: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-href").GetDiag() + } + configMap, err := ResourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(keyStoreCertificateDetails.Config) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "config-to-map").GetDiag() + } + // Check if configMap is not empty and contains non-empty lists before setting it + if len(configMap) > 0 && len(configMap["ams"].([]map[string]interface{})) > 0 && len(configMap["ams"].([]map[string]interface{})[0]["channels"].([]map[string]interface{})) > 0 { + if err = d.Set("config", []map[string]interface{}{configMap}); err != nil { + err = fmt.Errorf("Error setting config: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-config").GetDiag() + } } if err = d.Set("certificate_id", keyStoreCertificateDetails.ID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting certificate_id: %s", err)) + err = fmt.Errorf("Error setting certificate_id: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "read", "set-certificate_id").GetDiag() } return nil } +func resourceIbmMqcloudKeystoreCertificateUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() + if err != nil { + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "update") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + err = checkSIPlan(d, meta) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Update Keystore Certificate failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "update") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + setCertificateAmsChannelsOptions := &mqcloudv1.SetCertificateAmsChannelsOptions{} + + parts, err := flex.SepIdParts(d.Id(), "/") + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "update", "sep-id-parts").GetDiag() + } + + setCertificateAmsChannelsOptions.SetServiceInstanceGuid(parts[0]) + setCertificateAmsChannelsOptions.SetQueueManagerID(parts[1]) + setCertificateAmsChannelsOptions.SetCertificateID(parts[2]) + + hasChange := false + + if d.HasChange("queue_manager_id") { + errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+ + " The resource must be re-created to update this property.", "queue_manager_id") + return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_mqcloud_keystore_certificate", "update", "queue_manager_id-forces-new").GetDiag() + } + if d.HasChange("service_instance_guid") { + errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+ + " The resource must be re-created to update this property.", "service_instance_guid") + return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_mqcloud_keystore_certificate", "update", "service_instance_guid-forces-new").GetDiag() + } + if d.HasChange("config.0.ams.0") { + var channels []mqcloudv1.ChannelDetails + channels = []mqcloudv1.ChannelDetails{} + for _, v := range d.Get("config.0.ams.0.channels").([]interface{}) { + value := v.(map[string]interface{}) + channelsItem, err := ResourceIbmMqcloudKeystoreCertificateMapToChannelDetails(value) + if err != nil { + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "update", "parse-channels").GetDiag() + } + channels = append(channels, *channelsItem) + } + setCertificateAmsChannelsOptions.SetChannels(channels) + setCertificateAmsChannelsOptions.SetUpdateStrategy("replace") + hasChange = true + } + + if hasChange { + _, _, err = mqcloudClient.SetCertificateAmsChannelsWithContext(context, setCertificateAmsChannelsOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("SetCertificateAmsChannelsWithContext failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "update") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + } + + return resourceIbmMqcloudKeystoreCertificateRead(context, d, meta) +} + func resourceIbmMqcloudKeystoreCertificateDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Delete Keystore Certificate failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Delete Keystore Certificate failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } deleteKeyStoreCertificateOptions := &mqcloudv1.DeleteKeyStoreCertificateOptions{} + setCertificateAmsChannelsOptions := &mqcloudv1.SetCertificateAmsChannelsOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_keystore_certificate", "delete", "sep-id-parts").GetDiag() } deleteKeyStoreCertificateOptions.SetServiceInstanceGuid(parts[0]) deleteKeyStoreCertificateOptions.SetQueueManagerID(parts[1]) deleteKeyStoreCertificateOptions.SetCertificateID(parts[2]) - response, err := mqcloudClient.DeleteKeyStoreCertificateWithContext(context, deleteKeyStoreCertificateOptions) + setCertificateAmsChannelsOptions.SetServiceInstanceGuid(parts[0]) + setCertificateAmsChannelsOptions.SetQueueManagerID(parts[1]) + setCertificateAmsChannelsOptions.SetCertificateID(parts[2]) + channels := []mqcloudv1.ChannelDetails{} + setCertificateAmsChannelsOptions.SetChannels(channels) + setCertificateAmsChannelsOptions.SetUpdateStrategy("replace") + + _, _, err = mqcloudClient.SetCertificateAmsChannelsWithContext(context, setCertificateAmsChannelsOptions) if err != nil { - log.Printf("[DEBUG] DeleteKeyStoreCertificateWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("DeleteKeyStoreCertificateWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteKeyStoreCertificateWithContext failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() + } + + _, err = mqcloudClient.DeleteKeyStoreCertificateWithContext(context, deleteKeyStoreCertificateOptions) + if err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteKeyStoreCertificateWithContext failed: %s", err.Error()), "ibm_mqcloud_keystore_certificate", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId("") return nil } + +func ResourceIbmMqcloudKeystoreCertificateMapToChannelDetails(modelMap map[string]interface{}) (*mqcloudv1.ChannelDetails, error) { + model := &mqcloudv1.ChannelDetails{} + if modelMap["name"] != nil && modelMap["name"].(string) != "" { + model.Name = core.StringPtr(modelMap["name"].(string)) + } + return model, nil +} + +func ResourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(model *mqcloudv1.CertificateConfiguration) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + amsMap, err := ResourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(model.Ams) + if err != nil { + return modelMap, err + } + modelMap["ams"] = []map[string]interface{}{amsMap} + return modelMap, nil +} + +func ResourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(model *mqcloudv1.ChannelsDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + channels := []map[string]interface{}{} + for _, channelsItem := range model.Channels { + channelsItem := channelsItem + channelsItemMap, err := ResourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(&channelsItem) + if err != nil { + return modelMap, err + } + channels = append(channels, channelsItemMap) + } + modelMap["channels"] = channels + return modelMap, nil +} + +func ResourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(model *mqcloudv1.ChannelDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Name != nil { + modelMap["name"] = *model.Name + } + return modelMap, nil +} diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate_test.go b/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate_test.go index 83461fc0a28..6dc08c7ff10 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate_test.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_keystore_certificate_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package mqcloud_test @@ -14,7 +14,10 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/mqcloud" + "github.com/IBM/go-sdk-core/v5/core" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" + "github.com/stretchr/testify/assert" ) func TestAccIbmMqcloudKeystoreCertificateBasic(t *testing.T) { @@ -126,3 +129,69 @@ func testAccCheckIbmMqcloudKeystoreCertificateDestroy(s *terraform.State) error return nil } + +func TestResourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + channelDetailsModel := make(map[string]interface{}) + channelDetailsModel["name"] = "CLOUD.APP.SVRCONN" + + channelsDetailsModel := make(map[string]interface{}) + channelsDetailsModel["channels"] = []map[string]interface{}{channelDetailsModel} + + model := make(map[string]interface{}) + model["ams"] = []map[string]interface{}{channelsDetailsModel} + + assert.Equal(t, result, model) + } + + channelDetailsModel := new(mqcloudv1.ChannelDetails) + channelDetailsModel.Name = core.StringPtr("CLOUD.APP.SVRCONN") + + channelsDetailsModel := new(mqcloudv1.ChannelsDetails) + channelsDetailsModel.Channels = []mqcloudv1.ChannelDetails{*channelDetailsModel} + + model := new(mqcloudv1.CertificateConfiguration) + model.Ams = channelsDetailsModel + + result, err := mqcloud.ResourceIbmMqcloudKeystoreCertificateCertificateConfigurationToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + channelDetailsModel := make(map[string]interface{}) + channelDetailsModel["name"] = "CLOUD.APP.SVRCONN" + + model := make(map[string]interface{}) + model["channels"] = []map[string]interface{}{channelDetailsModel} + + assert.Equal(t, result, model) + } + + channelDetailsModel := new(mqcloudv1.ChannelDetails) + channelDetailsModel.Name = core.StringPtr("CLOUD.APP.SVRCONN") + + model := new(mqcloudv1.ChannelsDetails) + model.Channels = []mqcloudv1.ChannelDetails{*channelDetailsModel} + + result, err := mqcloud.ResourceIbmMqcloudKeystoreCertificateChannelsDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["name"] = "testString" + + assert.Equal(t, result, model) + } + + model := new(mqcloudv1.ChannelDetails) + model.Name = core.StringPtr("testString") + + result, err := mqcloud.ResourceIbmMqcloudKeystoreCertificateChannelDetailsToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager.go b/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager.go index 252837593f0..f0509d3fa0e 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -27,6 +31,11 @@ func ResourceIbmMqcloudQueueManager() *schema.Resource { UpdateContext: resourceIbmMqcloudQueueManagerUpdate, DeleteContext: resourceIbmMqcloudQueueManagerDelete, Importer: &schema.ResourceImporter{}, + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(15 * time.Minute), + Update: schema.DefaultTimeout(5 * time.Minute), + Delete: schema.DefaultTimeout(5 * time.Minute), + }, Schema: map[string]*schema.Schema{ "service_instance_guid": { @@ -62,7 +71,7 @@ func ResourceIbmMqcloudQueueManager() *schema.Resource { Required: true, ForceNew: true, ValidateFunc: validate.InvokeValidator("ibm_mqcloud_queue_manager", "size"), - Description: "The queue manager sizes of deployment available. Deployment of lite queue managers for aws_us_east_1 and aws_eu_west_1 locations is not available.", + Description: "The queue manager sizes of deployment available.", }, "version": { Type: schema.TypeString, @@ -122,11 +131,6 @@ func ResourceIbmMqcloudQueueManager() *schema.Resource { Description: "The ID of the queue manager which was allocated on creation, and can be used for delete calls.", }, }, - Timeouts: &schema.ResourceTimeout{ - Create: schema.DefaultTimeout(15 * time.Minute), - Delete: schema.DefaultTimeout(5 * time.Minute), - Update: schema.DefaultTimeout(5 * time.Minute), - }, } } @@ -174,7 +178,7 @@ func ResourceIbmMqcloudQueueManagerValidator() *validate.ResourceValidator { ValidateFunctionIdentifier: validate.ValidateAllowedStringValue, Type: validate.TypeString, Required: true, - AllowedValues: "large, lite, medium, small, xsmall", + AllowedValues: "large, medium, small, xsmall", }, validate.ValidateSchema{ Identifier: "version", @@ -194,12 +198,17 @@ func ResourceIbmMqcloudQueueManagerValidator() *validate.ResourceValidator { func resourceIbmMqcloudQueueManagerCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Create Queue Manager failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Create Queue Manager failed: %s", err.Error()), "ibm_mqcloud_queue_manager", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } createQueueManagerOptions := &mqcloudv1.CreateQueueManagerOptions{} @@ -215,10 +224,11 @@ func resourceIbmMqcloudQueueManagerCreate(context context.Context, d *schema.Res createQueueManagerOptions.SetVersion(d.Get("version").(string)) } - queueManagerTaskStatus, response, err := mqcloudClient.CreateQueueManagerWithContext(context, createQueueManagerOptions) + queueManagerTaskStatus, _, err := mqcloudClient.CreateQueueManagerWithContext(context, createQueueManagerOptions) if err != nil { - log.Printf("[DEBUG] CreateQueueManagerWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("CreateQueueManagerWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateQueueManagerWithContext failed: %s", err.Error()), "ibm_mqcloud_queue_manager", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId(fmt.Sprintf("%s/%s", *createQueueManagerOptions.ServiceInstanceGuid, *queueManagerTaskStatus.QueueManagerID)) @@ -228,7 +238,6 @@ func resourceIbmMqcloudQueueManagerCreate(context context.Context, d *schema.Res return diag.FromErr(fmt.Errorf("[ERROR] Error waiting for Queue Manager (%s) to be in running state: %s", *queueManagerTaskStatus.QueueManagerID, err)) } } - d.SetId(fmt.Sprintf("%s/%s", *createQueueManagerOptions.ServiceInstanceGuid, *queueManagerTaskStatus.QueueManagerID)) return resourceIbmMqcloudQueueManagerRead(context, d, meta) } @@ -236,14 +245,16 @@ func resourceIbmMqcloudQueueManagerCreate(context context.Context, d *schema.Res func resourceIbmMqcloudQueueManagerRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } getQueueManagerOptions := &mqcloudv1.GetQueueManagerOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "sep-id-parts").GetDiag() } getQueueManagerOptions.SetServiceInstanceGuid(parts[0]) @@ -269,61 +280,78 @@ func resourceIbmMqcloudQueueManagerRead(context context.Context, d *schema.Resou d.SetId("") return nil } - log.Printf("[DEBUG] GetQueueManagerWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("GetQueueManagerWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetQueueManagerWithContext failed: %s", err.Error()), "ibm_mqcloud_queue_manager", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } if err = d.Set("service_instance_guid", parts[0]); err != nil { - return diag.FromErr(fmt.Errorf("Error setting service_instance_guid: %s", err)) + err = fmt.Errorf("Error setting service_instance_guid: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-service_instance_guid").GetDiag() } if err = d.Set("name", queueManagerDetails.Name); err != nil { - return diag.FromErr(fmt.Errorf("Error setting name: %s", err)) + err = fmt.Errorf("Error setting name: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-name").GetDiag() } if !core.IsNil(queueManagerDetails.DisplayName) { if err = d.Set("display_name", queueManagerDetails.DisplayName); err != nil { - return diag.FromErr(fmt.Errorf("Error setting display_name: %s", err)) + err = fmt.Errorf("Error setting display_name: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-display_name").GetDiag() } } if err = d.Set("location", queueManagerDetails.Location); err != nil { - return diag.FromErr(fmt.Errorf("Error setting location: %s", err)) + err = fmt.Errorf("Error setting location: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-location").GetDiag() } if err = d.Set("size", queueManagerDetails.Size); err != nil { - return diag.FromErr(fmt.Errorf("Error setting size: %s", err)) + err = fmt.Errorf("Error setting size: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-size").GetDiag() } if !core.IsNil(queueManagerDetails.Version) { if err = d.Set("version", queueManagerDetails.Version); err != nil { - return diag.FromErr(fmt.Errorf("Error setting version: %s", err)) + err = fmt.Errorf("Error setting version: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-version").GetDiag() } } if err = d.Set("status_uri", queueManagerDetails.StatusURI); err != nil { - return diag.FromErr(fmt.Errorf("Error setting status_uri: %s", err)) + err = fmt.Errorf("Error setting status_uri: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-status_uri").GetDiag() } if err = d.Set("web_console_url", queueManagerDetails.WebConsoleURL); err != nil { - return diag.FromErr(fmt.Errorf("Error setting web_console_url: %s", err)) + err = fmt.Errorf("Error setting web_console_url: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-web_console_url").GetDiag() } if err = d.Set("rest_api_endpoint_url", queueManagerDetails.RestApiEndpointURL); err != nil { - return diag.FromErr(fmt.Errorf("Error setting rest_api_endpoint_url: %s", err)) + err = fmt.Errorf("Error setting rest_api_endpoint_url: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-rest_api_endpoint_url").GetDiag() } if err = d.Set("administrator_api_endpoint_url", queueManagerDetails.AdministratorApiEndpointURL); err != nil { - return diag.FromErr(fmt.Errorf("Error setting administrator_api_endpoint_url: %s", err)) + err = fmt.Errorf("Error setting administrator_api_endpoint_url: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-administrator_api_endpoint_url").GetDiag() } if err = d.Set("connection_info_uri", queueManagerDetails.ConnectionInfoURI); err != nil { - return diag.FromErr(fmt.Errorf("Error setting connection_info_uri: %s", err)) + err = fmt.Errorf("Error setting connection_info_uri: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-connection_info_uri").GetDiag() } if err = d.Set("date_created", flex.DateTimeToString(queueManagerDetails.DateCreated)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting date_created: %s", err)) + err = fmt.Errorf("Error setting date_created: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-date_created").GetDiag() } if err = d.Set("upgrade_available", queueManagerDetails.UpgradeAvailable); err != nil { - return diag.FromErr(fmt.Errorf("Error setting upgrade_available: %s", err)) + err = fmt.Errorf("Error setting upgrade_available: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-upgrade_available").GetDiag() } if err = d.Set("available_upgrade_versions_uri", queueManagerDetails.AvailableUpgradeVersionsURI); err != nil { - return diag.FromErr(fmt.Errorf("Error setting available_upgrade_versions_uri: %s", err)) + err = fmt.Errorf("Error setting available_upgrade_versions_uri: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-available_upgrade_versions_uri").GetDiag() } if err = d.Set("href", queueManagerDetails.Href); err != nil { - return diag.FromErr(fmt.Errorf("Error setting href: %s", err)) + err = fmt.Errorf("Error setting href: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-href").GetDiag() } if err = d.Set("queue_manager_id", queueManagerDetails.ID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting queue_manager_id: %s", err)) + err = fmt.Errorf("Error setting queue_manager_id: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "read", "set-queue_manager_id").GetDiag() } return nil @@ -332,19 +360,23 @@ func resourceIbmMqcloudQueueManagerRead(context context.Context, d *schema.Resou func resourceIbmMqcloudQueueManagerUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "update") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Update Queue Manager failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Update Queue Manager failed: %s", err.Error()), "ibm_mqcloud_queue_manager", "update") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } setQueueManagerVersionOptions := &mqcloudv1.SetQueueManagerVersionOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "update", "sep-id-parts").GetDiag() } setQueueManagerVersionOptions.SetServiceInstanceGuid(parts[0]) @@ -352,6 +384,11 @@ func resourceIbmMqcloudQueueManagerUpdate(context context.Context, d *schema.Res hasChange := false + if d.HasChange("service_instance_guid") { + errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+ + " The resource must be re-created to update this property.", "service_instance_guid") + return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_mqcloud_queue_manager", "update", "service_instance_guid-forces-new").GetDiag() + } if d.HasChange("version") { oldVersion, newVersion := d.GetChange("version") if IsVersionDowngrade(oldVersion.(string), newVersion.(string)) { @@ -362,10 +399,11 @@ func resourceIbmMqcloudQueueManagerUpdate(context context.Context, d *schema.Res } if hasChange { - _, response, err := mqcloudClient.SetQueueManagerVersionWithContext(context, setQueueManagerVersionOptions) + _, _, err = mqcloudClient.SetQueueManagerVersionWithContext(context, setQueueManagerVersionOptions) if err != nil { - log.Printf("[DEBUG] SetQueueManagerVersionWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("SetQueueManagerVersionWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("SetQueueManagerVersionWithContext failed: %s", err.Error()), "ibm_mqcloud_queue_manager", "update") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } if waitForQmStatus { _, err = waitForQmStatusUpdate(context, d, meta) @@ -381,28 +419,33 @@ func resourceIbmMqcloudQueueManagerUpdate(context context.Context, d *schema.Res func resourceIbmMqcloudQueueManagerDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Delete Queue Manager failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Delete Queue Manager failed: %s", err.Error()), "ibm_mqcloud_queue_manager", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } deleteQueueManagerOptions := &mqcloudv1.DeleteQueueManagerOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_queue_manager", "delete", "sep-id-parts").GetDiag() } deleteQueueManagerOptions.SetServiceInstanceGuid(parts[0]) deleteQueueManagerOptions.SetQueueManagerID(parts[1]) - _, response, err := mqcloudClient.DeleteQueueManagerWithContext(context, deleteQueueManagerOptions) + _, _, err = mqcloudClient.DeleteQueueManagerWithContext(context, deleteQueueManagerOptions) if err != nil { - log.Printf("[DEBUG] DeleteQueueManagerWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("DeleteQueueManagerWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteQueueManagerWithContext failed: %s", err.Error()), "ibm_mqcloud_queue_manager", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } if waitForQmStatus { _, err = waitForQueueManagerToDelete(context, d, meta) diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager_test.go b/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager_test.go index d010549e4f0..8511943a319 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager_test.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_queue_manager_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package mqcloud_test @@ -7,6 +7,7 @@ import ( "fmt" "testing" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" @@ -14,7 +15,6 @@ import ( "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" ) func TestAccIbmMqcloudQueueManagerBasic(t *testing.T) { @@ -23,7 +23,7 @@ func TestAccIbmMqcloudQueueManagerBasic(t *testing.T) { serviceInstanceGuid := acc.MqcloudInstanceID name := fmt.Sprintf("tf_queue_manager_basic%d", acctest.RandIntRange(10, 100)) location := acc.MqCloudQueueManagerLocation - size := "small" + size := "xsmall" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheckMqcloud(t) }, @@ -51,7 +51,7 @@ func TestAccIbmMqcloudQueueManagerAllArgs(t *testing.T) { name := fmt.Sprintf("tf_queue_manager_allargs%d", acctest.RandIntRange(10, 100)) displayName := name location := acc.MqCloudQueueManagerLocation - size := "small" + size := "xsmall" version := acc.MqCloudQueueManagerVersion versionUpdate := acc.MqCloudQueueManagerVersionUpdate diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate.go b/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate.go index ed12be2ddf4..5addded2cbb 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -153,11 +157,17 @@ func ResourceIbmMqcloudTruststoreCertificateValidator() *validate.ResourceValida func resourceIbmMqcloudTruststoreCertificateCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Create Truststore Certificate failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Create Truststore Certificate failed: %s", err.Error()), "ibm_mqcloud_truststore_certificate", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } createTrustStorePemCertificateOptions := &mqcloudv1.CreateTrustStorePemCertificateOptions{} @@ -167,14 +177,15 @@ func resourceIbmMqcloudTruststoreCertificateCreate(context context.Context, d *s createTrustStorePemCertificateOptions.SetLabel(d.Get("label").(string)) certificateFileBytes, err := base64.StdEncoding.DecodeString(d.Get("certificate_file").(string)) if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "create", "parse-certificate_file").GetDiag() } createTrustStorePemCertificateOptions.SetCertificateFile(io.NopCloser(bytes.NewReader(certificateFileBytes))) - trustStoreCertificateDetails, response, err := mqcloudClient.CreateTrustStorePemCertificateWithContext(context, createTrustStorePemCertificateOptions) + trustStoreCertificateDetails, _, err := mqcloudClient.CreateTrustStorePemCertificateWithContext(context, createTrustStorePemCertificateOptions) if err != nil { - log.Printf("[DEBUG] CreateTrustStorePemCertificateWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("CreateTrustStorePemCertificateWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateTrustStorePemCertificateWithContext failed: %s", err.Error()), "ibm_mqcloud_truststore_certificate", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId(fmt.Sprintf("%s/%s/%s", *createTrustStorePemCertificateOptions.ServiceInstanceGuid, *createTrustStorePemCertificateOptions.QueueManagerID, *trustStoreCertificateDetails.ID)) @@ -185,14 +196,16 @@ func resourceIbmMqcloudTruststoreCertificateCreate(context context.Context, d *s func resourceIbmMqcloudTruststoreCertificateRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } getTrustStoreCertificateOptions := &mqcloudv1.GetTrustStoreCertificateOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "sep-id-parts").GetDiag() } getTrustStoreCertificateOptions.SetServiceInstanceGuid(parts[0]) @@ -205,51 +218,66 @@ func resourceIbmMqcloudTruststoreCertificateRead(context context.Context, d *sch d.SetId("") return nil } - log.Printf("[DEBUG] GetTrustStoreCertificateWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("GetTrustStoreCertificateWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetTrustStoreCertificateWithContext failed: %s", err.Error()), "ibm_mqcloud_truststore_certificate", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } if err = d.Set("service_instance_guid", parts[0]); err != nil { - return diag.FromErr(fmt.Errorf("Error setting service_instance_guid: %s", err)) + err = fmt.Errorf("Error setting service_instance_guid: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-service_instance_guid").GetDiag() } if err = d.Set("queue_manager_id", parts[1]); err != nil { - return diag.FromErr(fmt.Errorf("Error setting queue_manager_id: %s", err)) + err = fmt.Errorf("Error setting service_instance_guid: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-queue_manager_id").GetDiag() } if err = d.Set("label", trustStoreCertificateDetails.Label); err != nil { - return diag.FromErr(fmt.Errorf("Error setting label: %s", err)) + err = fmt.Errorf("Error setting label: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-label").GetDiag() } if err = d.Set("certificate_type", trustStoreCertificateDetails.CertificateType); err != nil { - return diag.FromErr(fmt.Errorf("Error setting certificate_type: %s", err)) + err = fmt.Errorf("Error setting certificate_type: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-certificate_type").GetDiag() } if err = d.Set("fingerprint_sha256", trustStoreCertificateDetails.FingerprintSha256); err != nil { - return diag.FromErr(fmt.Errorf("Error setting fingerprint_sha256: %s", err)) + err = fmt.Errorf("Error setting fingerprint_sha256: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-fingerprint_sha256").GetDiag() } if err = d.Set("subject_dn", trustStoreCertificateDetails.SubjectDn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting subject_dn: %s", err)) + err = fmt.Errorf("Error setting subject_dn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-subject_dn").GetDiag() } if err = d.Set("subject_cn", trustStoreCertificateDetails.SubjectCn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting subject_cn: %s", err)) + err = fmt.Errorf("Error setting subject_cn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-subject_cn").GetDiag() } if err = d.Set("issuer_dn", trustStoreCertificateDetails.IssuerDn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting issuer_dn: %s", err)) + err = fmt.Errorf("Error setting issuer_dn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-issuer_dn").GetDiag() } if err = d.Set("issuer_cn", trustStoreCertificateDetails.IssuerCn); err != nil { - return diag.FromErr(fmt.Errorf("Error setting issuer_cn: %s", err)) + err = fmt.Errorf("Error setting issuer_cn: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-issuer_cn").GetDiag() } if err = d.Set("issued", flex.DateTimeToString(trustStoreCertificateDetails.Issued)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting issued: %s", err)) + err = fmt.Errorf("Error setting issued: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-issued").GetDiag() } if err = d.Set("expiry", flex.DateTimeToString(trustStoreCertificateDetails.Expiry)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting expiry: %s", err)) + err = fmt.Errorf("Error setting expiry: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-expiry").GetDiag() } if err = d.Set("trusted", trustStoreCertificateDetails.Trusted); err != nil { - return diag.FromErr(fmt.Errorf("Error setting trusted: %s", err)) + err = fmt.Errorf("Error setting trusted: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-trusted").GetDiag() } if err = d.Set("href", trustStoreCertificateDetails.Href); err != nil { - return diag.FromErr(fmt.Errorf("Error setting href: %s", err)) + err = fmt.Errorf("Error setting href: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-href").GetDiag() } if err = d.Set("certificate_id", trustStoreCertificateDetails.ID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting certificate_id: %s", err)) + err = fmt.Errorf("Error setting certificate_id: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "read", "set-certificate_id").GetDiag() } return nil @@ -258,27 +286,34 @@ func resourceIbmMqcloudTruststoreCertificateRead(context context.Context, d *sch func resourceIbmMqcloudTruststoreCertificateDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Delete Truststore Certificate failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Delete Truststore Certificate failed: %s", err.Error()), "ibm_mqcloud_truststore_certificate", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + deleteTrustStoreCertificateOptions := &mqcloudv1.DeleteTrustStoreCertificateOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_truststore_certificate", "delete", "sep-id-parts").GetDiag() } deleteTrustStoreCertificateOptions.SetServiceInstanceGuid(parts[0]) deleteTrustStoreCertificateOptions.SetQueueManagerID(parts[1]) deleteTrustStoreCertificateOptions.SetCertificateID(parts[2]) - response, err := mqcloudClient.DeleteTrustStoreCertificateWithContext(context, deleteTrustStoreCertificateOptions) + _, err = mqcloudClient.DeleteTrustStoreCertificateWithContext(context, deleteTrustStoreCertificateOptions) if err != nil { - log.Printf("[DEBUG] DeleteTrustStoreCertificateWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("DeleteTrustStoreCertificateWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteTrustStoreCertificateWithContext failed: %s", err.Error()), "ibm_mqcloud_truststore_certificate", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId("") diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate_test.go b/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate_test.go index bfea0ce68e4..6c8e2e70ba4 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate_test.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_truststore_certificate_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package mqcloud_test diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_user.go b/ibm/service/mqcloud/resource_ibm_mqcloud_user.go index 3509b1d1daa..4fe023ec38c 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_user.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_user.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.90.0-5aad763d-20240506-203857 + */ + package mqcloud import ( @@ -98,22 +102,30 @@ func ResourceIbmMqcloudUserValidator() *validate.ResourceValidator { func resourceIbmMqcloudUserCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + // Error is coming from SDK client, so it doesn't need to be discriminated. + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Create User failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Create User failed: %s", err.Error()), "ibm_mqcloud_user", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + createUserOptions := &mqcloudv1.CreateUserOptions{} createUserOptions.SetServiceInstanceGuid(d.Get("service_instance_guid").(string)) createUserOptions.SetEmail(d.Get("email").(string)) createUserOptions.SetName(d.Get("name").(string)) - userDetails, response, err := mqcloudClient.CreateUserWithContext(context, createUserOptions) + userDetails, _, err := mqcloudClient.CreateUserWithContext(context, createUserOptions) if err != nil { - log.Printf("[DEBUG] CreateUserWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("CreateUserWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("CreateUserWithContext failed: %s", err.Error()), "ibm_mqcloud_user", "create") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId(fmt.Sprintf("%s/%s", *createUserOptions.ServiceInstanceGuid, *userDetails.ID)) @@ -124,14 +136,16 @@ func resourceIbmMqcloudUserCreate(context context.Context, d *schema.ResourceDat func resourceIbmMqcloudUserRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } getUserOptions := &mqcloudv1.GetUserOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "read", "sep-id-parts").GetDiag() } getUserOptions.SetServiceInstanceGuid(parts[0]) @@ -143,23 +157,30 @@ func resourceIbmMqcloudUserRead(context context.Context, d *schema.ResourceData, d.SetId("") return nil } - log.Printf("[DEBUG] GetUserWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("GetUserWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetUserWithContext failed: %s", err.Error()), "ibm_mqcloud_user", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } if err = d.Set("service_instance_guid", parts[0]); err != nil { - return diag.FromErr(fmt.Errorf("Error setting service_instance_guid: %s", err)) + err = fmt.Errorf("Error setting service_instance_guid: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "read", "set-service_instance_guid").GetDiag() } + if err = d.Set("name", userDetails.Name); err != nil { - return diag.FromErr(fmt.Errorf("Error setting name: %s", err)) + err = fmt.Errorf("Error setting name: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "read", "set-name").GetDiag() } if err = d.Set("email", userDetails.Email); err != nil { - return diag.FromErr(fmt.Errorf("Error setting email: %s", err)) + err = fmt.Errorf("Error setting email: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "read", "set-email").GetDiag() } if err = d.Set("href", userDetails.Href); err != nil { - return diag.FromErr(fmt.Errorf("Error setting href: %s", err)) + err = fmt.Errorf("Error setting href: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "read", "set-href").GetDiag() } if err = d.Set("user_id", userDetails.ID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting user_id: %s", err)) + err = fmt.Errorf("Error setting user_id: %s", err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "read", "set-user_id").GetDiag() } return nil @@ -168,26 +189,33 @@ func resourceIbmMqcloudUserRead(context context.Context, d *schema.ResourceData, func resourceIbmMqcloudUserDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { mqcloudClient, err := meta.(conns.ClientSession).MqcloudV1() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + err = checkSIPlan(d, meta) if err != nil { - return diag.FromErr(fmt.Errorf("Delete User failed %s", err)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Delete User failed: %s", err.Error()), "ibm_mqcloud_user", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } + deleteUserOptions := &mqcloudv1.DeleteUserOptions{} parts, err := flex.SepIdParts(d.Id(), "/") if err != nil { - return diag.FromErr(err) + return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_mqcloud_user", "delete", "sep-id-parts").GetDiag() } deleteUserOptions.SetServiceInstanceGuid(parts[0]) deleteUserOptions.SetUserID(parts[1]) - response, err := mqcloudClient.DeleteUserWithContext(context, deleteUserOptions) + _, err = mqcloudClient.DeleteUserWithContext(context, deleteUserOptions) if err != nil { - log.Printf("[DEBUG] DeleteUserWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("DeleteUserWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("DeleteUserWithContext failed: %s", err.Error()), "ibm_mqcloud_user", "delete") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId("") diff --git a/ibm/service/mqcloud/resource_ibm_mqcloud_user_test.go b/ibm/service/mqcloud/resource_ibm_mqcloud_user_test.go index fd7ad738af1..745a3858932 100644 --- a/ibm/service/mqcloud/resource_ibm_mqcloud_user_test.go +++ b/ibm/service/mqcloud/resource_ibm_mqcloud_user_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package mqcloud_test diff --git a/ibm/service/mqcloud/utils.go b/ibm/service/mqcloud/utils.go index 58cd7c50ebb..b904228ea75 100644 --- a/ibm/service/mqcloud/utils.go +++ b/ibm/service/mqcloud/utils.go @@ -11,7 +11,8 @@ import ( "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" - rc "github.com/IBM/platform-services-go-sdk/resourcecontrollerv2" + + "github.com/IBM/platform-services-go-sdk/resourcecontrollerv2" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/IBM/mqcloud-go-sdk/mqcloudv1" @@ -31,7 +32,7 @@ const qmCreating = "initializing" const isQueueManagerDeleting = "true" const isQueueManagerDeleteDone = "true" const reservedDeploymentPlan = "reserved-deployment" -const enforceReservedDeploymentPlan = true +const enforceReservedDeploymentPlan = true // change to false for testing in IKS clusters. // waitForQmStatusUpdate waits for Queue Manager to be in running state func waitForQmStatusUpdate(context context.Context, d *schema.ResourceData, meta interface{}) (interface{}, error) { @@ -110,6 +111,40 @@ func waitForQueueManagerToDelete(context context.Context, d *schema.ResourceData return stateConf.WaitForStateContext(context) } +func IsVersionDowngrade(oldVersion, newVersion string) bool { + oldParts := strings.Split(oldVersion, ".") + newParts := strings.Split(newVersion, ".") + + for i := 0; i < len(oldParts); i++ { + oldPartNum := strings.Split(oldParts[i], "_")[0] + newPartNum := strings.Split(newParts[i], "_")[0] + + oldPart, _ := strconv.Atoi(oldPartNum) + newPart, _ := strconv.Atoi(newPartNum) + + if newPart < oldPart { + return true + } else if newPart > oldPart { + return false + } + } + + oldPatchNum := strings.Split(oldParts[len(oldParts)-1], "_") + newPatchNum := strings.Split(newParts[len(newParts)-1], "_") + + if len(oldPatchNum) > 1 && len(newPatchNum) > 1 { + oldPatch, _ := strconv.Atoi(oldPatchNum[1]) + newPatch, _ := strconv.Atoi(newPatchNum[1]) + + return newPatch < oldPatch + } + + return false +} + +// Function variable to allow mocking in tests +var fetchServicePlanFunc = fetchServicePlan + // checkSIPlan checks whether a Service Instance (SI) is in a Reserved Deployment. func checkSIPlan(d *schema.ResourceData, meta interface{}) error { if !enforceReservedDeploymentPlan { @@ -122,74 +157,64 @@ func checkSIPlan(d *schema.ResourceData, meta interface{}) error { return handlePlanCheck(plan, instanceID) } + plan, err := fetchServicePlanFunc(meta, instanceID) + if err != nil { + return err + } + + // Update cache + planCache[instanceID] = plan + + return handlePlanCheck(plan, instanceID) +} + +// fetchServicePlan handles all external function calls to fetch the service plan name. +func fetchServicePlan(meta interface{}, instanceID string) (string, error) { + clientAPIProvider, ok := meta.(conns.ClientSession) + if !ok { + return "", fmt.Errorf("meta does not implement ClientAPIProvider") + } + // Creating a Resource Controller Client - rsConClient, err := meta.(conns.ClientSession).ResourceControllerV2API() + rsConClient, err := clientAPIProvider.ResourceControllerV2API() if err != nil { - return fmt.Errorf("[ERROR] Failed to create Resource Controller Client: %s", err) + return "", fmt.Errorf("[ERROR] Failed to create Resource Controller Client: %s", err) } // Getting the resource instance - rsInst := rc.GetResourceInstanceOptions{ + rsInst := resourcecontrollerv2.GetResourceInstanceOptions{ ID: &instanceID, } instance, response, err := rsConClient.GetResourceInstance(&rsInst) if err != nil { - return fmt.Errorf("[ERROR] Failed to retrieve Resource Instance: %s, Response: %s", err, response) + return "", fmt.Errorf("[ERROR] Failed to retrieve Resource Instance: %s, Response: %s", err, response) } // Creating a Resource Catalog Client - rsCatClient, err := meta.(conns.ClientSession).ResourceCatalogAPI() + rsCatClient, err := clientAPIProvider.ResourceCatalogAPI() if err != nil { - return fmt.Errorf("[ERROR] Failed to create Resource Catalog Client: %s", err) + return "", fmt.Errorf("[ERROR] Failed to create Resource Catalog Client: %s", err) } rsCatRepo := rsCatClient.ResourceCatalog() + if rsCatRepo == nil { + return "", fmt.Errorf("[ERROR] Catalog client is nil") + } + if instance.ResourcePlanID == nil { + return "", fmt.Errorf("[ERROR] Instance ResourcePlanID is nil") + } // Checking the service plan plan, err := rsCatRepo.GetServicePlanName(*instance.ResourcePlanID) if err != nil { - return fmt.Errorf("[ERROR] Failed to retrieve Service Plan: %s", err) + return "", fmt.Errorf("[ERROR] Failed to retrieve Service Plan: %s", err) } - // Update cache - planCache[instanceID] = plan - - return handlePlanCheck(plan, instanceID) + return plan, nil } func handlePlanCheck(plan string, instanceID string) error { - if plan != reservedDeploymentPlan { + if !strings.Contains(plan, reservedDeploymentPlan) { return fmt.Errorf("[ERROR] Terraform is only supported for Reserved Deployment Plan. Your Service Plan is: %s for the instance %s", plan, instanceID) } return nil } - -func IsVersionDowngrade(oldVersion, newVersion string) bool { - oldParts := strings.Split(oldVersion, ".") - newParts := strings.Split(newVersion, ".") - - for i := 0; i < len(oldParts); i++ { - oldPartNum := strings.Split(oldParts[i], "_")[0] - newPartNum := strings.Split(newParts[i], "_")[0] - - oldPart, _ := strconv.Atoi(oldPartNum) - newPart, _ := strconv.Atoi(newPartNum) - - if newPart < oldPart { - return true - } else if newPart > oldPart { - return false - } - } - - oldPatchNum := strings.Split(oldParts[len(oldParts)-1], "_") - newPatchNum := strings.Split(newParts[len(newParts)-1], "_") - - if len(oldPatchNum) > 1 && len(newPatchNum) > 1 { - oldPatch, _ := strconv.Atoi(oldPatchNum[1]) - newPatch, _ := strconv.Atoi(newPatchNum[1]) - - return newPatch < oldPatch - } - - return false -} diff --git a/ibm/service/mqcloud/utils_test.go b/ibm/service/mqcloud/utils_test.go new file mode 100644 index 00000000000..d91b649e39f --- /dev/null +++ b/ibm/service/mqcloud/utils_test.go @@ -0,0 +1,201 @@ +package mqcloud + +import ( + "errors" + "strings" + + "os" + + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func TestLoadWaitForQmStatusEnvVar(t *testing.T) { + tests := []struct { + name string + envValue string + expectedOutput bool + }{ + { + name: "EnvVar Set To True", + envValue: "true", + expectedOutput: true, + }, + { + name: "EnvVar Set To False", + envValue: "false", + expectedOutput: false, + }, + { + name: "EnvVar Not Set", + envValue: "", + expectedOutput: true, + }, + { + name: "EnvVar Set To Random String", + envValue: "random", + expectedOutput: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _ = os.Setenv("IBMCLOUD_MQCLOUD_WAIT_FOR_QM_STATUS", tt.envValue) + + result := loadWaitForQmStatusEnvVar() + if result != tt.expectedOutput { + t.Errorf("loadWaitForQmStatusEnvVar() with env value '%s', got %v, want %v", tt.envValue, result, tt.expectedOutput) + } + + _ = os.Unsetenv("IBMCLOUD_MQCLOUD_WAIT_FOR_QM_STATUS") + }) + } +} + +func TestIsVersionDowngrade(t *testing.T) { + tests := []struct { + oldVersion, newVersion string + want bool + }{ + // Basic Version Comparison + {"1.2.3", "1.2.2", true}, + {"1.2.3", "1.2.4", false}, + {"1.2.3", "1.3.0", false}, + + // Equal Versions + {"1.2.3", "1.2.3", false}, + + // Edge Cases + {"", "1.0.0", false}, + {"1.0.0", "", true}, + {"abc.def.ghi", "1.2.3", false}, + } + + for _, tt := range tests { + t.Run(tt.oldVersion+" to "+tt.newVersion, func(t *testing.T) { + if got := IsVersionDowngrade(tt.oldVersion, tt.newVersion); got != tt.want { + t.Errorf("IsVersionDowngrade(%q, %q) = %v, want %v", tt.oldVersion, tt.newVersion, got, tt.want) + } + }) + } +} + +func TestHandlePlanCheck(t *testing.T) { + tests := []struct { + plan string + instanceID string + wantErr bool + errMessage string + }{ + // Test with matching plan + {"reserved-deployment", "123", false, ""}, + + // Test with non-matching plan + {"Basic_Plan", "123", true, "[ERROR] Terraform is only supported for Reserved Deployment Plan. Your Service Plan is: Basic_Plan for the instance 123"}, + } + + for _, tt := range tests { + t.Run(tt.plan, func(t *testing.T) { + err := handlePlanCheck(tt.plan, tt.instanceID) + if (err != nil) != tt.wantErr { + t.Errorf("handlePlanCheck() error = %v, wantErr %v", err, tt.wantErr) + return + } + if err != nil && err.Error() != tt.errMessage { + t.Errorf("handlePlanCheck() error = %v, wantErrMessage %v", err.Error(), tt.errMessage) + } + }) + } +} + +// Mock function to replace fetchServicePlan in tests +func mockFetchServicePlan(meta interface{}, instanceID string) (string, error) { + if instanceID == "reserved_deployment_plan_wildcard_id" { + return "reserved-deployment-chaturanga2", nil + } + if instanceID == "reserved_deployment_plan_id" { + return "reserved-deployment", nil + } + if instanceID == "default_plan_id" { + return "default", nil + } + if instanceID == "invalid_plan_id" { + return "", errors.New("[ERROR] Failed to fetch instance") + } + return "default", nil +} + +var dummyInterface interface{} + +func Test_checkSIPlan(t *testing.T) { + tests := []struct { + name string + cachePlan string + wantErr bool + expectedErrorMessage string + enforceRDP bool + }{ + { + name: "Cache Hit: Reserved Deployment Plan", + cachePlan: "cached-reserved-deployment-chaturanga", + wantErr: false, + }, + { + name: "Cache Hit: Default Plan", + cachePlan: "cached-default-plan", + wantErr: true, + expectedErrorMessage: "[ERROR] Terraform is only supported for Reserved Deployment Plan. Your Service Plan is: cached-default-plan for the instance cached-default-plan", + }, + { + name: "Reserved Deployment Plan Wildcard", + cachePlan: "reserved_deployment_plan_wildcard_id", + wantErr: false, + }, + { + name: "Reserved Deployment Plan", + cachePlan: "reserved_deployment_plan_id", + wantErr: false, + }, + { + name: "Default Plan", + cachePlan: "default_plan_id", + wantErr: true, + expectedErrorMessage: "[ERROR] Terraform is only supported for Reserved Deployment Plan. Your Service Plan is: default for the instance default_plan_id", + }, + { + name: "fetchServicePlanFunc Error: Invalid id", + wantErr: true, + cachePlan: "invalid_plan_id", + expectedErrorMessage: "[ERROR] Failed to fetch instance", + }, + } + fetchServicePlanFunc = mockFetchServicePlan + defer func() { + fetchServicePlanFunc = fetchServicePlan + }() + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + d := schema.TestResourceDataRaw(t, map[string]*schema.Schema{ + "service_instance_guid": {Type: schema.TypeString, Required: true}, + }, map[string]interface{}{ + "service_instance_guid": tt.cachePlan, + }) + + // Save to planCache for testing caching. + if strings.Contains(tt.cachePlan, "cached") { + planCache[tt.cachePlan] = tt.cachePlan + } + + err := checkSIPlan(d, dummyInterface) + if (err != nil) != tt.wantErr { + t.Errorf("checkSIPlan() error = %v, wantErr %v", err, tt.wantErr) + return + } + if tt.wantErr && err != nil && err.Error() != tt.expectedErrorMessage { + t.Errorf("checkSIPlan() error = %v, expectedErrorMessage %v", err.Error(), tt.expectedErrorMessage) + } + }) + } +} diff --git a/website/docs/d/mqcloud_application.html.markdown b/website/docs/d/mqcloud_application.html.markdown index 0e854d5c8a5..88c482dfd2b 100644 --- a/website/docs/d/mqcloud_application.html.markdown +++ b/website/docs/d/mqcloud_application.html.markdown @@ -10,6 +10,8 @@ subcategory: "MQ on Cloud" Provides a read-only data source to retrieve information about a mqcloud_application. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl diff --git a/website/docs/d/mqcloud_keystore_certificate.html.markdown b/website/docs/d/mqcloud_keystore_certificate.html.markdown index 6222ecd7848..889f379d258 100644 --- a/website/docs/d/mqcloud_keystore_certificate.html.markdown +++ b/website/docs/d/mqcloud_keystore_certificate.html.markdown @@ -10,6 +10,8 @@ subcategory: "MQ on Cloud" Provides a read-only data source to retrieve information about a mqcloud_keystore_certificate. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl @@ -41,6 +43,15 @@ After your data source is created, you can read values from the following attrib Nested schema for **key_store**: * `certificate_type` - (String) The type of certificate. * Constraints: Allowable values are: `key_store`. + * `config` - (List) The configuration details for this certificate. + Nested schema for **config**: + * `ams` - (List) A list of channels that are configured with this certificate. + Nested schema for **ams**: + * `channels` - (List) A list of channels that are configured with this certificate. + * Constraints: The maximum length is `999999999` items. The minimum length is `0` items. + Nested schema for **channels**: + * `name` - (String) The name of the channel. + * Constraints: The maximum length is `20` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9_.\/%]*$/`. * `dns_names` - (List) The list of DNS names. * Constraints: The maximum length is `200` items. The minimum length is `0` items. * `dns_names_total_count` - (Integer) The total count of dns names. @@ -58,6 +69,5 @@ Nested schema for **key_store**: * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9_.]*$/`. * `subject_cn` - (String) Subject's Common Name. * `subject_dn` - (String) Subject's Distinguished Name. - * `total_count` - (Integer) The total count of key store certificates. diff --git a/website/docs/d/mqcloud_queue_manager.html.markdown b/website/docs/d/mqcloud_queue_manager.html.markdown index 59bfc7c76b0..8afd2affc78 100644 --- a/website/docs/d/mqcloud_queue_manager.html.markdown +++ b/website/docs/d/mqcloud_queue_manager.html.markdown @@ -10,6 +10,8 @@ subcategory: "MQ on Cloud" Provides a read-only data source to retrieve information about a mqcloud_queue_manager. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl @@ -33,7 +35,6 @@ You can specify the following arguments for this data source. After your data source is created, you can read values from the following attributes. * `id` - The unique identifier of the mqcloud_queue_manager. - * `queue_managers` - (List) List of queue managers. * Constraints: The maximum length is `50` items. The minimum length is `0` items. Nested schema for **queue_managers**: @@ -50,8 +51,8 @@ Nested schema for **queue_managers**: * `name` - (String) A queue manager name conforming to MQ restrictions. * Constraints: The maximum length is `48` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9._]*$/`. * `rest_api_endpoint_url` - (String) The url through which to access REST APIs for this queue manager. - * `size` - (String) The queue manager sizes of deployment available. Deployment of lite queue managers for aws_us_east_1 and aws_eu_west_1 locations is not available. - * Constraints: Allowable values are: `lite`, `xsmall`, `small`, `medium`, `large`. + * `size` - (String) The queue manager sizes of deployment available. + * Constraints: Allowable values are: `xsmall`, `small`, `medium`, `large`. * `status_uri` - (String) A reference uri to get deployment status of the queue manager. * `upgrade_available` - (Boolean) Describes whether an upgrade is available for this queue manager. * `version` - (String) The MQ version of the queue manager. diff --git a/website/docs/d/mqcloud_queue_manager_options.html.markdown b/website/docs/d/mqcloud_queue_manager_options.html.markdown new file mode 100644 index 00000000000..2509f176fad --- /dev/null +++ b/website/docs/d/mqcloud_queue_manager_options.html.markdown @@ -0,0 +1,43 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_mqcloud_queue_manager_options" +description: |- + Get information about mqcloud_queue_manager_options +subcategory: "MQ on Cloud" +--- + +# ibm_mqcloud_queue_manager_options + +Provides a read-only data source to retrieve information about mqcloud_queue_manager_options. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + +## Example Usage + +```hcl +data "ibm_mqcloud_queue_manager_options" "mqcloud_queue_manager_options" { + service_instance_guid = "a2b4d4bc-dadb-4637-bcec-9b7d1e723af8" +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `service_instance_guid` - (Required, Forces new resource, String) The GUID that uniquely identifies the MQ on Cloud service instance. + * Constraints: The maximum length is `36` characters. The minimum length is `36` characters. The value must match regular expression `/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/`. + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the mqcloud_queue_manager_options. +* `latest_version` - (String) The latest Queue manager version. + * Constraints: The maximum length is `15` characters. The minimum length is `7` characters. The value must match regular expression `/^[0-9]+.[0-9]+.[0-9]+_[0-9]+$/`. +* `locations` - (List) List of deployment locations. + * Constraints: The list items must match regular expression `/^([^[:ascii:]]|[a-zA-Z0-9-._: ])+$/`. The maximum length is `20` items. The minimum length is `1` item. +* `sizes` - (List) List of queue manager sizes. + * Constraints: Allowable list items are: `xsmall`, `small`, `medium`, `large`. The maximum length is `20` items. The minimum length is `1` item. +* `versions` - (List) List of queue manager versions. + * Constraints: The maximum length is `12` items. The minimum length is `1` item. + diff --git a/website/docs/d/mqcloud_queue_manager_status.html.markdown b/website/docs/d/mqcloud_queue_manager_status.html.markdown index 342ac508c97..9e82e488b71 100644 --- a/website/docs/d/mqcloud_queue_manager_status.html.markdown +++ b/website/docs/d/mqcloud_queue_manager_status.html.markdown @@ -10,6 +10,8 @@ subcategory: "MQ on Cloud" Provides a read-only data source to retrieve information about mqcloud_queue_manager_status. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl diff --git a/website/docs/d/mqcloud_truststore_certificate.html.markdown b/website/docs/d/mqcloud_truststore_certificate.html.markdown index 5fb07ffb1ac..abe3b6ac539 100644 --- a/website/docs/d/mqcloud_truststore_certificate.html.markdown +++ b/website/docs/d/mqcloud_truststore_certificate.html.markdown @@ -10,6 +10,8 @@ subcategory: "MQ on Cloud" Provides a read-only data source to retrieve information about a mqcloud_truststore_certificate. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl @@ -37,7 +39,6 @@ After your data source is created, you can read values from the following attrib * `id` - The unique identifier of the mqcloud_truststore_certificate. * `total_count` - (Integer) The total count of trust store certificates. - * `trust_store` - (List) The list of trust store certificates. * Constraints: The maximum length is `50` items. The minimum length is `0` items. Nested schema for **trust_store**: diff --git a/website/docs/d/mqcloud_user.html.markdown b/website/docs/d/mqcloud_user.html.markdown index 89c1aa4db76..e451cd577e0 100644 --- a/website/docs/d/mqcloud_user.html.markdown +++ b/website/docs/d/mqcloud_user.html.markdown @@ -10,6 +10,8 @@ subcategory: "MQ on Cloud" Provides a read-only data source to retrieve information about a mqcloud_user. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl @@ -33,7 +35,6 @@ You can specify the following arguments for this data source. After your data source is created, you can read values from the following attributes. * `id` - The unique identifier of the mqcloud_user. - * `users` - (List) List of users. * Constraints: The maximum length is `50` items. The minimum length is `0` items. Nested schema for **users**: diff --git a/website/docs/r/mqcloud_application.html.markdown b/website/docs/r/mqcloud_application.html.markdown index a244325ade4..4e2341d8485 100644 --- a/website/docs/r/mqcloud_application.html.markdown +++ b/website/docs/r/mqcloud_application.html.markdown @@ -10,6 +10,8 @@ subcategory: "MQ on Cloud" Create, update, and delete mqcloud_applications with this resource. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl diff --git a/website/docs/r/mqcloud_keystore_certificate.html.markdown b/website/docs/r/mqcloud_keystore_certificate.html.markdown index b4740f26615..dcdf7050dbf 100644 --- a/website/docs/r/mqcloud_keystore_certificate.html.markdown +++ b/website/docs/r/mqcloud_keystore_certificate.html.markdown @@ -10,14 +10,24 @@ subcategory: "MQ on Cloud" Create, update, and delete mqcloud_keystore_certificates with this resource. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl resource "ibm_mqcloud_keystore_certificate" "mqcloud_keystore_certificate_instance" { certificate_file = filebase64("certificate_file.data") - label = "label" + label = "certlabel" queue_manager_id = var.queue_manager_id service_instance_guid = var.service_instance_guid + + config { + ams { + channels { + name = "CLOUD.APP.SVRCONN" + } + } + } } ``` @@ -43,6 +53,15 @@ After your resource is created, you can read values from the listed arguments an * Constraints: The maximum length is `16` characters. The minimum length is `1` character. The value must match regular expression `/^[0-9a-fA-F]*$/`. * `certificate_type` - (String) The type of certificate. * Constraints: Allowable values are: `key_store`. +* `config` - (List) The configuration details for this certificate. +Nested schema for **config**: + * `ams` - (List) A list of channels that are configured with this certificate. + Nested schema for **ams**: + * `channels` - (List) A list of channels that are configured with this certificate. + * Constraints: The maximum length is `999999999` items. The minimum length is `0` items. + Nested schema for **channels**: + * `name` - (String) The name of the channel. + * Constraints: The maximum length is `20` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9_.\/%]*$/`. * `dns_names` - (List) The list of DNS names. * Constraints: The maximum length is `200` items. The minimum length is `0` items. * `dns_names_total_count` - (Integer) The total count of dns names. diff --git a/website/docs/r/mqcloud_queue_manager.html.markdown b/website/docs/r/mqcloud_queue_manager.html.markdown index 0994cfb932f..21cd1f3c974 100644 --- a/website/docs/r/mqcloud_queue_manager.html.markdown +++ b/website/docs/r/mqcloud_queue_manager.html.markdown @@ -6,27 +6,45 @@ description: |- subcategory: "MQ on Cloud" --- + # ibm_mqcloud_queue_manager -Create, update, and delete mqcloud_queue_managers with this resource. +Create, update, and delete mqcloud_queue_managers with this resource. + +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. ## Example Usage ```hcl -resource "ibm_resource_instance" "mqcloud_instance" { - name = "mqcloud-service-name" - service = "mqcloud" - plan = "default" - location = "eu-de" +resource "ibm_resource_instance" "mqcloud_deployment" { + location = var.region + name = var.name + plan = "reserved-deployment" + resource_group_id = var.resource_group_id + parameters = { + "selectedCapacityPlan" = var.mq_capacity_guid + } + service = "mqcloud" + tags = var.tags +} + +data "ibm_mqcloud_queue_manager_options" "mqcloud_options" { + service_instance_guid = ibm_resource_instance.mqcloud_deployment.guid + depends_on = [ + resource.ibm_resource_instance.mqcloud_deployment + ] } resource "ibm_mqcloud_queue_manager" "mqcloud_queue_manager_instance" { display_name = "A test queue manager" - location = "reserved-eu-de-cluster-f884" + location = data.ibm_mqcloud_queue_manager_options.mqcloud_options.locations[0] name = "testqm" - service_instance_guid = ibm_resource_instance.mqcloud_instance.guid - size = "lite" - version = "9.3.2_2" + service_instance_guid = ibm_resource_instance.mqcloud_deployment.guid + size = "xsmall" + version = data.ibm_mqcloud_queue_manager_options.mqcloud_options.latest_version + depends_on = [ + data.ibm_mqcloud_queue_manager_options.mqcloud_options + ] } ``` @@ -36,16 +54,16 @@ You can specify the following arguments for this resource. * `display_name` - (Optional, String) A displayable name for the queue manager - limited only in length. * Constraints: The maximum length is `150` characters. -* `location` - (Required, String) The locations in which the queue manager could be deployed. - * Constraints: The maximum length is `150` characters. The minimum length is `2` characters. The value must match regular expression `/^([^[:ascii:]]|[a-zA-Z0-9-._: ])+$/`. +* `location` - (Required, String) The location in which the queue manager could be deployed. + * Constraints: The maximum length is `150` characters. The minimum length is `2` characters. The value must match regular expression `/^([^[:ascii:]]|[a-zA-Z0-9-._: ])+$/`. Details of applicable locations can be found from either the use of the `ibm_mqcloud_queue_manager_options` datasource for the resource instance or can be found using the [IBM API for MQ on Cloud](https://cloud.ibm.com/apidocs/mq-on-cloud) and be set as a variable. * `name` - (Required, String) A queue manager name conforming to MQ restrictions. * Constraints: The maximum length is `48` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9._]*$/`. * `service_instance_guid` - (Required, Forces new resource, String) The GUID that uniquely identifies the MQ on Cloud service instance. * Constraints: The maximum length is `36` characters. The minimum length is `36` characters. The value must match regular expression `/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/`. -* `size` - (Required, String) The queue manager sizes of deployment available. Deployment of lite queue managers for aws_us_east_1 and aws_eu_west_1 locations is not available. - * Constraints: Allowable values are: `lite`, `xsmall`, `small`, `medium`, `large`. +* `size` - (Required, String) The queue manager sizes of deployment available. + * Constraints: Allowable values are: `xsmall`, `small`, `medium`, `large`. * `version` - (Optional, String) The MQ version of the queue manager. - * Constraints: The maximum length is `15` characters. The minimum length is `7` characters. The value must match regular expression `/^[0-9]+.[0-9]+.[0-9]+_[0-9]+$/`. + * Constraints: The maximum length is `15` characters. The minimum length is `7` characters. The value must match regular expression `/^[0-9]+.[0-9]+.[0-9]+_[0-9]+$/`. Details of applicable versions can be found from either the use of the `ibm_mqcloud_queue_manager_options` datasource for the resource instance, can be found using the [IBM API for MQ on Cloud](https://cloud.ibm.com/apidocs/mq-on-cloud) or with the variable not included at all to default to the latest version. ## Attribute Reference diff --git a/website/docs/r/mqcloud_truststore_certificate.html.markdown b/website/docs/r/mqcloud_truststore_certificate.html.markdown index 66d9ab191bb..1fd1cf84e0a 100644 --- a/website/docs/r/mqcloud_truststore_certificate.html.markdown +++ b/website/docs/r/mqcloud_truststore_certificate.html.markdown @@ -10,12 +10,14 @@ subcategory: "MQ on Cloud" Create, update, and delete mqcloud_truststore_certificates with this resource. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl resource "ibm_mqcloud_truststore_certificate" "mqcloud_truststore_certificate_instance" { certificate_file = filebase64("certificate_file.data") - label = "label" + label = "certlabel" queue_manager_id = var.queue_manager_id service_instance_guid = var.service_instance_guid } diff --git a/website/docs/r/mqcloud_user.html.markdown b/website/docs/r/mqcloud_user.html.markdown index 6d12da2ab7f..e5b4a647f08 100644 --- a/website/docs/r/mqcloud_user.html.markdown +++ b/website/docs/r/mqcloud_user.html.markdown @@ -10,12 +10,14 @@ subcategory: "MQ on Cloud" Create, update, and delete mqcloud_users with this resource. +> **Note:** The MQ on Cloud Terraform provider access is restricted to users of the reserved deployment plan. + ## Example Usage ```hcl resource "ibm_mqcloud_user" "mqcloud_user_instance" { - email = "user@example.com" - name = "t0scie98o57a" + email = "testuser@ibm.com" + name = "testuser" service_instance_guid = var.service_instance_guid } ```