diff --git a/.secrets.baseline b/.secrets.baseline index c90644602f..934bc75b57 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -3,7 +3,7 @@ "files": "go.mod|go.sum|.*.map|^.secrets.baseline$", "lines": null }, - "generated_at": "2023-11-10T20:51:53Z", + "generated_at": "2023-11-22T09:50:41Z", "plugins_used": [ { "name": "AWSKeyDetector" @@ -560,7 +560,7 @@ "hashed_secret": "06d988e96c3d9325c9fbc7c0ef3c6c0f2b4eb8e7", "is_secret": false, "is_verified": false, - "line_number": 13, + "line_number": 45, "type": "Secret Keyword", "verified_result": null } @@ -760,7 +760,7 @@ "hashed_secret": "731438016c5ab94431f61820f35e3ae5f8ad6004", "is_secret": false, "is_verified": false, - "line_number": 412, + "line_number": 416, "type": "Secret Keyword", "verified_result": null }, @@ -768,7 +768,7 @@ "hashed_secret": "12da2e35d6b50c902c014f1ab9e3032650368df7", "is_secret": false, "is_verified": false, - "line_number": 418, + "line_number": 422, "type": "Secret Keyword", "verified_result": null }, @@ -776,7 +776,7 @@ "hashed_secret": "813274ccae5b6b509379ab56982d862f7b5969b6", "is_secret": false, "is_verified": false, - "line_number": 1123, + "line_number": 1127, "type": "Base64 High Entropy String", "verified_result": null } @@ -846,7 +846,7 @@ "hashed_secret": "da8cae6284528565678de15e03d461e23fe22538", "is_secret": false, "is_verified": false, - "line_number": 1845, + "line_number": 1858, "type": "Secret Keyword", "verified_result": null }, @@ -854,7 +854,7 @@ "hashed_secret": "1a0334cfa65f4be58b9d914b8e96e9d9478bfbac", "is_secret": false, "is_verified": false, - "line_number": 3226, + "line_number": 3239, "type": "Secret Keyword", "verified_result": null } @@ -864,7 +864,7 @@ "hashed_secret": "c8b6f5ef11b9223ac35a5663975a466ebe7ebba9", "is_secret": false, "is_verified": false, - "line_number": 1803, + "line_number": 1806, "type": "Secret Keyword", "verified_result": null }, @@ -872,7 +872,7 @@ "hashed_secret": "8abf4899c01104241510ba87685ad4de76b0c437", "is_secret": false, "is_verified": false, - "line_number": 1809, + "line_number": 1812, "type": "Secret Keyword", "verified_result": null } @@ -1268,15 +1268,7 @@ "hashed_secret": "3046d9f6cfaaeea6eed9bb7a4ab010fe49b0cfd4", "is_secret": false, "is_verified": false, - "line_number": 129, - "type": "Secret Keyword", - "verified_result": null - }, - { - "hashed_secret": "505032eaf8a3acf9b094a326dfb1cd0537c75a0d", - "is_secret": false, - "is_verified": false, - "line_number": 235, + "line_number": 104, "type": "Secret Keyword", "verified_result": null } @@ -1364,15 +1356,7 @@ "hashed_secret": "3046d9f6cfaaeea6eed9bb7a4ab010fe49b0cfd4", "is_secret": false, "is_verified": false, - "line_number": 94, - "type": "Secret Keyword", - "verified_result": null - }, - { - "hashed_secret": "505032eaf8a3acf9b094a326dfb1cd0537c75a0d", - "is_secret": false, - "is_verified": false, - "line_number": 364, + "line_number": 68, "type": "Secret Keyword", "verified_result": null } @@ -2014,7 +1998,7 @@ "hashed_secret": "884a58e4c2c5d195d3876787bdc63af6c5af2924", "is_secret": false, "is_verified": false, - "line_number": 1589, + "line_number": 1595, "type": "Secret Keyword", "verified_result": null } @@ -2834,7 +2818,7 @@ "hashed_secret": "3046d9f6cfaaeea6eed9bb7a4ab010fe49b0cfd4", "is_secret": false, "is_verified": false, - "line_number": 190, + "line_number": 334, "type": "Secret Keyword", "verified_result": null }, @@ -2842,7 +2826,7 @@ "hashed_secret": "92f08f2d9a0dc3f0d4cb3796435a48508cf59ecd", "is_secret": false, "is_verified": false, - "line_number": 461, + "line_number": 654, "type": "Secret Keyword", "verified_result": null } @@ -2857,12 +2841,40 @@ "verified_result": null } ], + "ibm/service/project/data_source_ibm_project_environment.go": [ + { + "hashed_secret": "3046d9f6cfaaeea6eed9bb7a4ab010fe49b0cfd4", + "is_secret": false, + "is_verified": false, + "line_number": 119, + "type": "Secret Keyword", + "verified_result": null + }, + { + "hashed_secret": "92f08f2d9a0dc3f0d4cb3796435a48508cf59ecd", + "is_secret": false, + "is_verified": false, + "line_number": 293, + "type": "Secret Keyword", + "verified_result": null + } + ], + "ibm/service/project/data_source_ibm_project_environment_test.go": [ + { + "hashed_secret": "347cd9c53ff77d41a7b22aa56c7b4efaf54658e3", + "is_secret": false, + "is_verified": false, + "line_number": 55, + "type": "Secret Keyword", + "verified_result": null + } + ], "ibm/service/project/resource_ibm_project_config.go": [ { "hashed_secret": "3046d9f6cfaaeea6eed9bb7a4ab010fe49b0cfd4", "is_secret": false, "is_verified": false, - "line_number": 92, + "line_number": 236, "type": "Secret Keyword", "verified_result": null }, @@ -2870,7 +2882,7 @@ "hashed_secret": "92f08f2d9a0dc3f0d4cb3796435a48508cf59ecd", "is_secret": false, "is_verified": false, - "line_number": 693, + "line_number": 884, "type": "Secret Keyword", "verified_result": null } @@ -2885,6 +2897,34 @@ "verified_result": null } ], + "ibm/service/project/resource_ibm_project_environment.go": [ + { + "hashed_secret": "3046d9f6cfaaeea6eed9bb7a4ab010fe49b0cfd4", + "is_secret": false, + "is_verified": false, + "line_number": 72, + "type": "Secret Keyword", + "verified_result": null + }, + { + "hashed_secret": "92f08f2d9a0dc3f0d4cb3796435a48508cf59ecd", + "is_secret": false, + "is_verified": false, + "line_number": 504, + "type": "Secret Keyword", + "verified_result": null + } + ], + "ibm/service/project/resource_ibm_project_environment_test.go": [ + { + "hashed_secret": "347cd9c53ff77d41a7b22aa56c7b4efaf54658e3", + "is_secret": false, + "is_verified": false, + "line_number": 62, + "type": "Secret Keyword", + "verified_result": null + } + ], "ibm/service/pushnotification/resource_ibm_push_notification_chrome.go": [ { "hashed_secret": "8a4036fbf3e13c7a84bac77ddae25de1cdfc4d43", @@ -2940,7 +2980,7 @@ "hashed_secret": "3c2ecad9b250fd6d99893e4d05ec02ca19aa95d0", "is_secret": false, "is_verified": false, - "line_number": 383, + "line_number": 389, "type": "Secret Keyword", "verified_result": null } @@ -4466,7 +4506,17 @@ "hashed_secret": "06d988e96c3d9325c9fbc7c0ef3c6c0f2b4eb8e7", "is_secret": false, "is_verified": false, - "line_number": 23, + "line_number": 22, + "type": "Secret Keyword", + "verified_result": null + } + ], + "website/docs/r/project_environment.html.markdown": [ + { + "hashed_secret": "06d988e96c3d9325c9fbc7c0ef3c6c0f2b4eb8e7", + "is_secret": false, + "is_verified": false, + "line_number": 22, "type": "Secret Keyword", "verified_result": null } diff --git a/CHANGELOG.md b/CHANGELOG.md index f833c365fa..be65d39357 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,89 @@ +# 1.60.0 (Nov 29, 2023) +Features +* Support for Projects + - **Datasources** + - ibm_project + - ibm_project_config + - ibm_project_environment + - **Resources** + - ibm_project + - ibm_project_config + - ibm_project_environment + +* Support for Code Engine + - **Datasources** + - ibm_code_engine_domain_mapping + - **Resources** + - ibm_code_engine_domain_mapping + +* Support for Power Instance + - **Resources** + - ibm_pi_workspace + +Enhancements +* support offline restore for MongoDB EE PITR ([4601](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4601)) +* bump ContinuousDelivery Go SDK version ([4918](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4918)) +* Added nest conditions to rule.conditions IAM Policies ([4896](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4896)) +* Updates to SCC tool ([4920](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4920)) +* Add entitlement option to Satellite cluster/workerpool create ([4894](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4894)) +* VPC ID Filter is added when Subnet Name is specified ([4892](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4892)) +* add optional account id to kms config ([4944](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4944)) + +BugFixes +* resolved nil pointer issue on vpn gateway resource ([4903](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4903)) +* Private/direct COS endpoint settings conflicts with IBM Cloud docs, VPE options, and COS config endpoint ([4919](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4919)) +* add missing required argument name to the doc ([4909](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4909)) +* Fix wrong sintax in doc for Ingress Secret Opaque ([4917](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4917)) +* schematics agent doc fixes ([4933](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4933)) +* Fix some job parameters for code engine ([4923](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4923)) +* CIS - remove deafult value for min_tls_version ([4947](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4947)) +* Update Power Workspace/s and Datacenter/s DataSource Documentation ([4904](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4904)) +* validation on encryption with catalog images fixed ([4940](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4940)) +* issue-13603-fix attachment terraform ([4952](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4952)) +* Fixed catalog service extensions and values metadata params of workspace ds ([4957](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4957)) + +# 1.60.0-beta1 (Nov 23, 2023) +Features +* Support for Projects + - **Datasources** + - ibm_project + - ibm_project_config + - ibm_project_environment + - **Resources** + - ibm_project + - ibm_project_config + - ibm_project_environment + +* Support for Code Engine + - **Datasources** + - ibm_code_engine_domain_mapping + - **Resources** + - ibm_code_engine_domain_mapping + +* Support for Power Instance + - **Resources** + - ibm_pi_workspace + +Enhancements +* support offline restore for MongoDB EE PITR ([4601](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4601)) +* bump ContinuousDelivery Go SDK version ([4918](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4918)) +* Added nest conditions to rule.conditions IAM Policies ([4896](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4896)) +* Updates to SCC tool ([4920](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4920)) +* Add entitlement option to Satellite cluster/workerpool create ([4894](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4894)) +* VPC ID Filter is added when Subnet Name is specified ([4892](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4892)) +* add optional account id to kms config ([4944](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4944)) + +BugFixes +* resolved nil pointer issue on vpn gateway resource ([4903](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4903)) +* Private/direct COS endpoint settings conflicts with IBM Cloud docs, VPE options, and COS config endpoint ([4919](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4919)) +* add missing required argument name to the doc ([4909](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4909)) +* Fix wrong sintax in doc for Ingress Secret Opaque ([4917](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4917)) +* schematics agent doc fixes ([4933](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4933)) +* Fix some job parameters for code engine ([4923](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4923)) +* CIS - remove deafult value for min_tls_version ([4947](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4947)) +* Update Power Workspace/s and Datacenter/s DataSource Documentation ([4904](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4904)) +* validation on encryption with catalog images fixed ([4940](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4940)) + # 1.60.0-beta0 (Nov 15, 2023) Features * Support for Projects @@ -18,6 +104,11 @@ BugFixes * Private/direct COS endpoint settings conflicts with IBM Cloud docs, VPE options, and COS config endpoint ([4919](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4919)) * add missing required argument name to the doc ([4909](https://github.com/IBM-Cloud/terraform-provider-ibm/pull/4909)) +# 1.59.1 (Nov 20, 2023) + +Bug Fixes +* ibm_schematics_workspace: provider crash during terraform plan ([4907](https://github.com/IBM-Cloud/terraform-provider-ibm/issues/4907)) + # 1.59.0 (Oct 30, 2023) diff --git a/examples/ibm-code-engine/README.md b/examples/ibm-code-engine/README.md index 952868955c..33ac34cd9b 100644 --- a/examples/ibm-code-engine/README.md +++ b/examples/ibm-code-engine/README.md @@ -250,7 +250,7 @@ data "ibm_code_engine_domain_mapping" "code_engine_domain_mapping_instance" { | data | The key-value pair for the config map. Values must be specified in `KEY=VALUE` format. Each `KEY` field must consist of alphanumeric characters, `-`, `_` or `.` and must not be exceed a max length of 253 characters. Each `VALUE` field can consists of any character and must not be exceed a max length of 1048576 characters. | `map(string)` | false | | image_reference | The name of the image that is used for this job. The format is `REGISTRY/NAMESPACE/REPOSITORY:TAG` where `REGISTRY` and `TAG` are optional. If `REGISTRY` is not specified, the default is `docker.io`. If `TAG` is not specified, the default is `latest`. If the image reference points to a registry that requires authentication, make sure to also specify the property `image_secret`. | `string` | true | | image_secret | The name of the image registry access secret. The image registry access secret is used to authenticate with a private registry when you download the container image. If the image reference points to a registry that requires authentication, the job / job runs will be created but submitted job runs will fail, until this property is provided, too. This property must not be set on a job run, which references a job template. | `string` | false | -| run_mode | The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `max_execution_time` and `retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `max_execution_time` and `retry_limit` properties are not allowed. | `string` | false | +| run_mode | The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `scale_max_execution_time` and `scale_retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `scale_max_execution_time` and `scale_retry_limit` properties are not allowed. | `string` | false | | scale_array_spec | Define a custom set of array indices as comma-separated list containing single values and hyphen-separated ranges like `5,12-14,23,27`. Each instance can pick up its array index via environment variable `JOB_INDEX`. The number of unique array indices specified here determines the number of job instances to run. | `string` | false | | scale_max_execution_time | The maximum execution time in seconds for runs of the job. This property can only be specified if `run_mode` is `task`. | `number` | false | | scale_memory_limit | Optional amount of memory set for the instance of the job. For valid values see [Supported memory and CPU combinations](https://cloud.ibm.com/docs/codeengine?topic=codeengine-mem-cpu-combo). The units for specifying memory are Megabyte (M) or Gigabyte (G), whereas G and M are the shorthand expressions for GB and MB. For more information see [Units of measurement](https://cloud.ibm.com/docs/codeengine?topic=codeengine-mem-cpu-combo#unit-measurements). | `string` | false | diff --git a/examples/ibm-project/README.md b/examples/ibm-project/README.md index 2c985f19d0..8d4faefa78 100644 --- a/examples/ibm-project/README.md +++ b/examples/ibm-project/README.md @@ -6,6 +6,7 @@ The following types of resources are supported: * project_config * project +* project_environment ## Usage @@ -39,6 +40,14 @@ resource "project" "project_instance" { definition = var.project_definition } ``` +project_environment resource: + +```hcl +resource "project_environment" "project_environment_instance" { + project_id = ibm_project.project_instance.project_id + definition = var.project_environment_definition +} +``` ## ProjectV1 data sources @@ -57,6 +66,14 @@ data "project" "project_instance" { project_id = ibm_project.project_instance.id } ``` +project_environment data source: + +```hcl +data "ibm_project_environment" "project_environment_instance" { + project_id = ibm_project_environment.project_environment_instance.project_id + project_environment_id = ibm_project_environment.project_environment_instance.project_environment_id +} +``` ## Assumptions @@ -84,14 +101,15 @@ data "project" "project_instance" { |------|-------------|------|---------| | ibmcloud\_api\_key | IBM Cloud API key | `string` | true | | project_id | The unique project ID. | `string` | true | -| schematics | A schematics workspace associated to a project configuration. | `` | false | -| definition | The type and output of a project configuration. | `` | true | +| schematics | A schematics workspace associated to a project configuration, with scripts. | `` | false | +| definition | The name and description of a project configuration. | `` | true | | location | The IBM Cloud location where a resource is deployed. | `string` | true | -| resource_group | The resource group where the project's data and tools are created. | `string` | true | +| resource_group | The resource group name where the project's data and tools are created. | `string` | true | | definition | The definition of the project. | `` | true | +| definition | The environment definition. | `` | true | | project_id | The unique project ID. | `string` | true | | project_config_id | The unique config ID. | `string` | true | -| project_id | The unique project ID. | `string` | true | +| project_environment_id | The environment ID. | `string` | true | ## Outputs @@ -99,3 +117,4 @@ data "project" "project_instance" { |------|-------------| | project_config | project_config object | | project | project object | +| project_environment | project_environment object | diff --git a/examples/ibm-project/main.tf b/examples/ibm-project/main.tf index 79837ee3fb..038e99910a 100644 --- a/examples/ibm-project/main.tf +++ b/examples/ibm-project/main.tf @@ -34,6 +34,19 @@ resource "ibm_project" "project_instance" { } } +// Provision project_environment resource instance +resource "ibm_project_environment" "project_environment_instance" { + project_id = ibm_project.project_instance.project_id + definition { + name = "environment-stage" + description = "environment for stage project" + authorizations { + method = "api_key" + api_key = "" + } + } +} + // Create project_config data source data "ibm_project_config" "project_config_instance" { project_id = ibm_project_config.project_config_instance.project_id @@ -44,3 +57,9 @@ data "ibm_project_config" "project_config_instance" { data "ibm_project" "project_instance" { project_id = ibm_project.project_instance.id } + +// Create project_environment data source +data "ibm_project_environment" "project_environment_instance" { + project_id = ibm_project.project_instance.id + project_environment_id = var.project_environment_project_environment_id +} diff --git a/examples/ibm-project/outputs.tf b/examples/ibm-project/outputs.tf index 277309cbec..76db5b5331 100644 --- a/examples/ibm-project/outputs.tf +++ b/examples/ibm-project/outputs.tf @@ -3,6 +3,7 @@ output "ibm_project_config" { value = ibm_project_config.project_config_instance description = "project_config resource instance" + sensitive = true } // This output allows project data to be referenced by other resources and the terraform CLI // Modify this output if only certain data should be exposed @@ -10,3 +11,10 @@ output "ibm_project" { value = ibm_project.project_instance description = "project resource instance" } +// This output allows project_environment data to be referenced by other resources and the terraform CLI +// Modify this output if only certain data should be exposed +output "ibm_project_environment" { + value = ibm_project_environment.project_environment_instance + description = "project_environment resource instance" + sensitive = true +} diff --git a/examples/ibm-project/variables.tf b/examples/ibm-project/variables.tf index b32094d31b..82c28185f4 100644 --- a/examples/ibm-project/variables.tf +++ b/examples/ibm-project/variables.tf @@ -17,11 +17,18 @@ variable "project_location" { default = "us-south" } variable "project_resource_group" { - description = "The resource group where the project's data and tools are created." + description = "The resource group name where the project's data and tools are created." type = string default = "Default" } +// Resource arguments for project_environment +variable "project_environment_project_id" { + description = "The unique project ID." + type = string + default = "project_id" +} + // Data source arguments for project_config variable "project_config_project_id" { description = "The unique project ID." @@ -40,3 +47,15 @@ variable "project_id" { type = string default = "project_id" } + +// Data source arguments for project_environment +variable "project_environment_project_id" { + description = "The unique project ID." + type = string + default = "project_id" +} +variable "project_environment_id" { + description = "The environment ID." + type = string + default = "project_environment_id" +} diff --git a/go.mod b/go.mod index db8eaf6b01..4399295049 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/IBM-Cloud/terraform-provider-ibm go 1.18 require ( - github.com/IBM-Cloud/bluemix-go v0.0.0-20231017073329-75ebe90c98ba + github.com/IBM-Cloud/bluemix-go v0.0.0-20231123082353-50e8cc9c6959 github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20231106114255-c50117860a3c - github.com/IBM-Cloud/power-go-client v1.5.2 + github.com/IBM-Cloud/power-go-client v1.5.4 github.com/IBM/apigateway-go-sdk v0.0.0-20210714141226-a5d5d49caaca github.com/IBM/appconfiguration-go-admin-sdk v0.3.0 github.com/IBM/appid-management-go-sdk v0.0.0-20210908164609-dd0e0eaf732f @@ -17,15 +17,15 @@ require ( github.com/IBM/event-notifications-go-admin-sdk v0.2.7 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.14.1 + github.com/IBM/go-sdk-core/v5 v5.15.0 github.com/IBM/ibm-cos-sdk-go v1.10.0 github.com/IBM/ibm-cos-sdk-go-config v1.2.0 github.com/IBM/ibm-hpcs-tke-sdk v0.0.0-20211109141421-a4b61b05f7d1 github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta github.com/IBM/keyprotect-go-client v0.12.2 github.com/IBM/networking-go-sdk v0.42.2 - github.com/IBM/platform-services-go-sdk v0.53.1 - github.com/IBM/project-go-sdk v0.0.99 + github.com/IBM/platform-services-go-sdk v0.54.0 + github.com/IBM/project-go-sdk v0.1.1 github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 github.com/IBM/scc-go-sdk/v5 v5.1.3 github.com/IBM/schematics-go-sdk v0.2.2 @@ -96,7 +96,7 @@ require ( github.com/frankban/quicktest v1.14.3 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect - github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/analysis v0.21.4 // indirect diff --git a/go.sum b/go.sum index 88ee4535db..790b3e28ed 100644 --- a/go.sum +++ b/go.sum @@ -100,15 +100,13 @@ github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3 github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.4/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/IBM-Cloud/bluemix-go v0.0.0-20231017073329-75ebe90c98ba h1:8U4HByOYJiaGWBpGjdRIzyzu0NBzjywh//CZnSbEsPw= -github.com/IBM-Cloud/bluemix-go v0.0.0-20231017073329-75ebe90c98ba/go.mod h1:mt+O8ryLVANrBKlA4RxKdENp3q6Q7mKQIi2nkiibZbU= -github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20230822142550-30562e113de9 h1:sXRzCK3Glxpyu66Tu2NjztLdT5sDwj4qly+MJKRhdWY= -github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20230822142550-30562e113de9/go.mod h1:xUQL9SGAjoZFd4GNjrjjtEpjpkgU7RFXRyHesbKTjiY= +github.com/IBM-Cloud/bluemix-go v0.0.0-20231123082353-50e8cc9c6959 h1:dvvI4ybsYx6M7fFGrg3HjlNnYxEBi9jJdSU0JhjJbG8= +github.com/IBM-Cloud/bluemix-go v0.0.0-20231123082353-50e8cc9c6959/go.mod h1:jIGLnIfj+uBv2ALz3rVHzNbNwt0V/bEWNeJKECa8Q+k= github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20231106114255-c50117860a3c h1:tRS4VuOG3lHNG+yrsh3vZZQDVNLuFJB0oZbTJp9YXds= github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20231106114255-c50117860a3c/go.mod h1:xUQL9SGAjoZFd4GNjrjjtEpjpkgU7RFXRyHesbKTjiY= github.com/IBM-Cloud/ibm-cloud-cli-sdk v0.5.3/go.mod h1:RiUvKuHKTBmBApDMUQzBL14pQUGKcx/IioKQPIcRQjs= -github.com/IBM-Cloud/power-go-client v1.5.2 h1:p8+vY9+wtr4BIa2+Y4EVI0jlvRg+FLWsbOpWYNlKXDw= -github.com/IBM-Cloud/power-go-client v1.5.2/go.mod h1:Vd8aSxWA30soUhE2U+tmzaYDUVNOmQE3/npny7BsN6Y= +github.com/IBM-Cloud/power-go-client v1.5.4 h1:fk+QgOdZvwq696UynehfGrMGMHXDYOJfRCE3Pec9o6c= +github.com/IBM-Cloud/power-go-client v1.5.4/go.mod h1:ZsKqKC4d4MAWujkttW1w9tG7xjlIbkIpVENX476ghVY= github.com/IBM-Cloud/softlayer-go v1.0.5-tf h1:koUAyF9b6X78lLLruGYPSOmrfY2YcGYKOj/Ug9nbKNw= github.com/IBM-Cloud/softlayer-go v1.0.5-tf/go.mod h1:6HepcfAXROz0Rf63krk5hPZyHT6qyx2MNvYyHof7ik4= github.com/IBM/apigateway-go-sdk v0.0.0-20210714141226-a5d5d49caaca h1:crniVcf+YcmgF03NmmfonXwSQ73oJF+IohFYBwknMxs= @@ -141,9 +139,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.12.1/go.mod h1:WZPFasUzsKab/2mzt29xPcfruSk5js2ywAPwW4VJjdI= -github.com/IBM/go-sdk-core/v5 v5.14.1 h1:WR1r0zz+gDW++xzZjF41r9ueY4JyjS2vgZjiYs8lO3c= -github.com/IBM/go-sdk-core/v5 v5.14.1/go.mod h1:MUvIr/1mgGh198ZXL+ByKz9Qs1JoEh80v/96x8jPXNY= +github.com/IBM/go-sdk-core/v5 v5.15.0 h1:AhFoWVk3i58f9vnDoEoZumI/zbtRoP5moWIz5YQOmZg= +github.com/IBM/go-sdk-core/v5 v5.15.0/go.mod h1:5Obavm/s1Tc2PxivEIfgCvj/HJ5h3QIOjLHS5y8QJf0= github.com/IBM/ibm-cos-sdk-go v1.3.1/go.mod h1:YLBAYobEA8bD27P7xpMwSQeNQu6W3DNBtBComXrRzRY= github.com/IBM/ibm-cos-sdk-go v1.10.0 h1:/2VIev2/jBei39OqU2+nSZQnoWJ+KtkiSAIDkqsd7uU= github.com/IBM/ibm-cos-sdk-go v1.10.0/go.mod h1:C8KRTRaoD3CWPPBOa6FCOpdh0ZMlUjKAAA4i3F+Q/sc= @@ -158,14 +155,10 @@ github.com/IBM/keyprotect-go-client v0.12.2 h1:Cjxcqin9Pl0xz3MnxdiVd4v/eIa79xL3h github.com/IBM/keyprotect-go-client v0.12.2/go.mod h1:yr8h2noNgU8vcbs+vhqoXp3Lmv73PI0zAc6VMgFvWwM= github.com/IBM/networking-go-sdk v0.42.2 h1:caqjx4jyFHi10Vlf3skHvlL6K3YJRVstsmCBmvdyqkA= github.com/IBM/networking-go-sdk v0.42.2/go.mod h1:lTUZwtUkMANMnrLHFIgRhHrkBfwASY/Iho1fabaPHxo= -github.com/IBM/platform-services-go-sdk v0.52.0 h1:hbf640xE8T0Rwy2IUf5Pu4OATabGS4IDMnEInXUXs4o= -github.com/IBM/platform-services-go-sdk v0.52.0/go.mod h1:6LxcUhIaSLP4SuQJXF9oLXBamSQogs5D9BcVwr4hmfU= -github.com/IBM/platform-services-go-sdk v0.52.1 h1:fUCtYMAekzsWO/ylZi31j6BpyJ1xKb39NG62zBXePbg= -github.com/IBM/platform-services-go-sdk v0.52.1/go.mod h1:6LxcUhIaSLP4SuQJXF9oLXBamSQogs5D9BcVwr4hmfU= -github.com/IBM/platform-services-go-sdk v0.53.1 h1:axpK4dzlf+C+KgHQZWXoKSUMoV2t6OrR5kGGumUEXrI= -github.com/IBM/platform-services-go-sdk v0.53.1/go.mod h1:CWSprvsCsXWvujmBzbtoJSmbRZS9FVV3O594b0t/GiM= -github.com/IBM/project-go-sdk v0.0.99 h1:rQU/uQLW83OsAUfP/d8fFSIjp8ooEQIFjalYQD4i4aY= -github.com/IBM/project-go-sdk v0.0.99/go.mod h1:lqe0M4cKvABI1iHR1b+KfasVcxQL6nl2VJ8eOyQs8Ig= +github.com/IBM/platform-services-go-sdk v0.54.0 h1:WjHWm9ZAJvlq07E1WXXtEe+d/B0sazWD6cEWVT7EMLU= +github.com/IBM/platform-services-go-sdk v0.54.0/go.mod h1:CWSprvsCsXWvujmBzbtoJSmbRZS9FVV3O594b0t/GiM= +github.com/IBM/project-go-sdk v0.1.1 h1:x1PkGUTkKpgxoXs/6IG4U1mk5BgaPEaRMVpXTs52rE4= +github.com/IBM/project-go-sdk v0.1.1/go.mod h1:lqe0M4cKvABI1iHR1b+KfasVcxQL6nl2VJ8eOyQs8Ig= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 h1:NPUhkoOCRuv3OFWt19PmwjXGGTKlvmbuPg9fUrBUNe4= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5/go.mod h1:b07XHUVh0XYnQE9s2mqgjYST1h9buaQNqN4EcKhOsX0= github.com/IBM/sarama v1.41.2 h1:ZDBZfGPHAD4uuAtSv4U22fRZBgst0eEwGFzLj0fb85c= @@ -477,8 +470,8 @@ github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti 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= -github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= -github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA= +github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= @@ -1276,8 +1269,8 @@ github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxe github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= github.com/onsi/ginkgo/v2 v2.9.7/go.mod h1:cxrmXWykAwTwhQsJOPfdIDiJ+l2RYq7U8hFU+M/1uw0= github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= -github.com/onsi/ginkgo/v2 v2.12.0 h1:UIVDowFPwpg6yMUpPjGkYvf06K3RAiJXUhCxEwQVHRI= -github.com/onsi/ginkgo/v2 v2.12.0/go.mod h1:ZNEzXISYlqpb8S36iN71ifqLi3vVD1rVJGvWRCJOUpQ= +github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -1309,8 +1302,8 @@ github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+q github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4= github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/onsi/gomega v1.28.0/go.mod h1:A1H2JE76sI14WIP57LMKj7FVfCHx3g3BcZVjJG8bjX8= github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= 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/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= @@ -1943,6 +1936,7 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/ibm/acctest/acctest.go b/ibm/acctest/acctest.go index 5e411830a7..bee8b7cb2b 100644 --- a/ibm/acctest/acctest.go +++ b/ibm/acctest/acctest.go @@ -199,6 +199,7 @@ var ( PiStoragePool string PiStorageType string Pi_shared_processor_pool_id string + Pi_resource_group_id string ) var ( @@ -1064,6 +1065,12 @@ func init() { fmt.Println("[WARN] Set the environment variable PI_SHARED_PROCESSOR_POOL_ID for testing ibm_pi_shared_processor_pool resource else it is set to default value 'tf-pi-shared-processor-pool'") } + Pi_resource_group_id = os.Getenv("PI_RESOURCE_GROUP_ID") + if Pi_resource_group_id == "" { + Pi_resource_group_id = "" + fmt.Println("[WARN] Set the environment variable PI_RESOURCE_GROUP_ID for testing ibm_pi_workspace resource else it is set to default value ''") + } + WorkspaceID = os.Getenv("SCHEMATICS_WORKSPACE_ID") if WorkspaceID == "" { WorkspaceID = "us-south.workspace.tf-acc-test-schematics-state-test.392cd99f" diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index 7c4c292457..6f2c567c28 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -860,8 +860,9 @@ func Provider() *schema.Provider { "ibm_code_engine_secret": codeengine.DataSourceIbmCodeEngineSecret(), // Added for Project - "ibm_project": project.DataSourceIbmProject(), - "ibm_project_config": project.DataSourceIbmProjectConfig(), + "ibm_project": project.DataSourceIbmProject(), + "ibm_project_config": project.DataSourceIbmProjectConfig(), + "ibm_project_environment": project.DataSourceIbmProjectEnvironment(), }, ResourcesMap: map[string]*schema.Resource{ @@ -1173,6 +1174,7 @@ func Provider() *schema.Provider { "ibm_pi_placement_group": power.ResourceIBMPIPlacementGroup(), "ibm_pi_spp_placement_group": power.ResourceIBMPISPPPlacementGroup(), "ibm_pi_shared_processor_pool": power.ResourceIBMPISharedProcessorPool(), + "ibm_pi_workspace": power.ResourceIBMPIWorkspace(), // Private DNS related resources "ibm_dns_zone": dnsservices.ResourceIBMPrivateDNSZone(), @@ -1375,8 +1377,9 @@ func Provider() *schema.Provider { "ibm_code_engine_secret": codeengine.ResourceIbmCodeEngineSecret(), // Added for Project - "ibm_project": project.ResourceIbmProject(), - "ibm_project_config": project.ResourceIbmProjectConfig(), + "ibm_project": project.ResourceIbmProject(), + "ibm_project_config": project.ResourceIbmProjectConfig(), + "ibm_project_environment": project.ResourceIbmProjectEnvironment(), }, ConfigureFunc: providerConfigure, @@ -1634,8 +1637,9 @@ func Validator() validate.ValidatorDict { "ibm_code_engine_secret": codeengine.ResourceIbmCodeEngineSecretValidator(), // Added for Project - "ibm_project": project.ResourceIbmProjectValidator(), - "ibm_project_config": project.ResourceIbmProjectConfigValidator(), + "ibm_project": project.ResourceIbmProjectValidator(), + "ibm_project_config": project.ResourceIbmProjectConfigValidator(), + "ibm_project_environment": project.ResourceIbmProjectEnvironmentValidator(), }, DataSourceValidatorDictionary: map[string]*validate.ResourceValidator{ "ibm_is_subnet": vpc.DataSourceIBMISSubnetValidator(), diff --git a/ibm/service/cis/resource_ibm_cis_domain_settings.go b/ibm/service/cis/resource_ibm_cis_domain_settings.go index 5a83a01ae0..47bb6046a7 100644 --- a/ibm/service/cis/resource_ibm_cis_domain_settings.go +++ b/ibm/service/cis/resource_ibm_cis_domain_settings.go @@ -127,7 +127,6 @@ func ResourceIBMCISSettings() *schema.Resource { ValidateFunc: validate.InvokeValidator( ibmCISDomainSettings, cisDomainSettingsTLSVersionValidatorID), - Default: "1.1", }, cisDomainSettingsCNAMEFlattening: { Type: schema.TypeString, diff --git a/ibm/service/cis/resource_ibm_cis_tls_settings.go b/ibm/service/cis/resource_ibm_cis_tls_settings.go index d6552318bc..76fab72351 100644 --- a/ibm/service/cis/resource_ibm_cis_tls_settings.go +++ b/ibm/service/cis/resource_ibm_cis_tls_settings.go @@ -56,7 +56,6 @@ func ResourceIBMCISTLSSettings() *schema.Resource { Description: "Minimum version of TLS required", Optional: true, ValidateFunc: validate.InvokeValidator(ibmCISTLSSettings, cisTLSSettingsMinTLSVersion), - Default: "1.1", }, }, Create: resourceCISTLSSettingsUpdate, diff --git a/ibm/service/codeengine/data_source_ibm_code_engine_job.go b/ibm/service/codeengine/data_source_ibm_code_engine_job.go index f42ee19247..6182556bb5 100644 --- a/ibm/service/codeengine/data_source_ibm_code_engine_job.go +++ b/ibm/service/codeengine/data_source_ibm_code_engine_job.go @@ -129,7 +129,7 @@ func DataSourceIbmCodeEngineJob() *schema.Resource { "run_mode": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `max_execution_time` and `retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `max_execution_time` and `retry_limit` properties are not allowed.", + Description: "The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `scale_max_execution_time` and `scale_retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `scale_max_execution_time` and `scale_retry_limit` properties are not allowed.", }, "run_service_account": &schema.Schema{ Type: schema.TypeString, diff --git a/ibm/service/codeengine/resource_ibm_code_engine_domain_mapping_test.go b/ibm/service/codeengine/resource_ibm_code_engine_domain_mapping_test.go index e346ebc474..d6178fb825 100644 --- a/ibm/service/codeengine/resource_ibm_code_engine_domain_mapping_test.go +++ b/ibm/service/codeengine/resource_ibm_code_engine_domain_mapping_test.go @@ -6,7 +6,6 @@ package codeengine_test import ( "encoding/base64" "fmt" - "log" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" @@ -42,7 +41,7 @@ func TestAccIbmCodeEngineDomainMappingBasic(t *testing.T) { Providers: acc.TestAccProviders, CheckDestroy: testAccCheckIbmCodeEngineDomainMappingDestroy, Steps: []resource.TestStep{ - resource.TestStep{ + { Config: testAccCheckIbmCodeEngineDomainMappingConfigBasic(projectID, app1Name, app2Name, domainMappingTLSKey, domainMappingTLSCert, secretName, app1Name, domainMappingName, "app1_instance"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIbmCodeEngineDomainMappingExists("ibm_code_engine_domain_mapping.code_engine_domain_mapping_instance", conf), @@ -60,7 +59,7 @@ func TestAccIbmCodeEngineDomainMappingBasic(t *testing.T) { resource.TestCheckResourceAttr("ibm_code_engine_domain_mapping.code_engine_domain_mapping_instance", "tls_secret", secretName), ), }, - resource.TestStep{ + { Config: testAccCheckIbmCodeEngineDomainMappingConfigBasic(projectID, app1Name, app2Name, domainMappingTLSKey, domainMappingTLSCert, secretName, app2Name, domainMappingName, "app2_instance"), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("ibm_code_engine_domain_mapping.code_engine_domain_mapping_instance", "id"), @@ -215,7 +214,7 @@ func testAccCheckIbmCodeEngineDomainMappingDestroy(s *terraform.State) error { func decodeBase64EnvVar(base64Text string, envVar string) string { decodedText, err := base64.StdEncoding.DecodeString(base64Text) if err != nil { - log.Println(fmt.Errorf("Error decoding environment variable %s: %s", envVar, err)) + fmt.Printf("Error decoding environment variable %s: %s", envVar, err) return "" } return string(decodedText) diff --git a/ibm/service/codeengine/resource_ibm_code_engine_job.go b/ibm/service/codeengine/resource_ibm_code_engine_job.go index 41dd8707dc..fe51077431 100644 --- a/ibm/service/codeengine/resource_ibm_code_engine_job.go +++ b/ibm/service/codeengine/resource_ibm_code_engine_job.go @@ -119,7 +119,7 @@ func ResourceIbmCodeEngineJob() *schema.Resource { Optional: true, Default: "task", ValidateFunc: validate.InvokeValidator("ibm_code_engine_job", "run_mode"), - Description: "The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `max_execution_time` and `retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `max_execution_time` and `retry_limit` properties are not allowed.", + Description: "The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `scale_max_execution_time` and `scale_retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `scale_max_execution_time` and `scale_retry_limit` properties are not allowed.", }, "run_service_account": &schema.Schema{ Type: schema.TypeString, diff --git a/ibm/service/kubernetes/resource_ibm_container_cluster.go b/ibm/service/kubernetes/resource_ibm_container_cluster.go index 2d786d3824..37d74326fa 100644 --- a/ibm/service/kubernetes/resource_ibm_container_cluster.go +++ b/ibm/service/kubernetes/resource_ibm_container_cluster.go @@ -122,6 +122,11 @@ func ResourceIBMContainerCluster() *schema.Resource { Default: false, Description: "Specify this option to use the KMS public service endpoint.", }, + "account_id": { + Type: schema.TypeString, + Optional: true, + Description: "Account ID of KMS instance holder - if not provided, defaults to the account in use", + }, }, }, }, @@ -1047,6 +1052,12 @@ func resourceIBMContainerClusterUpdate(d *schema.ResourceData, meta interface{}) endpoint := privateEndpoint.(bool) kmsConfig.PrivateEndpoint = endpoint } + + //Read optional account id + if accountid := kmsMap["account_id"]; accountid != nil { + accountid_string := accountid.(string) + kmsConfig.AccountID = accountid_string + } } } diff --git a/ibm/service/kubernetes/resource_ibm_container_vpc_cluster.go b/ibm/service/kubernetes/resource_ibm_container_vpc_cluster.go index e05e29dbeb..944f8f074f 100644 --- a/ibm/service/kubernetes/resource_ibm_container_vpc_cluster.go +++ b/ibm/service/kubernetes/resource_ibm_container_vpc_cluster.go @@ -96,6 +96,11 @@ func ResourceIBMContainerVpcCluster() *schema.Resource { Default: false, Description: "Specify this option to use the KMS public service endpoint.", }, + "account_id": { + Type: schema.TypeString, + Optional: true, + Description: "Account ID of KMS instance holder - if not provided, defaults to the account in use", + }, }, }, }, @@ -685,6 +690,12 @@ func resourceIBMContainerVpcClusterUpdate(d *schema.ResourceData, meta interface endpoint := privateEndpoint.(bool) kmsConfig.PrivateEndpoint = endpoint } + + //Read optional account id + if accountid := kmsMap["account_id"]; accountid != nil { + accountid_string := accountid.(string) + kmsConfig.AccountID = accountid_string + } } } diff --git a/ibm/service/kubernetes/resource_ibm_container_vpc_cluster_test.go b/ibm/service/kubernetes/resource_ibm_container_vpc_cluster_test.go index e565eaf810..ad067026ae 100644 --- a/ibm/service/kubernetes/resource_ibm_container_vpc_cluster_test.go +++ b/ibm/service/kubernetes/resource_ibm_container_vpc_cluster_test.go @@ -464,7 +464,7 @@ func TestAccIBMContainerVpcClusterBaseEnvvar(t *testing.T) { ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{ - "wait_till", "update_all_workers", "kms_config", "force_delete_storage", "wait_for_worker_update"}, + "wait_till", "update_all_workers", "kms_config", "force_delete_storage", "wait_for_worker_update", "albs"}, }, }, }) @@ -512,7 +512,22 @@ func testAccCheckIBMContainerVpcClusterEnvvar(name string) string { // export IBM_CLUSTER_VPC_ID // export IBM_CLUSTER_VPC_SUBNET_ID // export IBM_CLUSTER_VPC_RESOURCE_GROUP_ID +// optionally for kms and cross account kms: +// export IBM_KMS_INSTANCE_ID +// export IBM_CRK_ID +// for cross account kms: +// export IBM_KMS_ACCOUNT_ID func testAccCheckIBMContainerVpcClusterBaseEnvvar(name string) string { + var kmsConfig string + if acc.KmsInstanceID != "" { + kmsConfig = fmt.Sprintf(` + kms_config { + instance_id = "%[1]s" + crk_id = "%[2]s" + account_id = "%[3]s" + } + `, acc.KmsInstanceID, acc.CrkID, acc.KmsAccountID) + } config := fmt.Sprintf(` resource "ibm_container_vpc_cluster" "cluster" { name = "%[1]s" @@ -525,8 +540,10 @@ func testAccCheckIBMContainerVpcClusterBaseEnvvar(name string) string { name = "us-south-1" } wait_till = "normal" + %[5]s } - `, name, acc.IksClusterVpcID, acc.IksClusterResourceGroupID, acc.IksClusterSubnetID) + `, name, acc.IksClusterVpcID, acc.IksClusterResourceGroupID, acc.IksClusterSubnetID, kmsConfig) + fmt.Println(config) return config } diff --git a/ibm/service/power/ibm_pi_constants.go b/ibm/service/power/ibm_pi_constants.go index ee62773462..8e66a4bd83 100644 --- a/ibm/service/power/ibm_pi_constants.go +++ b/ibm/service/power/ibm_pi_constants.go @@ -165,4 +165,10 @@ const ( Attr_DatacenterStatus = "pi_datacenter_status" Attr_DatacenterType = "pi_datacenter_type" Attr_DatacenterHref = "pi_datacenter_href" + + // IBM PI Workspace + PIWorkspaceName = "pi_name" + PIWorkspaceDatacenter = "pi_datacenter" + PIWorkspaceResourceGroup = "pi_resource_group_id" + PIWorkspacePlan = "pi_plan" ) diff --git a/ibm/service/power/resource_ibm_pi_workspace.go b/ibm/service/power/resource_ibm_pi_workspace.go new file mode 100644 index 0000000000..590f6ac657 --- /dev/null +++ b/ibm/service/power/resource_ibm_pi_workspace.go @@ -0,0 +1,179 @@ +package power + +import ( + "context" + "fmt" + "log" + "time" + + st "github.com/IBM-Cloud/power-go-client/clients/instance" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func ResourceIBMPIWorkspace() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceIBMPIWorkspaceCreate, + ReadContext: resourceIBMPIWorkspaceRead, + DeleteContext: resourceIBMPIWorkspaceDelete, + Importer: &schema.ResourceImporter{}, + + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(30 * time.Minute), + Delete: schema.DefaultTimeout(30 * time.Minute), + }, + + Schema: map[string]*schema.Schema{ + PIWorkspaceName: { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "A descriptive name used to identify the workspace.", + }, + PIWorkspaceDatacenter: { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Target location or environment to create the resource instance.", + }, + PIWorkspaceResourceGroup: { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "The ID of the resource group where you want to create the workspace. You can retrieve the value from data source ibm_resource_group.", + }, + PIWorkspacePlan: { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Plan associated with the offering; Valid values are public or private.", + }, + }, + } +} + +func resourceIBMPIWorkspaceCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + sess, err := meta.(conns.ClientSession).IBMPISession() + if err != nil { + return diag.FromErr(err) + } + + name := d.Get(PIWorkspaceName).(string) + datacenter := d.Get(PIWorkspaceDatacenter).(string) + resourceGroup := d.Get(PIWorkspaceResourceGroup).(string) + plan := d.Get(PIWorkspacePlan).(string) + + // No need for cloudInstanceID because we are creating a workspace + client := st.NewIBMPIWorkspacesClient(ctx, sess, "") + controller, _, err := client.Create(name, datacenter, resourceGroup, plan) + if err != nil { + log.Printf("[DEBUG] create workspace failed %v", err) + return diag.FromErr(err) + } + + d.SetId(*controller.GUID) + _, err = waitForResourceInstanceCreate(ctx, client, *controller.GUID, d.Timeout(schema.TimeoutCreate)) + if err != nil { + return diag.FromErr(err) + } + + return resourceIBMPIWorkspaceRead(ctx, d, meta) +} + +func waitForResourceInstanceCreate(ctx context.Context, client *st.IBMPIWorkspacesClient, id string, timeout time.Duration) (interface{}, error) { + stateConf := &resource.StateChangeConf{ + Pending: []string{"in progress", "inactive", "provisioning"}, + Target: []string{"active"}, + Refresh: isIBMPIWorkspaceCreateRefreshFunc(client, id), + Delay: 10 * time.Second, + MinTimeout: 1 * time.Minute, + Timeout: timeout, + } + return stateConf.WaitForStateContext(ctx) +} + +func isIBMPIWorkspaceCreateRefreshFunc(client *st.IBMPIWorkspacesClient, id string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + controller, _, err := client.GetRC(id) + if err != nil { + return nil, "", err + } + if *controller.State == "failed" { + return controller, *controller.State, fmt.Errorf("[ERROR] The resource instance %s failed to create", id) + } + return controller, *controller.State, nil + } +} + +func resourceIBMPIWorkspaceRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + // session + sess, err := meta.(conns.ClientSession).IBMPISession() + if err != nil { + return diag.FromErr(err) + } + + cloudInstanceID := d.Id() + client := st.NewIBMPIWorkspacesClient(ctx, sess, cloudInstanceID) + controller, _, err := client.GetRC(cloudInstanceID) + if err != nil { + return diag.FromErr(err) + } + d.Set(PIWorkspaceName, controller.Name) + + return nil +} + +func resourceIBMPIWorkspaceDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + sess, err := meta.(conns.ClientSession).IBMPISession() + if err != nil { + return diag.FromErr(err) + } + + cloudInstanceID := d.Id() + client := st.NewIBMPIWorkspacesClient(ctx, sess, cloudInstanceID) + response, err := client.Delete(cloudInstanceID) + if err != nil && response != nil && response.StatusCode == 410 { + return nil + } + _, err = waitForResourceInstanceDelete(ctx, client, cloudInstanceID, d.Timeout(schema.TimeoutDelete)) + if err != nil { + return diag.FromErr(err) + } + d.SetId("") + + return nil +} + +func waitForResourceInstanceDelete(ctx context.Context, client *st.IBMPIWorkspacesClient, id string, timeout time.Duration) (interface{}, error) { + stateConf := &resource.StateChangeConf{ + Pending: []string{"in progress", "inactive", "active"}, + Target: []string{"removed", "pending_reclamation"}, + Refresh: isIBMPIResourceDeleteRefreshFunc(client, id), + Delay: 10 * time.Second, + MinTimeout: 1 * time.Second, + Timeout: timeout, + } + return stateConf.WaitForStateContext(ctx) +} + +func isIBMPIResourceDeleteRefreshFunc(client *st.IBMPIWorkspacesClient, id string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + controller, response, err := client.GetRC(id) + if err != nil { + if response != nil && response.StatusCode == 404 { + return controller, "active", nil + } + return nil, "", err + } + if controller == nil { + return controller, "removed", nil + } else { + if *controller.State == "failed" { + return controller, *controller.State, fmt.Errorf("[ERROR] The resource instance %s failed to delete", id) + } + return controller, *controller.State, nil + } + } +} diff --git a/ibm/service/power/resource_ibm_pi_workspace_test.go b/ibm/service/power/resource_ibm_pi_workspace_test.go new file mode 100644 index 0000000000..d38062f794 --- /dev/null +++ b/ibm/service/power/resource_ibm_pi_workspace_test.go @@ -0,0 +1,98 @@ +package power_test + +import ( + "context" + "errors" + "fmt" + "strings" + "testing" + + st "github.com/IBM-Cloud/power-go-client/clients/instance" + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "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" +) + +func TestAccIBMPIWorkspaceBasic(t *testing.T) { + name := fmt.Sprintf("tf-pi-workspace-%d", acctest.RandIntRange(10, 100)) + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccIBMPIWorkspaceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMPIWorkspaceConfig(name), + Check: resource.ComposeTestCheckFunc( + testAccCheckIBMPIWorkspaceExists("ibm_pi_workspace.powervs_service_instance"), + resource.TestCheckResourceAttrSet("ibm_pi_workspace.powervs_service_instance", "id"), + ), + }, + }, + }) +} + +func testAccCheckIBMPIWorkspaceConfig(name string) string { + return fmt.Sprintf(` + resource "ibm_pi_workspace" "powervs_service_instance" { + pi_name = "%[1]s" + pi_datacenter = "dal" + pi_resource_group_id = "%[2]s" + pi_plan = "public" + } + `, name, acc.Pi_resource_group_id) +} + +func testAccIBMPIWorkspaceDestroy(s *terraform.State) error { + sess, err := acc.TestAccProvider.Meta().(conns.ClientSession).IBMPISession() + if err != nil { + return err + } + for _, rs := range s.RootModule().Resources { + if rs.Type != "ibm_pi_workspace" { + continue + } + cloudInstanceID := rs.Primary.ID + client := st.NewIBMPIWorkspacesClient(context.Background(), sess, cloudInstanceID) + workspace, resp, err := client.GetRC(cloudInstanceID) + if err == nil { + if *workspace.State == "active" { + return fmt.Errorf("Resource Instance still exists: %s", rs.Primary.ID) + } + } else { + if !strings.Contains(err.Error(), "404") { + return fmt.Errorf("[ERROR] Error checking if Resource Instance (%s) has been destroyed: %s with resp code: %s", rs.Primary.ID, err, resp) + } + } + } + return nil +} + +func testAccCheckIBMPIWorkspaceExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + + rs, ok := s.RootModule().Resources[n] + + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return errors.New("No Record ID is set") + } + + sess, err := acc.TestAccProvider.Meta().(conns.ClientSession).IBMPISession() + if err != nil { + return err + } + + cloudInstanceID := rs.Primary.ID + client := st.NewIBMPIWorkspacesClient(context.Background(), sess, cloudInstanceID) + _, _, err = client.GetRC(cloudInstanceID) + if err != nil { + return err + } + return nil + } +} diff --git a/ibm/service/project/data_source_ibm_project.go b/ibm/service/project/data_source_ibm_project.go index 277d769e3a..1ba775f958 100644 --- a/ibm/service/project/data_source_ibm_project.go +++ b/ibm/service/project/data_source_ibm_project.go @@ -75,16 +75,21 @@ func DataSourceIbmProject() *schema.Resource { Computed: true, Description: "The IBM Cloud location where a resource is deployed.", }, - "resource_group": &schema.Schema{ + "resource_group_id": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The resource group where the project's data and tools are created.", + Description: "The resource group id where the project's data and tools are created.", }, "state": &schema.Schema{ Type: schema.TypeString, Computed: true, Description: "The project status value.", }, + "resource_group": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The resource group name where the project's data and tools are created.", + }, "event_notifications_crn": &schema.Schema{ Type: schema.TypeString, Computed: true, @@ -135,7 +140,7 @@ func DataSourceIbmProject() *schema.Resource { "name": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The configuration name.", + Description: "The configuration name. It is unique within the account across projects and regions.", }, "description": &schema.Schema{ Type: schema.TypeString, @@ -254,7 +259,7 @@ func DataSourceIbmProject() *schema.Resource { "name": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The name of the environment.", + Description: "The name of the environment. It is unique within the account across projects and regions.", }, "description": &schema.Schema{ Type: schema.TypeString, @@ -276,7 +281,7 @@ func DataSourceIbmProject() *schema.Resource { "name": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The name of the project.", + Description: "The name of the project. It is unique within the account across regions.", }, "description": &schema.Schema{ Type: schema.TypeString, @@ -343,14 +348,18 @@ func dataSourceIbmProjectRead(context context.Context, d *schema.ResourceData, m return diag.FromErr(fmt.Errorf("Error setting location: %s", err)) } - if err = d.Set("resource_group", project.ResourceGroup); err != nil { - return diag.FromErr(fmt.Errorf("Error setting resource_group: %s", err)) + if err = d.Set("resource_group_id", project.ResourceGroupID); err != nil { + return diag.FromErr(fmt.Errorf("Error setting resource_group_id: %s", err)) } if err = d.Set("state", project.State); err != nil { return diag.FromErr(fmt.Errorf("Error setting state: %s", err)) } + if err = d.Set("resource_group", project.ResourceGroup); err != nil { + return diag.FromErr(fmt.Errorf("Error setting resource_group: %s", err)) + } + if err = d.Set("event_notifications_crn", project.EventNotificationsCrn); err != nil { return diag.FromErr(fmt.Errorf("Error setting event_notifications_crn: %s", err)) } @@ -358,7 +367,7 @@ func dataSourceIbmProjectRead(context context.Context, d *schema.ResourceData, m configs := []map[string]interface{}{} if project.Configs != nil { for _, modelItem := range project.Configs { - modelMap, err := dataSourceIbmProjectProjectConfigCollectionMemberToMap(&modelItem) + modelMap, err := dataSourceIbmProjectProjectConfigSummaryToMap(&modelItem) if err != nil { return diag.FromErr(err) } @@ -372,7 +381,7 @@ func dataSourceIbmProjectRead(context context.Context, d *schema.ResourceData, m environments := []map[string]interface{}{} if project.Environments != nil { for _, modelItem := range project.Environments { - modelMap, err := dataSourceIbmProjectProjectEnvironmentCollectionMemberToMap(&modelItem) + modelMap, err := dataSourceIbmProjectProjectEnvironmentSummaryToMap(&modelItem) if err != nil { return diag.FromErr(err) } @@ -415,7 +424,7 @@ func dataSourceIbmProjectCumulativeNeedsAttentionToMap(model *projectv1.Cumulati return modelMap, nil } -func dataSourceIbmProjectProjectConfigCollectionMemberToMap(model *projectv1.ProjectConfigCollectionMember) (map[string]interface{}, error) { +func dataSourceIbmProjectProjectConfigSummaryToMap(model *projectv1.ProjectConfigSummary) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ApprovedVersion != nil { approvedVersionMap, err := dataSourceIbmProjectProjectConfigVersionSummaryToMap(model.ApprovedVersion) @@ -434,12 +443,8 @@ func dataSourceIbmProjectProjectConfigCollectionMemberToMap(model *projectv1.Pro modelMap["id"] = model.ID modelMap["version"] = flex.IntValue(model.Version) modelMap["state"] = model.State - if model.CreatedAt != nil { - modelMap["created_at"] = model.CreatedAt.String() - } - if model.ModifiedAt != nil { - modelMap["modified_at"] = model.ModifiedAt.String() - } + modelMap["created_at"] = model.CreatedAt.String() + modelMap["modified_at"] = model.ModifiedAt.String() modelMap["href"] = model.Href definitionMap, err := dataSourceIbmProjectProjectConfigDefinitionNameDescriptionToMap(model.Definition) if err != nil { @@ -492,7 +497,7 @@ func dataSourceIbmProjectProjectDefinitionReferenceToMap(model *projectv1.Projec return modelMap, nil } -func dataSourceIbmProjectProjectEnvironmentCollectionMemberToMap(model *projectv1.ProjectEnvironmentCollectionMember) (map[string]interface{}, error) { +func dataSourceIbmProjectProjectEnvironmentSummaryToMap(model *projectv1.ProjectEnvironmentSummary) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) modelMap["id"] = model.ID projectMap, err := dataSourceIbmProjectProjectReferenceToMap(model.Project) diff --git a/ibm/service/project/data_source_ibm_project_config.go b/ibm/service/project/data_source_ibm_project_config.go index e064294568..38ddf87947 100644 --- a/ibm/service/project/data_source_ibm_project_config.go +++ b/ibm/service/project/data_source_ibm_project_config.go @@ -129,7 +129,7 @@ func DataSourceIbmProjectConfig() *schema.Resource { "schematics": &schema.Schema{ Type: schema.TypeList, Computed: true, - Description: "A schematics workspace associated to a project configuration.", + Description: "A schematics workspace associated to a project configuration, with scripts.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "workspace_crn": &schema.Schema{ @@ -137,6 +137,150 @@ func DataSourceIbmProjectConfig() *schema.Resource { Computed: true, Description: "An existing schematics workspace CRN.", }, + "validate_pre_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "validate_post_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "deploy_pre_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "deploy_post_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "undeploy_pre_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "undeploy_post_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, }, }, }, @@ -153,20 +297,20 @@ func DataSourceIbmProjectConfig() *schema.Resource { "definition": &schema.Schema{ Type: schema.TypeList, Computed: true, - Description: "The type and output of a project configuration.", + Description: "The name and description of a project configuration.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The configuration name.", + Description: "The configuration name. It is unique within the account across projects and regions.", }, "description": &schema.Schema{ Type: schema.TypeString, Computed: true, Description: "A project configuration description.", }, - "environment": &schema.Schema{ + "environment_id": &schema.Schema{ Type: schema.TypeString, Computed: true, Description: "The ID of the project environment.", @@ -190,6 +334,7 @@ func DataSourceIbmProjectConfig() *schema.Resource { "api_key": &schema.Schema{ Type: schema.TypeString, Computed: true, + Sensitive: true, Description: "The IBM Cloud API Key.", }, }, @@ -204,12 +349,12 @@ func DataSourceIbmProjectConfig() *schema.Resource { "id": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The unique ID.", + Description: "The unique ID for that compliance profile.", }, "instance_id": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The unique ID.", + Description: "A unique ID for an instance of a compliance profile.", }, "instance_location": &schema.Schema{ Type: schema.TypeString, @@ -219,7 +364,7 @@ func DataSourceIbmProjectConfig() *schema.Resource { "attachment_id": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The unique ID.", + Description: "A unique ID for the attachment to a compliance profile.", }, "profile_name": &schema.Schema{ Type: schema.TypeString, @@ -232,7 +377,7 @@ func DataSourceIbmProjectConfig() *schema.Resource { "locator_id": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "A dotted value of catalogID.versionID.", + Description: "A unique concatenation of catalogID.versionID that identifies the DA in the catalog.", }, "inputs": &schema.Schema{ Type: schema.TypeList, @@ -250,11 +395,6 @@ func DataSourceIbmProjectConfig() *schema.Resource { Schema: map[string]*schema.Schema{}, }, }, - "type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "The type of a project configuration manual property.", - }, }, }, }, @@ -333,7 +473,7 @@ func dataSourceIbmProjectConfigRead(context context.Context, d *schema.ResourceD schematics := []map[string]interface{}{} if projectConfig.Schematics != nil { - modelMap, err := dataSourceIbmProjectConfigSchematicsWorkspaceToMap(projectConfig.Schematics) + modelMap, err := dataSourceIbmProjectConfigSchematicsMetadataToMap(projectConfig.Schematics) if err != nil { return diag.FromErr(err) } @@ -397,11 +537,67 @@ func dataSourceIbmProjectConfigProjectDefinitionReferenceToMap(model *projectv1. return modelMap, nil } -func dataSourceIbmProjectConfigSchematicsWorkspaceToMap(model *projectv1.SchematicsWorkspace) (map[string]interface{}, error) { +func dataSourceIbmProjectConfigSchematicsMetadataToMap(model *projectv1.SchematicsMetadata) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.WorkspaceCrn != nil { modelMap["workspace_crn"] = model.WorkspaceCrn } + if model.ValidatePreScript != nil { + validatePreScriptMap, err := dataSourceIbmProjectConfigScriptToMap(model.ValidatePreScript) + if err != nil { + return modelMap, err + } + modelMap["validate_pre_script"] = []map[string]interface{}{validatePreScriptMap} + } + if model.ValidatePostScript != nil { + validatePostScriptMap, err := dataSourceIbmProjectConfigScriptToMap(model.ValidatePostScript) + if err != nil { + return modelMap, err + } + modelMap["validate_post_script"] = []map[string]interface{}{validatePostScriptMap} + } + if model.DeployPreScript != nil { + deployPreScriptMap, err := dataSourceIbmProjectConfigScriptToMap(model.DeployPreScript) + if err != nil { + return modelMap, err + } + modelMap["deploy_pre_script"] = []map[string]interface{}{deployPreScriptMap} + } + if model.DeployPostScript != nil { + deployPostScriptMap, err := dataSourceIbmProjectConfigScriptToMap(model.DeployPostScript) + if err != nil { + return modelMap, err + } + modelMap["deploy_post_script"] = []map[string]interface{}{deployPostScriptMap} + } + if model.UndeployPreScript != nil { + undeployPreScriptMap, err := dataSourceIbmProjectConfigScriptToMap(model.UndeployPreScript) + if err != nil { + return modelMap, err + } + modelMap["undeploy_pre_script"] = []map[string]interface{}{undeployPreScriptMap} + } + if model.UndeployPostScript != nil { + undeployPostScriptMap, err := dataSourceIbmProjectConfigScriptToMap(model.UndeployPostScript) + if err != nil { + return modelMap, err + } + modelMap["undeploy_post_script"] = []map[string]interface{}{undeployPostScriptMap} + } + return modelMap, nil +} + +func dataSourceIbmProjectConfigScriptToMap(model *projectv1.Script) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Type != nil { + modelMap["type"] = model.Type + } + if model.Path != nil { + modelMap["path"] = model.Path + } + if model.ShortDescription != nil { + modelMap["short_description"] = model.ShortDescription + } return modelMap, nil } @@ -411,8 +607,8 @@ func dataSourceIbmProjectConfigProjectConfigResponseDefinitionToMap(model *proje if model.Description != nil { modelMap["description"] = model.Description } - if model.Environment != nil { - modelMap["environment"] = model.Environment + if model.EnvironmentID != nil { + modelMap["environment_id"] = model.EnvironmentID } if model.Authorizations != nil { authorizationsMap, err := dataSourceIbmProjectConfigProjectConfigAuthToMap(model.Authorizations) @@ -443,9 +639,6 @@ func dataSourceIbmProjectConfigProjectConfigResponseDefinitionToMap(model *proje } modelMap["settings"] = []map[string]interface{}{settingsMap} } - if model.Type != nil { - modelMap["type"] = model.Type - } return modelMap, nil } diff --git a/ibm/service/project/data_source_ibm_project_environment.go b/ibm/service/project/data_source_ibm_project_environment.go new file mode 100644 index 0000000000..e42f488a05 --- /dev/null +++ b/ibm/service/project/data_source_ibm_project_environment.go @@ -0,0 +1,321 @@ +// Copyright IBM Corp. 2023 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package project + +import ( + "context" + "fmt" + "log" + + "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/project-go-sdk/projectv1" +) + +func DataSourceIbmProjectEnvironment() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceIbmProjectEnvironmentRead, + + Schema: map[string]*schema.Schema{ + "project_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "The unique project ID.", + }, + "project_environment_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "The environment ID.", + }, + "project": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The project referenced by this resource.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The unique ID.", + }, + "definition": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The definition of the project reference.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The name of the project.", + }, + }, + }, + }, + "crn": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "An IBM Cloud resource name, which uniquely identifies a resource.", + }, + "href": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A URL.", + }, + }, + }, + }, + "created_at": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339.", + }, + "target_account": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The target account ID derived from the authentication block values.", + }, + "modified_at": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339.", + }, + "definition": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The environment definition.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The name of the environment. It is unique within the account across projects and regions.", + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The description of the environment.", + }, + "authorizations": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The authorization details. You can authorize by using a trusted profile or an API key in Secrets Manager.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "trusted_profile_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The trusted profile ID.", + }, + "method": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The authorization method. You can authorize by using a trusted profile or an API key in Secrets Manager.", + }, + "api_key": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Sensitive: true, + Description: "The IBM Cloud API Key.", + }, + }, + }, + }, + "inputs": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The input variables for configuration definition and environment.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{}, + }, + }, + "compliance_profile": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The profile required for compliance.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The unique ID for that compliance profile.", + }, + "instance_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A unique ID for an instance of a compliance profile.", + }, + "instance_location": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The location of the compliance instance.", + }, + "attachment_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A unique ID for the attachment to a compliance profile.", + }, + "profile_name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The name of the compliance profile.", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func dataSourceIbmProjectEnvironmentRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + projectClient, err := meta.(conns.ClientSession).ProjectV1() + if err != nil { + return diag.FromErr(err) + } + + getProjectEnvironmentOptions := &projectv1.GetProjectEnvironmentOptions{} + + getProjectEnvironmentOptions.SetProjectID(d.Get("project_id").(string)) + getProjectEnvironmentOptions.SetID(d.Get("project_environment_id").(string)) + + environment, response, err := projectClient.GetProjectEnvironmentWithContext(context, getProjectEnvironmentOptions) + if err != nil { + log.Printf("[DEBUG] GetProjectEnvironmentWithContext failed %s\n%s", err, response) + return diag.FromErr(fmt.Errorf("GetProjectEnvironmentWithContext failed %s\n%s", err, response)) + } + + d.SetId(fmt.Sprintf("%s/%s", *getProjectEnvironmentOptions.ProjectID, *getProjectEnvironmentOptions.ID)) + + project := []map[string]interface{}{} + if environment.Project != nil { + modelMap, err := dataSourceIbmProjectEnvironmentProjectReferenceToMap(environment.Project) + if err != nil { + return diag.FromErr(err) + } + project = append(project, modelMap) + } + if err = d.Set("project", project); err != nil { + return diag.FromErr(fmt.Errorf("Error setting project %s", err)) + } + + if err = d.Set("created_at", flex.DateTimeToString(environment.CreatedAt)); err != nil { + return diag.FromErr(fmt.Errorf("Error setting created_at: %s", err)) + } + + if err = d.Set("target_account", environment.TargetAccount); err != nil { + return diag.FromErr(fmt.Errorf("Error setting target_account: %s", err)) + } + + if err = d.Set("modified_at", flex.DateTimeToString(environment.ModifiedAt)); err != nil { + return diag.FromErr(fmt.Errorf("Error setting modified_at: %s", err)) + } + + definition := []map[string]interface{}{} + if environment.Definition != nil { + modelMap, err := dataSourceIbmProjectEnvironmentEnvironmentDefinitionRequiredPropertiesToMap(environment.Definition) + if err != nil { + return diag.FromErr(err) + } + definition = append(definition, modelMap) + } + if err = d.Set("definition", definition); err != nil { + return diag.FromErr(fmt.Errorf("Error setting definition %s", err)) + } + + return nil +} + +func dataSourceIbmProjectEnvironmentProjectReferenceToMap(model *projectv1.ProjectReference) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["id"] = model.ID + definitionMap, err := dataSourceIbmProjectEnvironmentProjectDefinitionReferenceToMap(model.Definition) + if err != nil { + return modelMap, err + } + modelMap["definition"] = []map[string]interface{}{definitionMap} + modelMap["crn"] = model.Crn + modelMap["href"] = model.Href + return modelMap, nil +} + +func dataSourceIbmProjectEnvironmentProjectDefinitionReferenceToMap(model *projectv1.ProjectDefinitionReference) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["name"] = model.Name + return modelMap, nil +} + +func dataSourceIbmProjectEnvironmentEnvironmentDefinitionRequiredPropertiesToMap(model *projectv1.EnvironmentDefinitionRequiredProperties) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["name"] = model.Name + if model.Description != nil { + modelMap["description"] = model.Description + } + if model.Authorizations != nil { + authorizationsMap, err := dataSourceIbmProjectEnvironmentProjectConfigAuthToMap(model.Authorizations) + if err != nil { + return modelMap, err + } + modelMap["authorizations"] = []map[string]interface{}{authorizationsMap} + } + if model.Inputs != nil { + inputsMap, err := dataSourceIbmProjectEnvironmentInputVariableToMap(model.Inputs) + if err != nil { + return modelMap, err + } + modelMap["inputs"] = []map[string]interface{}{inputsMap} + } + if model.ComplianceProfile != nil { + complianceProfileMap, err := dataSourceIbmProjectEnvironmentProjectComplianceProfileToMap(model.ComplianceProfile) + if err != nil { + return modelMap, err + } + modelMap["compliance_profile"] = []map[string]interface{}{complianceProfileMap} + } + return modelMap, nil +} + +func dataSourceIbmProjectEnvironmentProjectConfigAuthToMap(model *projectv1.ProjectConfigAuth) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.TrustedProfileID != nil { + modelMap["trusted_profile_id"] = model.TrustedProfileID + } + if model.Method != nil { + modelMap["method"] = model.Method + } + if model.ApiKey != nil { + modelMap["api_key"] = model.ApiKey + } + return modelMap, nil +} + +func dataSourceIbmProjectEnvironmentInputVariableToMap(model *projectv1.InputVariable) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + return modelMap, nil +} + +func dataSourceIbmProjectEnvironmentProjectComplianceProfileToMap(model *projectv1.ProjectComplianceProfile) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = model.ID + } + if model.InstanceID != nil { + modelMap["instance_id"] = model.InstanceID + } + if model.InstanceLocation != nil { + modelMap["instance_location"] = model.InstanceLocation + } + if model.AttachmentID != nil { + modelMap["attachment_id"] = model.AttachmentID + } + if model.ProfileName != nil { + modelMap["profile_name"] = model.ProfileName + } + return modelMap, nil +} diff --git a/ibm/service/project/data_source_ibm_project_environment_test.go b/ibm/service/project/data_source_ibm_project_environment_test.go new file mode 100644 index 0000000000..7edd07a90e --- /dev/null +++ b/ibm/service/project/data_source_ibm_project_environment_test.go @@ -0,0 +1,70 @@ +// Copyright IBM Corp. 2023 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package project_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" +) + +func TestAccIbmProjectEnvironmentDataSourceBasic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmProjectEnvironmentDataSourceConfigBasic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_project_environment.project_environment_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_project_environment.project_environment_instance", "project_id"), + resource.TestCheckResourceAttrSet("data.ibm_project_environment.project_environment_instance", "project_environment_id"), + resource.TestCheckResourceAttrSet("data.ibm_project_environment.project_environment_instance", "project.#"), + resource.TestCheckResourceAttrSet("data.ibm_project_environment.project_environment_instance", "created_at"), + resource.TestCheckResourceAttrSet("data.ibm_project_environment.project_environment_instance", "modified_at"), + resource.TestCheckResourceAttrSet("data.ibm_project_environment.project_environment_instance", "definition.#"), + ), + }, + }, + }) +} + +func testAccCheckIbmProjectEnvironmentDataSourceConfigBasic() string { + return fmt.Sprintf(` + resource "ibm_project" "project_instance" { + location = "us-south" + resource_group = "Default" + definition { + name = "acme-microservice" + description = "acme-microservice description" + destroy_on_delete = true + } + } + + resource "ibm_project_environment" "project_environment_instance" { + project_id = ibm_project.project_instance.id + definition { + name = "environment-stage" + description = "environment for stage project" + authorizations { + method = "api_key" + api_key = "%s" + } + } + lifecycle { + ignore_changes = [ + definition[0].authorizations[0].api_key, + ] + } + } + + data "ibm_project_environment" "project_environment_instance" { + project_id = ibm_project_environment.project_environment_instance.project_id + project_environment_id = ibm_project_environment.project_environment_instance.project_environment_id + } + `, acc.ProjectsConfigApiKey) +} diff --git a/ibm/service/project/data_source_ibm_project_test.go b/ibm/service/project/data_source_ibm_project_test.go index 062bc5fefe..e8e3ade5c8 100644 --- a/ibm/service/project/data_source_ibm_project_test.go +++ b/ibm/service/project/data_source_ibm_project_test.go @@ -28,8 +28,9 @@ func TestAccIbmProjectDataSourceBasic(t *testing.T) { resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "crn"), resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "created_at"), resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "location"), - resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "resource_group"), + resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "resource_group_id"), resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "state"), + resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "resource_group"), resource.TestCheckResourceAttrSet("data.ibm_project.project_instance", "definition.#"), ), }, diff --git a/ibm/service/project/resource_ibm_project.go b/ibm/service/project/resource_ibm_project.go index 9b5242752d..1147380c19 100644 --- a/ibm/service/project/resource_ibm_project.go +++ b/ibm/service/project/resource_ibm_project.go @@ -51,7 +51,7 @@ func ResourceIbmProject() *schema.Resource { "name": &schema.Schema{ Type: schema.TypeString, Required: true, - Description: "The name of the project.", + Description: "The name of the project. It is unique within the account across regions.", }, "description": &schema.Schema{ Type: schema.TypeString, @@ -84,22 +84,22 @@ func ResourceIbmProject() *schema.Resource { Schema: map[string]*schema.Schema{ "event": &schema.Schema{ Type: schema.TypeString, - Optional: true, + Computed: true, Description: "The event name.", }, "event_id": &schema.Schema{ Type: schema.TypeString, - Optional: true, + Computed: true, Description: "A unique ID for that individual event.", }, "config_id": &schema.Schema{ Type: schema.TypeString, - Optional: true, + Computed: true, Description: "A unique ID for the configuration.", }, "config_version": &schema.Schema{ Type: schema.TypeInt, - Optional: true, + Computed: true, Description: "The version number of the configuration.", }, }, @@ -110,6 +110,11 @@ func ResourceIbmProject() *schema.Resource { Computed: true, Description: "True indicates that the fetch of the needs attention items failed. It only exists if there was an error while retrieving the cumulative needs attention view.", }, + "resource_group_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The resource group id where the project's data and tools are created.", + }, "state": &schema.Schema{ Type: schema.TypeString, Computed: true, @@ -128,17 +133,17 @@ func ResourceIbmProject() *schema.Resource { Schema: map[string]*schema.Schema{ "id": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The ID of the configuration. If this parameter is empty, an ID is automatically created for the configuration.", }, "version": &schema.Schema{ Type: schema.TypeInt, - Required: true, + Computed: true, Description: "The version of the configuration.", }, "state": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The state of the configuration.", }, "created_at": &schema.Schema{ @@ -153,25 +158,23 @@ func ResourceIbmProject() *schema.Resource { }, "href": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "A URL.", }, "definition": &schema.Schema{ Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: true, + Computed: true, Description: "The name and description of a project configuration.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, - Optional: true, - Description: "The configuration name.", + Computed: true, + Description: "The configuration name. It is unique within the account across projects and regions.", }, "description": &schema.Schema{ Type: schema.TypeString, - Optional: true, + Computed: true, Description: "A project configuration description.", }, }, @@ -179,28 +182,24 @@ func ResourceIbmProject() *schema.Resource { }, "project": &schema.Schema{ Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: true, + Computed: true, Description: "The project referenced by this resource.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "id": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The unique ID.", }, "definition": &schema.Schema{ Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: true, + Computed: true, Description: "The definition of the project reference.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The name of the project.", }, }, @@ -208,12 +207,12 @@ func ResourceIbmProject() *schema.Resource { }, "crn": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "An IBM Cloud resource name, which uniquely identifies a resource.", }, "href": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "A URL.", }, }, @@ -230,33 +229,29 @@ func ResourceIbmProject() *schema.Resource { Schema: map[string]*schema.Schema{ "id": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The environment id as a friendly name.", }, "project": &schema.Schema{ Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: true, + Computed: true, Description: "The project referenced by this resource.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "id": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The unique ID.", }, "definition": &schema.Schema{ Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: true, + Computed: true, Description: "The definition of the project reference.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The name of the project.", }, }, @@ -264,12 +259,12 @@ func ResourceIbmProject() *schema.Resource { }, "crn": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "An IBM Cloud resource name, which uniquely identifies a resource.", }, "href": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "A URL.", }, }, @@ -282,25 +277,23 @@ func ResourceIbmProject() *schema.Resource { }, "href": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "A URL.", }, "definition": &schema.Schema{ Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: true, + Computed: true, Description: "The environment definition used in the project collection.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, - Optional: true, - Description: "The name of the environment.", + Computed: true, + Description: "The name of the environment. It is unique within the account across projects and regions.", }, "description": &schema.Schema{ Type: schema.TypeString, - Optional: true, + Computed: true, Description: "The description of the environment.", }, }, @@ -424,6 +417,9 @@ func resourceIbmProjectRead(context context.Context, d *schema.ResourceData, met return diag.FromErr(fmt.Errorf("Error setting cumulative_needs_attention_view_error: %s", err)) } } + if err = d.Set("resource_group_id", project.ResourceGroupID); err != nil { + return diag.FromErr(fmt.Errorf("Error setting resource_group_id: %s", err)) + } if err = d.Set("state", project.State); err != nil { return diag.FromErr(fmt.Errorf("Error setting state: %s", err)) } @@ -435,7 +431,7 @@ func resourceIbmProjectRead(context context.Context, d *schema.ResourceData, met if !core.IsNil(project.Configs) { configs := []map[string]interface{}{} for _, configsItem := range project.Configs { - configsItemMap, err := resourceIbmProjectProjectConfigCollectionMemberToMap(&configsItem) + configsItemMap, err := resourceIbmProjectProjectConfigSummaryToMap(&configsItem) if err != nil { return diag.FromErr(err) } @@ -448,7 +444,7 @@ func resourceIbmProjectRead(context context.Context, d *schema.ResourceData, met if !core.IsNil(project.Environments) { environments := []map[string]interface{}{} for _, environmentsItem := range project.Environments { - environmentsItemMap, err := resourceIbmProjectProjectEnvironmentCollectionMemberToMap(&environmentsItem) + environmentsItemMap, err := resourceIbmProjectProjectEnvironmentSummaryToMap(&environmentsItem) if err != nil { return diag.FromErr(err) } @@ -475,7 +471,7 @@ func resourceIbmProjectUpdate(context context.Context, d *schema.ResourceData, m hasChange := false if d.HasChange("definition") { - definition, err := resourceIbmProjectMapToProjectPrototypePatchDefinitionBlock(d.Get("definition.0").(map[string]interface{})) + definition, err := resourceIbmProjectMapToProjectPatchDefinitionBlock(d.Get("definition.0").(map[string]interface{})) if err != nil { return diag.FromErr(err) } @@ -550,8 +546,8 @@ func resourceIbmProjectMapToProjectConfigPrototypeDefinitionBlock(modelMap map[s if modelMap["description"] != nil && modelMap["description"].(string) != "" { model.Description = core.StringPtr(modelMap["description"].(string)) } - if modelMap["environment"] != nil && modelMap["environment"].(string) != "" { - model.Environment = core.StringPtr(modelMap["environment"].(string)) + if modelMap["environment_id"] != nil && modelMap["environment_id"].(string) != "" { + model.EnvironmentID = core.StringPtr(modelMap["environment_id"].(string)) } if modelMap["authorizations"] != nil && len(modelMap["authorizations"].([]interface{})) > 0 { AuthorizationsModel, err := resourceIbmProjectMapToProjectConfigAuth(modelMap["authorizations"].([]interface{})[0].(map[string]interface{})) @@ -639,8 +635,8 @@ func resourceIbmProjectMapToSchematicsWorkspace(modelMap map[string]interface{}) return model, nil } -func resourceIbmProjectMapToProjectPrototypePatchDefinitionBlock(modelMap map[string]interface{}) (*projectv1.ProjectPrototypePatchDefinitionBlock, error) { - model := &projectv1.ProjectPrototypePatchDefinitionBlock{} +func resourceIbmProjectMapToProjectPatchDefinitionBlock(modelMap map[string]interface{}) (*projectv1.ProjectPatchDefinitionBlock, error) { + model := &projectv1.ProjectPatchDefinitionBlock{} if modelMap["name"] != nil && modelMap["name"].(string) != "" { model.Name = core.StringPtr(modelMap["name"].(string)) } @@ -680,7 +676,7 @@ func resourceIbmProjectCumulativeNeedsAttentionToMap(model *projectv1.Cumulative return modelMap, nil } -func resourceIbmProjectProjectConfigCollectionMemberToMap(model *projectv1.ProjectConfigCollectionMember) (map[string]interface{}, error) { +func resourceIbmProjectProjectConfigSummaryToMap(model *projectv1.ProjectConfigSummary) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ApprovedVersion != nil { approvedVersionMap, err := resourceIbmProjectProjectConfigVersionSummaryToMap(model.ApprovedVersion) @@ -699,12 +695,8 @@ func resourceIbmProjectProjectConfigCollectionMemberToMap(model *projectv1.Proje modelMap["id"] = model.ID modelMap["version"] = flex.IntValue(model.Version) modelMap["state"] = model.State - if model.CreatedAt != nil { - modelMap["created_at"] = model.CreatedAt.String() - } - if model.ModifiedAt != nil { - modelMap["modified_at"] = model.ModifiedAt.String() - } + modelMap["created_at"] = model.CreatedAt.String() + modelMap["modified_at"] = model.ModifiedAt.String() modelMap["href"] = model.Href definitionMap, err := resourceIbmProjectProjectConfigDefinitionNameDescriptionToMap(model.Definition) if err != nil { @@ -757,7 +749,7 @@ func resourceIbmProjectProjectDefinitionReferenceToMap(model *projectv1.ProjectD return modelMap, nil } -func resourceIbmProjectProjectEnvironmentCollectionMemberToMap(model *projectv1.ProjectEnvironmentCollectionMember) (map[string]interface{}, error) { +func resourceIbmProjectProjectEnvironmentSummaryToMap(model *projectv1.ProjectEnvironmentSummary) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) modelMap["id"] = model.ID projectMap, err := resourceIbmProjectProjectReferenceToMap(model.Project) diff --git a/ibm/service/project/resource_ibm_project_config.go b/ibm/service/project/resource_ibm_project_config.go index ef7fb404c3..5594fbd5b7 100644 --- a/ibm/service/project/resource_ibm_project_config.go +++ b/ibm/service/project/resource_ibm_project_config.go @@ -38,7 +38,7 @@ func ResourceIbmProjectConfig() *schema.Resource { Type: schema.TypeList, MaxItems: 1, Optional: true, - Description: "A schematics workspace associated to a project configuration.", + Description: "A schematics workspace associated to a project configuration, with scripts.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "workspace_crn": &schema.Schema{ @@ -46,6 +46,150 @@ func ResourceIbmProjectConfig() *schema.Resource { Optional: true, Description: "An existing schematics workspace CRN.", }, + "validate_pre_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "validate_post_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "deploy_pre_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "deploy_post_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "undeploy_pre_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, + "undeploy_post_script": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy).", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The type of the script.", + }, + "path": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The path to this script within the current version source.", + }, + "short_description": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The short description for this script.", + }, + }, + }, + }, }, }, }, @@ -54,20 +198,20 @@ func ResourceIbmProjectConfig() *schema.Resource { MinItems: 1, MaxItems: 1, Required: true, - Description: "The type and output of a project configuration.", + Description: "The name and description of a project configuration.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, Required: true, - Description: "The configuration name.", + Description: "The configuration name. It is unique within the account across projects and regions.", }, "description": &schema.Schema{ Type: schema.TypeString, Optional: true, Description: "A project configuration description.", }, - "environment": &schema.Schema{ + "environment_id": &schema.Schema{ Type: schema.TypeString, Optional: true, Description: "The ID of the project environment.", @@ -92,6 +236,7 @@ func ResourceIbmProjectConfig() *schema.Resource { "api_key": &schema.Schema{ Type: schema.TypeString, Optional: true, + Sensitive: true, Description: "The IBM Cloud API Key.", }, }, @@ -107,12 +252,12 @@ func ResourceIbmProjectConfig() *schema.Resource { "id": &schema.Schema{ Type: schema.TypeString, Optional: true, - Description: "The unique ID.", + Description: "The unique ID for that compliance profile.", }, "instance_id": &schema.Schema{ Type: schema.TypeString, Optional: true, - Description: "The unique ID.", + Description: "A unique ID for an instance of a compliance profile.", }, "instance_location": &schema.Schema{ Type: schema.TypeString, @@ -122,7 +267,7 @@ func ResourceIbmProjectConfig() *schema.Resource { "attachment_id": &schema.Schema{ Type: schema.TypeString, Optional: true, - Description: "The unique ID.", + Description: "A unique ID for the attachment to a compliance profile.", }, "profile_name": &schema.Schema{ Type: schema.TypeString, @@ -136,7 +281,7 @@ func ResourceIbmProjectConfig() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - Description: "A dotted value of catalogID.versionID.", + Description: "A unique concatenation of catalogID.versionID that identifies the DA in the catalog.", }, "inputs": &schema.Schema{ Type: schema.TypeList, @@ -156,11 +301,6 @@ func ResourceIbmProjectConfig() *schema.Resource { Schema: map[string]*schema.Schema{}, }, }, - "type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - Description: "The type of a project configuration manual property.", - }, }, }, }, @@ -203,17 +343,17 @@ func ResourceIbmProjectConfig() *schema.Resource { Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The variable name.", }, "description": &schema.Schema{ Type: schema.TypeString, - Optional: true, + Computed: true, Description: "A short explanation of the output value.", }, "value": &schema.Schema{ Type: schema.TypeString, - Optional: true, + Computed: true, Description: "Can be any value - a string, number, boolean, array, or object.", }, }, @@ -227,20 +367,18 @@ func ResourceIbmProjectConfig() *schema.Resource { Schema: map[string]*schema.Schema{ "id": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The unique ID.", }, "definition": &schema.Schema{ Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: true, + Computed: true, Description: "The definition of the project reference.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "The name of the project.", }, }, @@ -248,12 +386,12 @@ func ResourceIbmProjectConfig() *schema.Resource { }, "crn": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "An IBM Cloud resource name, which uniquely identifies a resource.", }, "href": &schema.Schema{ Type: schema.TypeString, - Required: true, + Computed: true, Description: "A URL.", }, }, @@ -439,7 +577,7 @@ func resourceIbmProjectConfigUpdate(context context.Context, d *schema.ResourceD hasChange := false if d.HasChange("definition") { - definition, err := resourceIbmProjectConfigMapToProjectConfigPrototypePatchDefinitionBlock(d.Get("definition.0").(map[string]interface{})) + definition, err := resourceIbmProjectConfigMapToProjectConfigPatchDefinitionBlock(d.Get("definition.0").(map[string]interface{})) if err != nil { return diag.FromErr(err) } @@ -491,8 +629,8 @@ func resourceIbmProjectConfigMapToProjectConfigPrototypeDefinitionBlock(modelMap if modelMap["description"] != nil && modelMap["description"].(string) != "" { model.Description = core.StringPtr(modelMap["description"].(string)) } - if modelMap["environment"] != nil && modelMap["environment"].(string) != "" { - model.Environment = core.StringPtr(modelMap["environment"].(string)) + if modelMap["environment_id"] != nil && modelMap["environment_id"].(string) != "" { + model.EnvironmentID = core.StringPtr(modelMap["environment_id"].(string)) } if modelMap["authorizations"] != nil && len(modelMap["authorizations"].([]interface{})) > 0 { AuthorizationsModel, err := resourceIbmProjectConfigMapToProjectConfigAuth(modelMap["authorizations"].([]interface{})[0].(map[string]interface{})) @@ -580,16 +718,16 @@ func resourceIbmProjectConfigMapToSchematicsWorkspace(modelMap map[string]interf return model, nil } -func resourceIbmProjectConfigMapToProjectConfigPrototypePatchDefinitionBlock(modelMap map[string]interface{}) (*projectv1.ProjectConfigPrototypePatchDefinitionBlock, error) { - model := &projectv1.ProjectConfigPrototypePatchDefinitionBlock{} +func resourceIbmProjectConfigMapToProjectConfigPatchDefinitionBlock(modelMap map[string]interface{}) (*projectv1.ProjectConfigPatchDefinitionBlock, error) { + model := &projectv1.ProjectConfigPatchDefinitionBlock{} if modelMap["name"] != nil && modelMap["name"].(string) != "" { model.Name = core.StringPtr(modelMap["name"].(string)) } if modelMap["description"] != nil && modelMap["description"].(string) != "" { model.Description = core.StringPtr(modelMap["description"].(string)) } - if modelMap["environment"] != nil && modelMap["environment"].(string) != "" { - model.Environment = core.StringPtr(modelMap["environment"].(string)) + if modelMap["environment_id"] != nil && modelMap["environment_id"].(string) != "" { + model.EnvironmentID = core.StringPtr(modelMap["environment_id"].(string)) } if modelMap["authorizations"] != nil && len(modelMap["authorizations"].([]interface{})) > 0 { AuthorizationsModel, err := resourceIbmProjectConfigMapToProjectConfigAuth(modelMap["authorizations"].([]interface{})[0].(map[string]interface{})) @@ -625,11 +763,67 @@ func resourceIbmProjectConfigMapToProjectConfigPrototypePatchDefinitionBlock(mod return model, nil } -func resourceIbmProjectConfigSchematicsWorkspaceToMap(model *projectv1.SchematicsWorkspace) (map[string]interface{}, error) { +func resourceIbmProjectConfigSchematicsMetadataToMap(model *projectv1.SchematicsMetadata) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.WorkspaceCrn != nil { modelMap["workspace_crn"] = model.WorkspaceCrn } + if model.ValidatePreScript != nil { + validatePreScriptMap, err := resourceIbmProjectConfigScriptToMap(model.ValidatePreScript) + if err != nil { + return modelMap, err + } + modelMap["validate_pre_script"] = []map[string]interface{}{validatePreScriptMap} + } + if model.ValidatePostScript != nil { + validatePostScriptMap, err := resourceIbmProjectConfigScriptToMap(model.ValidatePostScript) + if err != nil { + return modelMap, err + } + modelMap["validate_post_script"] = []map[string]interface{}{validatePostScriptMap} + } + if model.DeployPreScript != nil { + deployPreScriptMap, err := resourceIbmProjectConfigScriptToMap(model.DeployPreScript) + if err != nil { + return modelMap, err + } + modelMap["deploy_pre_script"] = []map[string]interface{}{deployPreScriptMap} + } + if model.DeployPostScript != nil { + deployPostScriptMap, err := resourceIbmProjectConfigScriptToMap(model.DeployPostScript) + if err != nil { + return modelMap, err + } + modelMap["deploy_post_script"] = []map[string]interface{}{deployPostScriptMap} + } + if model.UndeployPreScript != nil { + undeployPreScriptMap, err := resourceIbmProjectConfigScriptToMap(model.UndeployPreScript) + if err != nil { + return modelMap, err + } + modelMap["undeploy_pre_script"] = []map[string]interface{}{undeployPreScriptMap} + } + if model.UndeployPostScript != nil { + undeployPostScriptMap, err := resourceIbmProjectConfigScriptToMap(model.UndeployPostScript) + if err != nil { + return modelMap, err + } + modelMap["undeploy_post_script"] = []map[string]interface{}{undeployPostScriptMap} + } + return modelMap, nil +} + +func resourceIbmProjectConfigScriptToMap(model *projectv1.Script) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Type != nil { + modelMap["type"] = model.Type + } + if model.Path != nil { + modelMap["path"] = model.Path + } + if model.ShortDescription != nil { + modelMap["short_description"] = model.ShortDescription + } return modelMap, nil } @@ -639,8 +833,8 @@ func resourceIbmProjectConfigProjectConfigResponseDefinitionToMap(model *project if model.Description != nil { modelMap["description"] = model.Description } - if model.Environment != nil { - modelMap["environment"] = model.Environment + if model.EnvironmentID != nil { + modelMap["environment_id"] = model.EnvironmentID } if model.Authorizations != nil { authorizationsMap, err := resourceIbmProjectConfigProjectConfigAuthToMap(model.Authorizations) @@ -675,9 +869,6 @@ func resourceIbmProjectConfigProjectConfigResponseDefinitionToMap(model *project } modelMap["settings"] = []map[string]interface{}{settingsMap} } - if model.Type != nil { - modelMap["type"] = model.Type - } return modelMap, nil } diff --git a/ibm/service/project/resource_ibm_project_environment.go b/ibm/service/project/resource_ibm_project_environment.go new file mode 100644 index 0000000000..3dda07d3a2 --- /dev/null +++ b/ibm/service/project/resource_ibm_project_environment.go @@ -0,0 +1,551 @@ +// Copyright IBM Corp. 2023 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package project + +import ( + "context" + "fmt" + "log" + + "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-Cloud/terraform-provider-ibm/ibm/validate" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/project-go-sdk/projectv1" +) + +func ResourceIbmProjectEnvironment() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceIbmProjectEnvironmentCreate, + ReadContext: resourceIbmProjectEnvironmentRead, + UpdateContext: resourceIbmProjectEnvironmentUpdate, + DeleteContext: resourceIbmProjectEnvironmentDelete, + Importer: &schema.ResourceImporter{}, + + Schema: map[string]*schema.Schema{ + "project_id": &schema.Schema{ + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.InvokeValidator("ibm_project_environment", "project_id"), + Description: "The unique project ID.", + }, + "definition": &schema.Schema{ + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Required: true, + Description: "The environment definition.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Required: true, + Description: "The name of the environment. It is unique within the account across projects and regions.", + }, + "description": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The description of the environment.", + }, + "authorizations": &schema.Schema{ + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + Description: "The authorization details. You can authorize by using a trusted profile or an API key in Secrets Manager.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "trusted_profile_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The trusted profile ID.", + }, + "method": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The authorization method. You can authorize by using a trusted profile or an API key in Secrets Manager.", + }, + "api_key": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Sensitive: true, + Description: "The IBM Cloud API Key.", + }, + }, + }, + }, + "inputs": &schema.Schema{ + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + Description: "The input variables for configuration definition and environment.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{}, + }, + }, + "compliance_profile": &schema.Schema{ + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + Description: "The profile required for compliance.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The unique ID for that compliance profile.", + }, + "instance_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "A unique ID for an instance of a compliance profile.", + }, + "instance_location": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The location of the compliance instance.", + }, + "attachment_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "A unique ID for the attachment to a compliance profile.", + }, + "profile_name": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Description: "The name of the compliance profile.", + }, + }, + }, + }, + }, + }, + }, + "project": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The project referenced by this resource.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The unique ID.", + }, + "definition": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "The definition of the project reference.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The name of the project.", + }, + }, + }, + }, + "crn": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "An IBM Cloud resource name, which uniquely identifies a resource.", + }, + "href": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A URL.", + }, + }, + }, + }, + "created_at": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339.", + }, + "target_account": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The target account ID derived from the authentication block values.", + }, + "modified_at": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339.", + }, + "project_environment_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "The environment id as a friendly name.", + }, + }, + } +} + +func ResourceIbmProjectEnvironmentValidator() *validate.ResourceValidator { + validateSchema := make([]validate.ValidateSchema, 0) + validateSchema = append(validateSchema, + validate.ValidateSchema{ + Identifier: "project_id", + ValidateFunctionIdentifier: validate.ValidateRegexp, + Type: validate.TypeString, + Required: true, + Regexp: `^[\.\-0-9a-zA-Z]+$`, + MaxValueLength: 128, + }, + ) + + resourceValidator := validate.ResourceValidator{ResourceName: "ibm_project_environment", Schema: validateSchema} + return &resourceValidator +} + +func resourceIbmProjectEnvironmentCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + projectClient, err := meta.(conns.ClientSession).ProjectV1() + if err != nil { + return diag.FromErr(err) + } + + createProjectEnvironmentOptions := &projectv1.CreateProjectEnvironmentOptions{} + + createProjectEnvironmentOptions.SetProjectID(d.Get("project_id").(string)) + definitionModel, err := resourceIbmProjectEnvironmentMapToEnvironmentDefinitionRequiredProperties(d.Get("definition.0").(map[string]interface{})) + if err != nil { + return diag.FromErr(err) + } + createProjectEnvironmentOptions.SetDefinition(definitionModel) + + environment, response, err := projectClient.CreateProjectEnvironmentWithContext(context, createProjectEnvironmentOptions) + if err != nil { + log.Printf("[DEBUG] CreateProjectEnvironmentWithContext failed %s\n%s", err, response) + return diag.FromErr(fmt.Errorf("CreateProjectEnvironmentWithContext failed %s\n%s", err, response)) + } + + d.SetId(fmt.Sprintf("%s/%s", *createProjectEnvironmentOptions.ProjectID, *environment.ID)) + + return resourceIbmProjectEnvironmentRead(context, d, meta) +} + +func resourceIbmProjectEnvironmentRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + projectClient, err := meta.(conns.ClientSession).ProjectV1() + if err != nil { + return diag.FromErr(err) + } + + getProjectEnvironmentOptions := &projectv1.GetProjectEnvironmentOptions{} + + parts, err := flex.SepIdParts(d.Id(), "/") + if err != nil { + return diag.FromErr(err) + } + + getProjectEnvironmentOptions.SetProjectID(parts[0]) + getProjectEnvironmentOptions.SetID(parts[1]) + + environment, response, err := projectClient.GetProjectEnvironmentWithContext(context, getProjectEnvironmentOptions) + if err != nil { + if response != nil && response.StatusCode == 404 { + d.SetId("") + return nil + } + log.Printf("[DEBUG] GetProjectEnvironmentWithContext failed %s\n%s", err, response) + return diag.FromErr(fmt.Errorf("GetProjectEnvironmentWithContext failed %s\n%s", err, response)) + } + + definitionMap, err := resourceIbmProjectEnvironmentEnvironmentDefinitionRequiredPropertiesToMap(environment.Definition) + if err != nil { + return diag.FromErr(err) + } + if err = d.Set("definition", []map[string]interface{}{definitionMap}); err != nil { + return diag.FromErr(fmt.Errorf("Error setting definition: %s", err)) + } + projectMap, err := resourceIbmProjectEnvironmentProjectReferenceToMap(environment.Project) + if err != nil { + return diag.FromErr(err) + } + if err = d.Set("project", []map[string]interface{}{projectMap}); err != nil { + return diag.FromErr(fmt.Errorf("Error setting project: %s", err)) + } + if err = d.Set("created_at", flex.DateTimeToString(environment.CreatedAt)); err != nil { + return diag.FromErr(fmt.Errorf("Error setting created_at: %s", err)) + } + if !core.IsNil(environment.TargetAccount) { + if err = d.Set("target_account", environment.TargetAccount); err != nil { + return diag.FromErr(fmt.Errorf("Error setting target_account: %s", err)) + } + } + if err = d.Set("modified_at", flex.DateTimeToString(environment.ModifiedAt)); err != nil { + return diag.FromErr(fmt.Errorf("Error setting modified_at: %s", err)) + } + if err = d.Set("project_environment_id", environment.ID); err != nil { + return diag.FromErr(fmt.Errorf("Error setting project_environment_id: %s", err)) + } + + return nil +} + +func resourceIbmProjectEnvironmentUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + projectClient, err := meta.(conns.ClientSession).ProjectV1() + if err != nil { + return diag.FromErr(err) + } + + updateProjectEnvironmentOptions := &projectv1.UpdateProjectEnvironmentOptions{} + + parts, err := flex.SepIdParts(d.Id(), "/") + if err != nil { + return diag.FromErr(err) + } + + updateProjectEnvironmentOptions.SetProjectID(parts[0]) + updateProjectEnvironmentOptions.SetID(parts[1]) + + hasChange := false + + if d.HasChange("project_id") { + return diag.FromErr(fmt.Errorf("Cannot update resource property \"%s\" with the ForceNew annotation."+ + " The resource must be re-created to update this property.", "project_id")) + } + if d.HasChange("definition") { + definition, err := resourceIbmProjectEnvironmentMapToEnvironmentDefinitionProperties(d.Get("definition.0").(map[string]interface{})) + if err != nil { + return diag.FromErr(err) + } + updateProjectEnvironmentOptions.SetDefinition(definition) + hasChange = true + } + + if hasChange { + _, response, err := projectClient.UpdateProjectEnvironmentWithContext(context, updateProjectEnvironmentOptions) + if err != nil { + log.Printf("[DEBUG] UpdateProjectEnvironmentWithContext failed %s\n%s", err, response) + return diag.FromErr(fmt.Errorf("UpdateProjectEnvironmentWithContext failed %s\n%s", err, response)) + } + } + + return resourceIbmProjectEnvironmentRead(context, d, meta) +} + +func resourceIbmProjectEnvironmentDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + projectClient, err := meta.(conns.ClientSession).ProjectV1() + if err != nil { + return diag.FromErr(err) + } + + deleteProjectEnvironmentOptions := &projectv1.DeleteProjectEnvironmentOptions{} + + parts, err := flex.SepIdParts(d.Id(), "/") + if err != nil { + return diag.FromErr(err) + } + + deleteProjectEnvironmentOptions.SetProjectID(parts[0]) + deleteProjectEnvironmentOptions.SetID(parts[1]) + + _, response, err := projectClient.DeleteProjectEnvironmentWithContext(context, deleteProjectEnvironmentOptions) + if err != nil { + log.Printf("[DEBUG] DeleteProjectEnvironmentWithContext failed %s\n%s", err, response) + return diag.FromErr(fmt.Errorf("DeleteProjectEnvironmentWithContext failed %s\n%s", err, response)) + } + + d.SetId("") + + return nil +} + +func resourceIbmProjectEnvironmentMapToEnvironmentDefinitionRequiredProperties(modelMap map[string]interface{}) (*projectv1.EnvironmentDefinitionRequiredProperties, error) { + model := &projectv1.EnvironmentDefinitionRequiredProperties{} + model.Name = core.StringPtr(modelMap["name"].(string)) + if modelMap["description"] != nil && modelMap["description"].(string) != "" { + model.Description = core.StringPtr(modelMap["description"].(string)) + } + if modelMap["authorizations"] != nil && len(modelMap["authorizations"].([]interface{})) > 0 { + AuthorizationsModel, err := resourceIbmProjectEnvironmentMapToProjectConfigAuth(modelMap["authorizations"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.Authorizations = AuthorizationsModel + } + if modelMap["inputs"] != nil && len(modelMap["inputs"].([]interface{})) > 0 { + InputsModel, err := resourceIbmProjectEnvironmentMapToInputVariable(modelMap["inputs"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.Inputs = InputsModel + } + if modelMap["compliance_profile"] != nil && len(modelMap["compliance_profile"].([]interface{})) > 0 { + ComplianceProfileModel, err := resourceIbmProjectEnvironmentMapToProjectComplianceProfile(modelMap["compliance_profile"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.ComplianceProfile = ComplianceProfileModel + } + return model, nil +} + +func resourceIbmProjectEnvironmentMapToProjectConfigAuth(modelMap map[string]interface{}) (*projectv1.ProjectConfigAuth, error) { + model := &projectv1.ProjectConfigAuth{} + if modelMap["trusted_profile_id"] != nil && modelMap["trusted_profile_id"].(string) != "" { + model.TrustedProfileID = core.StringPtr(modelMap["trusted_profile_id"].(string)) + } + if modelMap["method"] != nil && modelMap["method"].(string) != "" { + model.Method = core.StringPtr(modelMap["method"].(string)) + } + if modelMap["api_key"] != nil && modelMap["api_key"].(string) != "" { + model.ApiKey = core.StringPtr(modelMap["api_key"].(string)) + } + return model, nil +} + +func resourceIbmProjectEnvironmentMapToInputVariable(modelMap map[string]interface{}) (*projectv1.InputVariable, error) { + model := &projectv1.InputVariable{} + return model, nil +} + +func resourceIbmProjectEnvironmentMapToProjectComplianceProfile(modelMap map[string]interface{}) (*projectv1.ProjectComplianceProfile, error) { + model := &projectv1.ProjectComplianceProfile{} + if modelMap["id"] != nil && modelMap["id"].(string) != "" { + model.ID = core.StringPtr(modelMap["id"].(string)) + } + if modelMap["instance_id"] != nil && modelMap["instance_id"].(string) != "" { + model.InstanceID = core.StringPtr(modelMap["instance_id"].(string)) + } + if modelMap["instance_location"] != nil && modelMap["instance_location"].(string) != "" { + model.InstanceLocation = core.StringPtr(modelMap["instance_location"].(string)) + } + if modelMap["attachment_id"] != nil && modelMap["attachment_id"].(string) != "" { + model.AttachmentID = core.StringPtr(modelMap["attachment_id"].(string)) + } + if modelMap["profile_name"] != nil && modelMap["profile_name"].(string) != "" { + model.ProfileName = core.StringPtr(modelMap["profile_name"].(string)) + } + return model, nil +} + +func resourceIbmProjectEnvironmentMapToEnvironmentDefinitionProperties(modelMap map[string]interface{}) (*projectv1.EnvironmentDefinitionProperties, error) { + model := &projectv1.EnvironmentDefinitionProperties{} + if modelMap["name"] != nil && modelMap["name"].(string) != "" { + model.Name = core.StringPtr(modelMap["name"].(string)) + } + if modelMap["description"] != nil && modelMap["description"].(string) != "" { + model.Description = core.StringPtr(modelMap["description"].(string)) + } + if modelMap["authorizations"] != nil && len(modelMap["authorizations"].([]interface{})) > 0 { + AuthorizationsModel, err := resourceIbmProjectEnvironmentMapToProjectConfigAuth(modelMap["authorizations"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.Authorizations = AuthorizationsModel + } + if modelMap["inputs"] != nil && len(modelMap["inputs"].([]interface{})) > 0 { + InputsModel, err := resourceIbmProjectEnvironmentMapToInputVariable(modelMap["inputs"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.Inputs = InputsModel + } + if modelMap["compliance_profile"] != nil && len(modelMap["compliance_profile"].([]interface{})) > 0 { + ComplianceProfileModel, err := resourceIbmProjectEnvironmentMapToProjectComplianceProfile(modelMap["compliance_profile"].([]interface{})[0].(map[string]interface{})) + if err != nil { + return model, err + } + model.ComplianceProfile = ComplianceProfileModel + } + return model, nil +} + +func resourceIbmProjectEnvironmentEnvironmentDefinitionRequiredPropertiesToMap(model *projectv1.EnvironmentDefinitionRequiredProperties) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["name"] = model.Name + if model.Description != nil { + modelMap["description"] = model.Description + } + if model.Authorizations != nil { + authorizationsMap, err := resourceIbmProjectEnvironmentProjectConfigAuthToMap(model.Authorizations) + if err != nil { + return modelMap, err + } + modelMap["authorizations"] = []map[string]interface{}{authorizationsMap} + } + if model.Inputs != nil { + inputsMap, err := resourceIbmProjectEnvironmentInputVariableToMap(model.Inputs) + if err != nil { + return modelMap, err + } + if len(inputsMap) > 0 { + modelMap["inputs"] = []map[string]interface{}{inputsMap} + } + } + if model.ComplianceProfile != nil { + complianceProfileMap, err := resourceIbmProjectEnvironmentProjectComplianceProfileToMap(model.ComplianceProfile) + if err != nil { + return modelMap, err + } + if len(complianceProfileMap) > 0 { + modelMap["compliance_profile"] = []map[string]interface{}{complianceProfileMap} + } + } + return modelMap, nil +} + +func resourceIbmProjectEnvironmentProjectConfigAuthToMap(model *projectv1.ProjectConfigAuth) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.TrustedProfileID != nil { + modelMap["trusted_profile_id"] = model.TrustedProfileID + } + if model.Method != nil { + modelMap["method"] = model.Method + } + if model.ApiKey != nil { + modelMap["api_key"] = model.ApiKey + } + return modelMap, nil +} + +func resourceIbmProjectEnvironmentInputVariableToMap(model *projectv1.InputVariable) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + return modelMap, nil +} + +func resourceIbmProjectEnvironmentProjectComplianceProfileToMap(model *projectv1.ProjectComplianceProfile) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = model.ID + } + if model.InstanceID != nil { + modelMap["instance_id"] = model.InstanceID + } + if model.InstanceLocation != nil { + modelMap["instance_location"] = model.InstanceLocation + } + if model.AttachmentID != nil { + modelMap["attachment_id"] = model.AttachmentID + } + if model.ProfileName != nil { + modelMap["profile_name"] = model.ProfileName + } + return modelMap, nil +} + +func resourceIbmProjectEnvironmentProjectReferenceToMap(model *projectv1.ProjectReference) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["id"] = model.ID + definitionMap, err := resourceIbmProjectEnvironmentProjectDefinitionReferenceToMap(model.Definition) + if err != nil { + return modelMap, err + } + modelMap["definition"] = []map[string]interface{}{definitionMap} + modelMap["crn"] = model.Crn + modelMap["href"] = model.Href + return modelMap, nil +} + +func resourceIbmProjectEnvironmentProjectDefinitionReferenceToMap(model *projectv1.ProjectDefinitionReference) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["name"] = model.Name + return modelMap, nil +} diff --git a/ibm/service/project/resource_ibm_project_environment_test.go b/ibm/service/project/resource_ibm_project_environment_test.go new file mode 100644 index 0000000000..5d33d6db32 --- /dev/null +++ b/ibm/service/project/resource_ibm_project_environment_test.go @@ -0,0 +1,138 @@ +// Copyright IBM Corp. 2023 All Rights Reserved. +// Licensed under the Mozilla Public License v2.0 + +package project_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + 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/project-go-sdk/projectv1" +) + +func TestAccIbmProjectEnvironmentBasic(t *testing.T) { + var conf projectv1.Environment + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIbmProjectEnvironmentDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIbmProjectEnvironmentConfigBasic(), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIbmProjectEnvironmentExists("ibm_project_environment.project_environment_instance", conf), + ), + }, + resource.TestStep{ + ResourceName: "ibm_project_environment.project_environment_instance", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"project_id"}, + }, + }, + }) +} + +func testAccCheckIbmProjectEnvironmentConfigBasic() string { + return fmt.Sprintf(` + resource "ibm_project" "project_instance" { + location = "us-south" + resource_group = "Default" + definition { + name = "acme-microservice" + description = "acme-microservice description" + destroy_on_delete = true + } + } + + resource "ibm_project_environment" "project_environment_instance" { + project_id = ibm_project.project_instance.id + definition { + name = "environment-stage" + description = "environment for stage project" + authorizations { + method = "api_key" + api_key = "%s" + } + } + lifecycle { + ignore_changes = [ + definition[0].authorizations[0].api_key, + ] + } + } + `, acc.ProjectsConfigApiKey) +} + +func testAccCheckIbmProjectEnvironmentExists(n string, obj projectv1.Environment) resource.TestCheckFunc { + + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + projectClient, err := acc.TestAccProvider.Meta().(conns.ClientSession).ProjectV1() + if err != nil { + return err + } + + getProjectEnvironmentOptions := &projectv1.GetProjectEnvironmentOptions{} + + parts, err := flex.SepIdParts(rs.Primary.ID, "/") + if err != nil { + return err + } + + getProjectEnvironmentOptions.SetProjectID(parts[0]) + getProjectEnvironmentOptions.SetID(parts[1]) + + environment, _, err := projectClient.GetProjectEnvironment(getProjectEnvironmentOptions) + if err != nil { + return err + } + + obj = *environment + return nil + } +} + +func testAccCheckIbmProjectEnvironmentDestroy(s *terraform.State) error { + projectClient, err := acc.TestAccProvider.Meta().(conns.ClientSession).ProjectV1() + if err != nil { + return err + } + for _, rs := range s.RootModule().Resources { + if rs.Type != "ibm_project_environment" { + continue + } + + getProjectEnvironmentOptions := &projectv1.GetProjectEnvironmentOptions{} + + parts, err := flex.SepIdParts(rs.Primary.ID, "/") + if err != nil { + return err + } + + getProjectEnvironmentOptions.SetProjectID(parts[0]) + getProjectEnvironmentOptions.SetID(parts[1]) + + // Try to find the key + _, response, err := projectClient.GetProjectEnvironment(getProjectEnvironmentOptions) + + if err == nil { + return fmt.Errorf("project_environment still exists: %s", rs.Primary.ID) + } else if response.StatusCode != 404 { + return fmt.Errorf("Error checking for project_environment (%s) has been destroyed: %s", rs.Primary.ID, err) + } + } + + return nil +} diff --git a/ibm/service/scc/resource_ibm_scc_profile_attachment.go b/ibm/service/scc/resource_ibm_scc_profile_attachment.go index 7c02d9613a..44ebbe12eb 100644 --- a/ibm/service/scc/resource_ibm_scc_profile_attachment.go +++ b/ibm/service/scc/resource_ibm_scc_profile_attachment.go @@ -109,7 +109,8 @@ func ResourceIbmSccProfileAttachment() *schema.Resource { }, "notifications": { Type: schema.TypeList, - Required: true, + MaxItems: 1, + Optional: true, Description: "The request payload of the attachment notifications.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ diff --git a/ibm/service/schematics/data_source_ibm_schematics_workspace.go b/ibm/service/schematics/data_source_ibm_schematics_workspace.go index d6855d253f..bdd9f28d1f 100644 --- a/ibm/service/schematics/data_source_ibm_schematics_workspace.go +++ b/ibm/service/schematics/data_source_ibm_schematics_workspace.go @@ -85,9 +85,31 @@ func DataSourceIBMSchematicsWorkspace() *schema.Resource { Computed: true, Description: "The version of the software template that you chose to install from the IBM Cloud catalog.", }, - }, - }, - }, + "service_extensions": { + Type: schema.TypeList, + Computed: true, + Description: "List of service data", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Computed: true, + Description: "Name of the Service Data.", + }, + "value": { + Type: schema.TypeString, + Computed: true, + Description: "Value of the Service Data.", + }, + "type": { + Type: schema.TypeString, + Computed: true, + Description: "Type of the value string, int, bool.", + }, + }, + }, + }, + }}}, "created_at": { Type: schema.TypeString, Computed: true, @@ -300,6 +322,11 @@ func DataSourceIBMSchematicsWorkspace() *schema.Resource { Description: "A list of input variables that are associated with the workspace.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Name of the variable.", + }, "type": &schema.Schema{ Type: schema.TypeString, Computed: true, @@ -323,7 +350,7 @@ func DataSourceIBMSchematicsWorkspace() *schema.Resource { Computed: true, Description: "Cloud data type of the variable. eg. resource_group_id, region, vpc_id.", }, - "default_value": &schema.Schema{ + "default": &schema.Schema{ Type: schema.TypeString, Computed: true, Description: "Default value for the variable only if the override value is not specified.", @@ -401,6 +428,58 @@ func DataSourceIBMSchematicsWorkspace() *schema.Resource { Computed: true, Description: "The source of this meta-data.", }, + "metadata": &schema.Schema{ + Type: schema.TypeList, + Computed: true, + Description: "A list of input variables that are associated with the workspace.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "default_value": { + Type: schema.TypeString, + Computed: true, + Description: "Default value for the variable only if the override value is not specified.", + }, + "description": { + Type: schema.TypeString, + Computed: true, + Description: "The description of the meta data.", + }, + "hidden": { + Type: schema.TypeBool, + Computed: true, + Description: "If **true**, the variable is not displayed on UI or Command line.", + }, + "required": { + Type: schema.TypeBool, + Computed: true, + Description: "If the variable required?.", + }, + "options": { + Type: schema.TypeList, + Computed: true, + Description: "The list of possible values for this variable. If type is **integer** or **date**, then the array of string is converted to array of integers or date during the runtime.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "type": { + Type: schema.TypeString, + Computed: true, + Description: "Type of the variable.", + }, + "secure": { + Type: schema.TypeBool, + Computed: true, + Description: "If set to `true`, the value of your input variable is protected and not returned in your API response.", + }, + }, + }, + }, + "value": { + Type: schema.TypeString, + Computed: true, + Description: "The value of the variable. Applicable for the integer type.", + }, }, }, }, @@ -670,8 +749,9 @@ func dataSourceIBMSchematicsWorkspaceRead(context context.Context, d *schema.Res if err = d.Set("template_values", templateData[0]["values"]); err != nil { return diag.FromErr(fmt.Errorf("[ERROR] Error reading values: %s", err)) } - if err = d.Set("template_values_metadata", templateData[0]["values_metadata"]); err != nil { - return diag.FromErr(fmt.Errorf("[ERROR] Error reading values_metadata: %s", err)) + err = d.Set("template_values_metadata", dataSourceWorkspaceResponseFlattenValuesMetadata(templateData[0]["values_metadata"])) + if err != nil { + fmt.Println(fmt.Errorf("[ERROR] Error reading template_values_metadata %s", err)) } if err = d.Set("template_inputs", templateData[0]["variablestore"]); err != nil { return diag.FromErr(fmt.Errorf("[ERROR] Error reading variablestore: %s", err)) @@ -799,10 +879,31 @@ func dataSourceWorkspaceResponseCatalogRefToMap(catalogRefItem schematicsv1.Cata if catalogRefItem.OfferingVersion != nil { catalogRefMap["offering_version"] = catalogRefItem.OfferingVersion } - + if catalogRefItem.ServiceExtensions != nil { + serviceExtensionsList := []map[string]interface{}{} + for _, serviceExtensionsItem := range catalogRefItem.ServiceExtensions { + serviceExtensionsList = append(serviceExtensionsList, dataSourceWorkspaceResponseCatalogRefServiceExtensionsToMap(serviceExtensionsItem)) + } + catalogRefMap["service_extensions"] = serviceExtensionsList + } return catalogRefMap } +func dataSourceWorkspaceResponseCatalogRefServiceExtensionsToMap(serviceExtensionsItem schematicsv1.ServiceExtensions) (serviceExtensionMap map[string]interface{}) { + serviceExtensionMap = map[string]interface{}{} + + if serviceExtensionsItem.Name != nil { + serviceExtensionMap["name"] = *serviceExtensionsItem.Name + } + if serviceExtensionsItem.Type != nil { + serviceExtensionMap["type"] = serviceExtensionsItem.Type + } + if serviceExtensionsItem.Value != nil { + serviceExtensionMap["value"] = *serviceExtensionsItem.Value + } + return serviceExtensionMap +} + func dataSourceWorkspaceResponseFlattenRuntimeData(result []schematicsv1.TemplateRunTimeDataResponse) (runtimeData []map[string]interface{}) { for _, runtimeDataItem := range result { runtimeData = append(runtimeData, dataSourceWorkspaceResponseRuntimeDataToMap(runtimeDataItem)) @@ -915,11 +1016,11 @@ func dataSourceWorkspaceResponseTemplateDataToMap(templateDataItem schematicsv1. templateDataMap["values"] = templateDataItem.Values } if templateDataItem.ValuesMetadata != nil { - valuesMetadata := []map[string]interface{}{} + valuesMetadataList := []interface{}{} for _, valuesMetadataItem := range templateDataItem.ValuesMetadata { - valuesMetadata = append(valuesMetadata, valuesMetadataItem) + valuesMetadataList = append(valuesMetadataList, valuesMetadataItem) } - templateDataMap["values_metadata"] = valuesMetadata + templateDataMap["values_metadata"] = valuesMetadataList } if templateDataItem.ValuesURL != nil { templateDataMap["values_url"] = templateDataItem.ValuesURL @@ -934,6 +1035,111 @@ func dataSourceWorkspaceResponseTemplateDataToMap(templateDataItem schematicsv1. return templateDataMap } + +func dataSourceWorkspaceResponseFlattenValuesMetadata(result interface{}) (valuesMetadata []map[string]interface{}) { + if result != nil { + for _, res := range result.([]interface{}) { + valuesMetadataMap := dataSourceWorkspaceResponseValuesMetadataToMap(res.(map[string]interface{})) + valuesMetadata = append(valuesMetadata, valuesMetadataMap) + } + } + return valuesMetadata +} + +func dataSourceWorkspaceResponseValuesMetadataToMap(valuesMetadataItem map[string]interface{}) map[string]interface{} { + valuesMetadataMap := map[string]interface{}{} + + if valuesMetadataItem["name"] != nil { + valuesMetadataMap["name"] = valuesMetadataItem["name"].(string) + } + if valuesMetadataItem["type"] != nil { + valuesMetadataMap["type"] = valuesMetadataItem["type"].(string) + } + + if valuesMetadataItem["aliases"] != nil { + valuesMetadataMap["aliases"] = valuesMetadataItem["aliases"] + } + + if valuesMetadataItem["description"] != nil { + valuesMetadataMap["description"] = valuesMetadataItem["description"].(string) + } + + if valuesMetadataItem["cloud_data_type"] != nil { + valuesMetadataMap["cloud_data_type"] = valuesMetadataItem["cloud_data_type"].(string) + } + + if valuesMetadataItem["default"] != nil { + valuesMetadataMap["default"] = valuesMetadataItem["default"].(string) + } + + if valuesMetadataItem["link_status"] != nil { + valuesMetadataMap["link_status"] = valuesMetadataItem["link_status"].(string) + } + + if valuesMetadataItem["secure"] != nil { + valuesMetadataMap["secure"] = valuesMetadataItem["secure"] + } + + if valuesMetadataItem["immutable"] != nil { + valuesMetadataMap["immutable"] = valuesMetadataItem["immutable"] + } + + if valuesMetadataItem["hidden"] != nil { + valuesMetadataMap["hidden"] = valuesMetadataItem["hidden"] + } + + if valuesMetadataItem["required"] != nil { + valuesMetadataMap["required"] = valuesMetadataItem["required"] + } + + if valuesMetadataItem["options"] != nil { + valuesMetadataMap["options"] = valuesMetadataItem["options"] + } + + if valuesMetadataItem["min_value"] != nil { + valuesMetadataMap["min_value"] = valuesMetadataItem["min_value"] + } + + if valuesMetadataItem["max_value"] != nil { + valuesMetadataMap["max_value"] = valuesMetadataItem["max_value"] + } + + if valuesMetadataItem["min_length"] != nil { + valuesMetadataMap["min_length"] = valuesMetadataItem["min_length"] + } + + if valuesMetadataItem["max_length"] != nil { + valuesMetadataMap["max_length"] = valuesMetadataItem["max_length"] + } + + if valuesMetadataItem["matches"] != nil { + valuesMetadataMap["matches"] = valuesMetadataItem["matches"].(string) + } + + if valuesMetadataItem["position"] != nil { + valuesMetadataMap["position"] = valuesMetadataItem["position"] + } + + if valuesMetadataItem["group_by"] != nil { + valuesMetadataMap["group_by"] = valuesMetadataItem["group_by"].(string) + } + + if valuesMetadataItem["source"] != nil { + valuesMetadataMap["source"] = valuesMetadataItem["source"].(string) + } + + if valuesMetadataItem["metadata"] != nil { + metadataList := []map[string]interface{}{} + + valuesMetadataMap["metadata"] = append(metadataList, valuesMetadataItem["metadata"].(map[string]interface{})) + + } + if valuesMetadataItem["value"] != nil { + valuesMetadataMap["value"] = valuesMetadataItem["value"].(string) + } + + return valuesMetadataMap +} func dataSourceIbmSchematicsWorkspaceVariableMetadataToMap(model *schematicsv1.VariableMetadata) map[string]interface{} { modelMap := make(map[string]interface{}) if model.Type != nil { diff --git a/ibm/service/schematics/resource_ibm_schematics_workspace.go b/ibm/service/schematics/resource_ibm_schematics_workspace.go index b6309bf51d..f4c87066b6 100644 --- a/ibm/service/schematics/resource_ibm_schematics_workspace.go +++ b/ibm/service/schematics/resource_ibm_schematics_workspace.go @@ -226,6 +226,11 @@ func ResourceIBMSchematicsWorkspace() *schema.Resource { Description: "List of values metadata.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Name of the variable.", + }, "type": &schema.Schema{ Type: schema.TypeString, Computed: true, @@ -249,7 +254,7 @@ func ResourceIBMSchematicsWorkspace() *schema.Resource { Computed: true, Description: "Cloud data type of the variable. eg. resource_group_id, region, vpc_id.", }, - "default_value": &schema.Schema{ + "default": &schema.Schema{ Type: schema.TypeString, Computed: true, Description: "Default value for the variable only if the override value is not specified.", @@ -808,8 +813,8 @@ func resourceIBMSchematicsWorkspaceMapToSharedTargetData(sharedTargetDataMap map } if sharedTargetDataMap["entitlement_keys"] != nil { entitlementKeys := []map[string]interface{}{} - for _, entitlementKeysItem := range sharedTargetDataMap["entitlement_keys"].([]map[string]interface{}) { - entitlementKeys = append(entitlementKeys, entitlementKeysItem) + for _, entitlementKeysItem := range sharedTargetDataMap["entitlement_keys"].([]interface{}) { + entitlementKeys = append(entitlementKeys, entitlementKeysItem.(map[string]interface{})) } sharedTargetData.EntitlementKeys = entitlementKeys } @@ -837,8 +842,8 @@ func resourceIBMSchematicsWorkspaceMapToTemplateSourceDataRequest(templateSource if templateSourceDataRequestMap["env_values"] != nil { envValues := []map[string]interface{}{} - for _, envValuesItem := range templateSourceDataRequestMap["env_values"].([]map[string]interface{}) { - envValues = append(envValues, envValuesItem) + for _, envValuesItem := range templateSourceDataRequestMap["env_values"].([]interface{}) { + envValues = append(envValues, envValuesItem.(map[string]interface{})) } templateSourceDataRequest.EnvValues = envValues } @@ -862,8 +867,8 @@ func resourceIBMSchematicsWorkspaceMapToTemplateSourceDataRequest(templateSource } if templateSourceDataRequestMap["values_metadata"] != nil { valuesMetadata := []map[string]interface{}{} - for _, valuesMetadataItem := range templateSourceDataRequestMap["values_metadata"].([]map[string]interface{}) { - valuesMetadata = append(valuesMetadata, valuesMetadataItem) + for _, valuesMetadataItem := range templateSourceDataRequestMap["values_metadata"].([]interface{}) { + valuesMetadata = append(valuesMetadata, valuesMetadataItem.(map[string]interface{})) } templateSourceDataRequest.ValuesMetadata = valuesMetadata } diff --git a/ibm/service/vpc/resource_ibm_is_instance.go b/ibm/service/vpc/resource_ibm_is_instance.go index 4e0ea22921..2debbf2734 100644 --- a/ibm/service/vpc/resource_ibm_is_instance.go +++ b/ibm/service/vpc/resource_ibm_is_instance.go @@ -625,7 +625,7 @@ func ResourceIBMISInstance() *schema.Resource { ForceNew: true, Computed: true, RequiredWith: []string{isInstanceZone, isInstancePrimaryNetworkInterface, isInstanceProfile, isInstanceKeys, isInstanceVPC}, - AtLeastOneOf: []string{isInstanceImage, isInstanceSourceTemplate, "boot_volume.0.volume_id", "boot_volume.0.snapshot"}, + AtLeastOneOf: []string{isInstanceImage, isInstanceSourceTemplate, "boot_volume.0.volume_id", "boot_volume.0.snapshot", "catalog_offering.0.offering_crn", "catalog_offering.0.version_crn"}, ConflictsWith: []string{isInstanceImage, isInstanceSourceTemplate, "boot_volume.0.snapshot", "boot_volume.0.name", "boot_volume.0.encryption", "catalog_offering.0.offering_crn", "catalog_offering.0.version_crn"}, Description: "The unique identifier for this volume", }, diff --git a/ibm/service/vpc/resource_ibm_is_instance_test.go b/ibm/service/vpc/resource_ibm_is_instance_test.go index 5bac59cff7..6d0b0055b8 100644 --- a/ibm/service/vpc/resource_ibm_is_instance_test.go +++ b/ibm/service/vpc/resource_ibm_is_instance_test.go @@ -75,6 +75,48 @@ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCKVmnMOlHKcZK8tpt3MP1lqOLAcqcJzhsvJcjscgVE }, }) } +func TestAccIBMISInstance_enc_catalog(t *testing.T) { + var instance string + vpcname := fmt.Sprintf("tf-vpc-%d", acctest.RandIntRange(10, 100)) + name := fmt.Sprintf("tf-instnace-%d", acctest.RandIntRange(10, 100)) + subnetname := fmt.Sprintf("tf-subnet-%d", acctest.RandIntRange(10, 100)) + publicKey := strings.TrimSpace(` +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCKVmnMOlHKcZK8tpt3MP1lqOLAcqcJzhsvJcjscgVERRN7/9484SOBJ3HSKxxNG5JN8owAjy5f9yYwcUg+JaUVuytn5Pv3aeYROHGGg+5G346xaq3DAwX6Y5ykr2fvjObgncQBnuU5KHWCECO/4h8uWuwh/kfniXPVjFToc+gnkqA+3RKpAecZhFXwfalQ9mMuYGFxn+fwn8cYEApsJbsEmb0iJwPiZ5hjFC8wREuiTlhPHDgkBLOiycd20op2nXzDbHfCHInquEe/gYxEitALONxm0swBOwJZwlTDOB7C6y2dzlrtxr1L59m7pCkWI4EtTRLvleehBoj3u7jB4usR +`) + sshname := fmt.Sprintf("tf-ssh-%d", acctest.RandIntRange(10, 100)) + resourceName := fmt.Sprintf("tf-cosresource-%d", acctest.RandIntRange(10, 100)) + keyName := fmt.Sprintf("tf-key-%d", acctest.RandIntRange(10, 100)) + userData1 := "a" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMISInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMISInstanceCatEncryptionConfig(vpcname, subnetname, sshname, publicKey, name, userData1, resourceName, keyName), + Check: resource.ComposeTestCheckFunc( + testAccCheckIBMISInstanceExists("ibm_is_instance.testacc_instance", instance), + resource.TestCheckResourceAttr( + "ibm_is_instance.testacc_instance", "name", name), + resource.TestCheckResourceAttr( + "ibm_is_instance.testacc_instance", "user_data", userData1), + resource.TestCheckResourceAttr( + "ibm_is_instance.testacc_instance", "zone", acc.ISZoneName), + resource.TestCheckResourceAttrSet( + "ibm_is_instance.testacc_instance", "vcpu.#"), + resource.TestCheckResourceAttrSet( + "ibm_is_instance.testacc_instance", "vcpu.0.manufacturer"), + resource.TestCheckResourceAttrSet( + "ibm_is_instance.testacc_instance", "boot_volume.0.encryption"), + resource.TestCheckResourceAttrSet( + "ibm_is_instance.testacc_instance", "catalog_offering.0.version_crn"), + ), + }, + }, + }) +} + func TestAccIBMISInstance_lifecycle(t *testing.T) { var instance string vpcname := fmt.Sprintf("tf-vpc-%d", acctest.RandIntRange(10, 100)) @@ -1048,6 +1090,60 @@ func testAccCheckIBMISInstanceConfig(vpcname, subnetname, sshname, publicKey, na } }`, vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, sshname, publicKey, name, acc.IsImage, acc.InstanceProfileName, userData, acc.ISZoneName) } +func testAccCheckIBMISInstanceCatEncryptionConfig(vpcname, subnetname, sshname, publicKey, name, userData, resourceName, keyName string) string { + return fmt.Sprintf(` + resource "ibm_is_vpc" "testacc_vpc" { + name = "%s" + } + + resource "ibm_is_subnet" "testacc_subnet" { + name = "%s" + vpc = ibm_is_vpc.testacc_vpc.id + zone = "%s" + ipv4_cidr_block = "%s" + } + + resource "ibm_is_ssh_key" "testacc_sshkey" { + name = "%s" + public_key = "%s" + } + data ibm_is_images testacc_images { + catalog_managed = true + } + resource "ibm_resource_instance" "testacc_resource" { + name = "%s" + service = "kms" + plan = "tiered-pricing" + location = "%s" + } + resource "ibm_kms_key" "testacc_key" { + instance_id = "${ibm_resource_instance.testacc_resource.guid}" + key_name = "%s" + standard_key = false + force_delete = true + } + resource "ibm_is_instance" "testacc_instance" { + name = "%s" + catalog_offering { + version_crn = data.ibm_is_images.testacc_images.images.1.catalog_offering.0.version.0.crn + } + boot_volume { + encryption = ibm_kms_key.testacc_key.crn + } + profile = "%s" + primary_network_interface { + subnet = ibm_is_subnet.testacc_subnet.id + } + user_data = "%s" + vpc = ibm_is_vpc.testacc_vpc.id + zone = "%s" + keys = [ibm_is_ssh_key.testacc_sshkey.id] + network_interfaces { + subnet = ibm_is_subnet.testacc_subnet.id + name = "eth1" + } + }`, vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, sshname, publicKey, resourceName, acc.RegionName, keyName, name, acc.InstanceProfileName, userData, acc.ISZoneName) +} func testAccCheckIBMISInstanceRipConfig(vpcname, subnetname, subnetripname, sshname, publicKey, name, userData string) string { return fmt.Sprintf(` diff --git a/metadata/provider_metadata.json b/metadata/provider_metadata.json index 595fc1b0cd..35b141da83 100644 --- a/metadata/provider_metadata.json +++ b/metadata/provider_metadata.json @@ -94360,7 +94360,6 @@ "name": "min_tls_version", "type": "TypeString", "description": "Minimum version of TLS required", - "default_value": "1.1", "optional": true }, { @@ -96013,7 +96012,6 @@ "name": "min_tls_version", "type": "TypeString", "description": "Minimum version of TLS required", - "default_value": "1.1", "options": "1.1, 1.2, 1.3, 1.4", "optional": true } diff --git a/version/version.go b/version/version.go index f1071a21bf..19638a80ae 100644 --- a/version/version.go +++ b/version/version.go @@ -5,7 +5,7 @@ import ( ) // Version is the current provider main version -const Version = "1.60.0-beta0" +const Version = "1.60.0" // GitCommit is the git commit that was compiled. This will be filled in by the compiler. var GitCommit string diff --git a/website/docs/d/code_engine_job.html.markdown b/website/docs/d/code_engine_job.html.markdown index c39aba650d..189092fe7c 100644 --- a/website/docs/d/code_engine_job.html.markdown +++ b/website/docs/d/code_engine_job.html.markdown @@ -77,7 +77,7 @@ Nested scheme for **run_env_variables**: * `value` - (String) The literal value of the environment variable. * Constraints: The maximum length is `253` characters. The minimum length is `1` character. The value must match regular expression `/^[\\-._a-zA-Z0-9]+$/`. -* `run_mode` - (String) The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `max_execution_time` and `retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `max_execution_time` and `retry_limit` properties are not allowed. +* `run_mode` - (String) The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `scale_max_execution_time` and `scale_retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `scale_max_execution_time` and `scale_retry_limit` properties are not allowed. * Constraints: The default value is `task`. Allowable values are: `task`, `daemon`. The minimum length is `0` characters. The value must match regular expression `/^(task|daemon)$/`. * `run_service_account` - (String) The name of the service account. For built-in service accounts, you can use the shortened names `manager`, `none`, `reader`, and `writer`. This property must not be set on a job run, which references a job template. diff --git a/website/docs/d/pi_datacenter.html.markdown b/website/docs/d/pi_datacenter.html.markdown index 36cdd88493..8076d2188f 100644 --- a/website/docs/d/pi_datacenter.html.markdown +++ b/website/docs/d/pi_datacenter.html.markdown @@ -45,14 +45,10 @@ Review the argument references that you can specify for your data source. In addition to all argument reference list, you can access the following attribute references after your data source is created. -- `pi_datacenter_capabilities` - (Map) Datacenter Capabilities. +- `pi_datacenter_capabilities` - (Map) Datacenter Capabilities. Capabilities are `true` or `false`. - Nested schema for `pi_datacenter_capabilities`: - - `cloud-connections` - (Bool) Cloud-connections capability. - - `disaster-recovery-site` - (Bool) Disaster recovery site. - - `power-edge-router` - (Bool) Power edge router capability. - - `vpn-connections`- (Bool) VPN-connections capability. - - `sysdig-enabled`- (Bool) Sysdig-enabled capability. + Some of `pi_datacenter_capabilities` are: + - `cloud-connections`, `disaster-recovery-site`, `metrics`, `power-edge-router`, `power-vpn-connections` - `pi_datacenter_location` - (Map) Datacenter location. @@ -60,5 +56,5 @@ In addition to all argument reference list, you can access the following attribu - `region` - (String) The Datacenter location region zone. - `type` - (String) The Datacenter location region type. - `url`- (String) The Datacenter location region url. -- `pi_datacenter_status` - (String) The Datacenter status, `ACTIVE`,`MAINTENANCE` or `DOWN`. -- `pi_datacenter_type` - (String) The Datacenter type, `Public Cloud` or `Private Cloud`. +- `pi_datacenter_status` - (String) The Datacenter status, `active`,`maintenance` or `down`. +- `pi_datacenter_type` - (String) The Datacenter type, `off-premises` or `on-premises`. diff --git a/website/docs/d/pi_datacenters.html.markdown b/website/docs/d/pi_datacenters.html.markdown index 3d56abeca3..812b0a75f3 100644 --- a/website/docs/d/pi_datacenters.html.markdown +++ b/website/docs/d/pi_datacenters.html.markdown @@ -42,14 +42,10 @@ In addition to all argument reference list, you can access the following attribu - `datacenters` - List of Datacenters Nested schema for `datacenters` - - `pi_datacenter_capabilities` - (Map) Datacenter Capabilities. + - `pi_datacenter_capabilities` - (Map) Datacenter Capabilities. Capabilities are `true` or `false`. - Nested schema for `pi_datacenter_capabilities`; are (Bool) `true` or `false`: - - `cloud-connections` - (Bool) Cloud-connections capability. - - `disaster-recovery-site` - (Bool) Disaster recovery site. - - `power-edge-router` - (Bool) Power edge router capability. - - `vpn-connections`- (Bool) VPN-connections capability. - - `sysdig-enabled`- (Bool) Sysdig-enabled capability. + Some of `pi_datacenter_capabilities` are: + - `cloud-connections`, `disaster-recovery-site`, `metrics`, `power-edge-router`, `power-vpn-connections` - `pi_datacenter_location` - (Map) Datacenter location. @@ -57,5 +53,5 @@ In addition to all argument reference list, you can access the following attribu - `region` - (String) The Datacenter location region zone. - `type` - (String) The Datacenter location region type. - `url`- (String) The Datacenter location region url. - - `pi_datacenter_status` - (String) The Datacenter status, `ACTIVE`,`MAINTENANCE` or `DOWN`. - - `pi_datacenter_type` - (String) The Datacenter type, `Public Cloud` or `Private Cloud`. + - `pi_datacenter_status` - (String) The Datacenter status, `active`,`maintenance` or `down`. + - `pi_datacenter_type` - (String) The Datacenter type, `off-premises` or `on-premises`. diff --git a/website/docs/d/pi_workspace.html.markdown b/website/docs/d/pi_workspace.html.markdown index e82301e99b..1b3195f016 100644 --- a/website/docs/d/pi_workspace.html.markdown +++ b/website/docs/d/pi_workspace.html.markdown @@ -43,17 +43,13 @@ Review the argument references that you can specify for your data source. ## Attribute reference -In addition to all argument reference list, you can access the following attribute references after your data source is created. +In addition to all argument reference listed, you can access the following attribute references after your data source is created. -- `id - (String) Workspace ID. -- `pi_workspace_capabilities` - (Map) Workspace Capabilities. +- `id` - (String) Workspace ID. +- `pi_workspace_capabilities` - (Map) Workspace Capabilities. Capabilities are `true` or `false`. - Nested schema for `pi_workspace_capabilities`: - - `cloud-connections` - (Bool) Cloud-connections capability. - - `custom-virtual-cores`- (Bool) Custom virtual cores capability. - - `power-edge-router` - (Bool) Power edge router capability. - - `transit-gateway-connection` - (Bool) Transit gateway connection capability. - - `vpn-connections`- (Bool) VPN-connections capability. + Some of `pi_workspace_capabilities` are: + - `cloud-connections`, `power-edge-router`, `power-vpn-connections`, `transit-gateway-connection` - `pi_workspace_details` - (Map) Workspace information. @@ -67,5 +63,5 @@ In addition to all argument reference list, you can access the following attribu - `type` - (String) The Workspace location region type. - `url`- (String) The Workspace location region url. - `pi_workspace_name` - (String) The Workspace name. -- `pi_workspace_status` - (String) The Workspace status, `ACTIVE` or `FAILED`. -- `pi_workspace_type` - (String) The Workspace type, `Public Cloud` or `Private Cloud`. +- `pi_workspace_status` - (String) The Workspace status, `active`, `critical`, `failed`, `provisioning`. +- `pi_workspace_type` - (String) The Workspace type, `off-premises` or `on-premises`. diff --git a/website/docs/d/pi_workspaces.html.markdown b/website/docs/d/pi_workspaces.html.markdown index 75acc3baba..12ca699246 100644 --- a/website/docs/d/pi_workspaces.html.markdown +++ b/website/docs/d/pi_workspaces.html.markdown @@ -43,18 +43,14 @@ Review the argument references that you can specify for your data source. ## Attribute reference -In addition to all argument reference list, you can access the following attribute references after your data source is created. +In addition to all argument reference listed, you can access the following attribute references after your data source is created. - `workspaces` - List of all Workspaces. Nested schema for `workspaces` - - `pi_workspace_capabilities` - (Map) Workspace Capabilities. + - `pi_workspace_capabilities` - (Map) Workspace Capabilities. Capabilities are `true` or `false`. - Nested schema for `pi_workspace_capabilities`; are (Bool) `true` or `false`: - - `cloud-connections` - (Bool) Cloud-connections capability. - - `custom-virtual-cores`- (Bool) Custom virtual cores capability. - - `power-edge-router` - (Bool) Power edge router capability. - - `transit-gateway-connection` - (Bool) Transit gateway connection capability. - - `vpn-connections`- (Bool) VPN-connections capability. + Some of `pi_workspace_capabilities` are: + - `cloud-connections` ,`power-edge-router`, `power-vpn-connections`, `transit-gateway-connection` - `pi_workspace_details` - (Map) Workspace information. @@ -69,5 +65,5 @@ In addition to all argument reference list, you can access the following attribu - `type` - (String) The Workspace location region type. - `url`- (String) The Workspace location region url. - `pi_workspace_name` - (String) The Workspace name. - - `pi_workspace_status` - (String) The Workspace status, `ACTIVE` or `FAILED`. - - `pi_workspace_type` - (String) The Workspace type, `Public Cloud` or `Private Cloud`. + - `pi_workspace_status` - (String) The Workspace status, `active`, `critical`, `failed`, `provisioning`. + - `pi_workspace_type` - (String) The Workspace type, `off-premises` or `on-premises`. diff --git a/website/docs/d/project.html.markdown b/website/docs/d/project.html.markdown index 3ac6b811d3..6cac923733 100644 --- a/website/docs/d/project.html.markdown +++ b/website/docs/d/project.html.markdown @@ -31,15 +31,15 @@ After your data source is created, you can read values from the following attrib * `id` - The unique identifier of the project. * `configs` - (List) The project configurations. These configurations are only included in the response of creating a project if a configs array is specified in the request payload. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `100` items. The minimum length is `0` items. Nested schema for **configs**: * `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `definition` - (List) The name and description of a project configuration. Nested schema for **definition**: * `description` - (String) A project configuration description. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. - * `name` - (String) The configuration name. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `name` - (String) The configuration name. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. * `href` - (String) A URL. * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(http(s)?:\/\/)[a-zA-Z0-9\\$\\-_\\.+!\\*'\\(\\),=&?\/]+$/`. * `id` - (String) The ID of the configuration. If this parameter is empty, an ID is automatically created for the configuration. @@ -48,7 +48,7 @@ Nested schema for **configs**: * `project` - (List) The project referenced by this resource. Nested schema for **project**: * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `definition` - (List) The definition of the project reference. Nested schema for **definition**: * `name` - (String) The name of the project. @@ -64,10 +64,10 @@ Nested schema for **configs**: * `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `cumulative_needs_attention_view` - (List) The cumulative list of needs attention items for a project. If the view is successfully retrieved, an array which could be empty is returned. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `50` items. The minimum length is `0` items. Nested schema for **cumulative_needs_attention_view**: * `config_id` - (String) A unique ID for the configuration. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. @@ -83,21 +83,21 @@ Nested schema for **cumulative_needs_attention_view**: * `definition` - (List) The definition of the project. Nested schema for **definition**: * `description` - (String) A brief explanation of the project's use in the configuration of a deployable architecture. It is possible to create a project without providing a description. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. * `destroy_on_delete` - (Boolean) The policy that indicates whether the resources are destroyed or not when a project is deleted. - * `name` - (String) The name of the project. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. + * `name` - (String) The name of the project. It is unique within the account across regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. * `environments` - (List) The project environments. These environments are only included in the response if project environments were created on the project. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `20` items. The minimum length is `0` items. Nested schema for **environments**: * `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `definition` - (List) The environment definition used in the project collection. Nested schema for **definition**: * `description` - (String) The description of the environment. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. - * `name` - (String) The name of the environment. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `name` - (String) The name of the environment. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. * `href` - (String) A URL. * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(http(s)?:\/\/)[a-zA-Z0-9\\$\\-_\\.+!\\*'\\(\\),=&?\/]+$/`. * `id` - (String) The environment id as a friendly name. @@ -105,7 +105,7 @@ Nested schema for **environments**: * `project` - (List) The project referenced by this resource. Nested schema for **project**: * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `definition` - (List) The definition of the project reference. Nested schema for **definition**: * `name` - (String) The name of the project. @@ -121,9 +121,12 @@ Nested schema for **environments**: * `location` - (Forces new resource, String) The IBM Cloud location where a resource is deployed. * Constraints: The maximum length is `64` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]*$/`. -* `resource_group` - (Forces new resource, String) The resource group where the project's data and tools are created. +* `resource_group` - (Forces new resource, String) The resource group name where the project's data and tools are created. * Constraints: The maximum length is `64` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]*$/`. +* `resource_group_id` - (String) The resource group id where the project's data and tools are created. + * Constraints: The maximum length is `64` characters. The minimum length is `0` characters. The value must match regular expression `/^[0-9a-zA-Z]+$/`. + * `state` - (String) The project status value. * Constraints: Allowable values are: `ready`, `deleting`, `deleting_failed`. diff --git a/website/docs/d/project_config.html.markdown b/website/docs/d/project_config.html.markdown index 5cfedd0d20..4db739e668 100644 --- a/website/docs/d/project_config.html.markdown +++ b/website/docs/d/project_config.html.markdown @@ -35,7 +35,7 @@ After your data source is created, you can read values from the following attrib * `id` - The unique identifier of the project_config. * `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. -* `definition` - (List) The type and output of a project configuration. +* `definition` - (List) The name and description of a project configuration. Nested schema for **definition**: * `authorizations` - (List) The authorization details. You can authorize by using a trusted profile or an API key in Secrets Manager. Nested schema for **authorizations**: @@ -47,30 +47,28 @@ Nested schema for **definition**: * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. * `compliance_profile` - (List) The profile required for compliance. Nested schema for **compliance_profile**: - * `attachment_id` - (String) The unique ID. + * `attachment_id` - (String) A unique ID for the attachment to a compliance profile. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. - * `id` - (String) The unique ID. + * `id` - (String) The unique ID for that compliance profile. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. - * `instance_id` - (String) The unique ID. + * `instance_id` - (String) A unique ID for an instance of a compliance profile. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. * `instance_location` - (String) The location of the compliance instance. * Constraints: The maximum length is `12` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(us-south|us-east|eu-gb|eu-de)$/`. * `profile_name` - (String) The name of the compliance profile. * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^`<>\\x00-\\x1F]*$/`. * `description` - (String) A project configuration description. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. - * `environment` - (String) The ID of the project environment. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `environment_id` - (String) The ID of the project environment. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. * `inputs` - (List) The input variables for configuration definition and environment. Nested schema for **inputs**: - * `locator_id` - (Forces new resource, String) A dotted value of catalogID.versionID. + * `locator_id` - (Forces new resource, String) A unique concatenation of catalogID.versionID that identifies the DA in the catalog. * Constraints: The maximum length is `512` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[\\.0-9a-z-A-Z_-]+$/`. - * `name` - (String) The configuration name. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. + * `name` - (String) The configuration name. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. * `settings` - (List) Schematics environment variables to use to deploy the configuration.Settings are only available if they were specified when the configuration was initially created. Nested schema for **settings**: - * `type` - (String) The type of a project configuration manual property. - * Constraints: Allowable values are: `terraform_template`, `schematics_blueprint`. * `is_draft` - (Boolean) The flag that indicates whether the version of the configuration is draft, or active. @@ -79,13 +77,13 @@ Nested schema for **definition**: * `modified_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `needs_attention_state` - (List) The needs attention state of a configuration. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `50` items. The minimum length is `0` items. * `outputs` - (List) The outputs of a Schematics template property. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `50` items. The minimum length is `0` items. Nested schema for **outputs**: * `description` - (String) A short explanation of the output value. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. * `name` - (String) The variable name. * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$).+$/`. * `value` - (String) Can be any value - a string, number, boolean, array, or object. @@ -93,7 +91,7 @@ Nested schema for **outputs**: * `project` - (List) The project referenced by this resource. Nested schema for **project**: * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `definition` - (List) The definition of the project reference. Nested schema for **definition**: * `name` - (String) The name of the project. @@ -103,8 +101,56 @@ Nested schema for **project**: * `id` - (String) The unique ID. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. -* `schematics` - (List) A schematics workspace associated to a project configuration. +* `schematics` - (List) A schematics workspace associated to a project configuration, with scripts. Nested schema for **schematics**: + * `deploy_post_script` - (List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **deploy_post_script**: + * `path` - (String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `deploy_pre_script` - (List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **deploy_pre_script**: + * `path` - (String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `undeploy_post_script` - (List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **undeploy_post_script**: + * `path` - (String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `undeploy_pre_script` - (List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **undeploy_pre_script**: + * `path` - (String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `validate_post_script` - (List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **validate_post_script**: + * `path` - (String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `validate_pre_script` - (List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **validate_pre_script**: + * `path` - (String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. * `workspace_crn` - (String) An existing schematics workspace CRN. * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. diff --git a/website/docs/d/project_environment.html.markdown b/website/docs/d/project_environment.html.markdown new file mode 100644 index 0000000000..3b9420d3fe --- /dev/null +++ b/website/docs/d/project_environment.html.markdown @@ -0,0 +1,84 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_project_environment" +description: |- + Get information about project_environment +subcategory: "Projects" +--- + +# ibm_project_environment + +Provides a read-only data source to retrieve information about a project_environment. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. + +## Example Usage + +```hcl +data "ibm_project_environment" "project_environment" { + project_environment_id = ibm_project_environment.project_environment.project_environment_id + project_id = ibm_project_environment.project_environment.project_id +} +``` + +## Argument Reference + +You can specify the following arguments for this data source. + +* `project_environment_id` - (Required, Forces new resource, String) The environment ID. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$).+$/`. +* `project_id` - (Required, Forces new resource, String) The unique project ID. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + +## Attribute Reference + +After your data source is created, you can read values from the following attributes. + +* `id` - The unique identifier of the project_environment. +* `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. + +* `definition` - (List) The environment definition. +Nested schema for **definition**: + * `authorizations` - (List) The authorization details. You can authorize by using a trusted profile or an API key in Secrets Manager. + Nested schema for **authorizations**: + * `api_key` - (String) The IBM Cloud API Key. + * Constraints: The maximum length is `512` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^`<>\\x00-\\x1F]*$/`. + * `method` - (String) The authorization method. You can authorize by using a trusted profile or an API key in Secrets Manager. + * Constraints: Allowable values are: `api_key`, `trusted_profile`. + * `trusted_profile_id` - (String) The trusted profile ID. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `compliance_profile` - (List) The profile required for compliance. + Nested schema for **compliance_profile**: + * `attachment_id` - (String) A unique ID for the attachment to a compliance profile. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `id` - (String) The unique ID for that compliance profile. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `instance_id` - (String) A unique ID for an instance of a compliance profile. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `instance_location` - (String) The location of the compliance instance. + * Constraints: The maximum length is `12` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(us-south|us-east|eu-gb|eu-de)$/`. + * `profile_name` - (String) The name of the compliance profile. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^`<>\\x00-\\x1F]*$/`. + * `description` - (String) The description of the environment. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `inputs` - (List) The input variables for configuration definition and environment. + Nested schema for **inputs**: + * `name` - (String) The name of the environment. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. + +* `modified_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. + +* `project` - (List) The project referenced by this resource. +Nested schema for **project**: + * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. + * `definition` - (List) The definition of the project reference. + Nested schema for **definition**: + * `name` - (String) The name of the project. + * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. + * `href` - (String) A URL. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(http(s)?:\/\/)[a-zA-Z0-9\\$\\-_\\.+!\\*'\\(\\),=&?\/]+$/`. + * `id` - (String) The unique ID. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + +* `target_account` - (String) The target account ID derived from the authentication block values. + * Constraints: The maximum length is `64` characters. The value must match regular expression `/^[a-zA-Z0-9.-]+$/`. + diff --git a/website/docs/d/schematics_agent.html.markdown b/website/docs/d/schematics_agent.html.markdown index 442d89280f..debcc2afe7 100644 --- a/website/docs/d/schematics_agent.html.markdown +++ b/website/docs/d/schematics_agent.html.markdown @@ -42,37 +42,6 @@ Nested scheme for **agent_infrastructure**: * `cos_instance_name` - (String) The COS instance name to store the agent logs. * `infra_type` - (String) Type of target agent infrastructure. * Constraints: Allowable values are: `ibm_kubernetes`, `ibm_openshift`, `ibm_satellite`. - -* `agent_inputs` - (List) Additional input variables for the agent. -Nested scheme for **agent_inputs**: - * `link` - (String) The reference link to the variable value By default the expression points to `$self.value`. - * `metadata` - (List) An user editable metadata for the variables. - Nested scheme for **metadata**: - * `aliases` - (List) The list of aliases for the variable name. - * `cloud_data_type` - (String) Cloud data type of the variable. eg. resource_group_id, region, vpc_id. - * `default_value` - (String) Default value for the variable only if the override value is not specified. - * `description` - (String) The description of the meta data. - * `group_by` - (String) The display name of the group this variable belongs to. - * `hidden` - (Boolean) If **true**, the variable is not displayed on UI or Command line. - * `immutable` - (Boolean) Is the variable readonly ?. - * `link_status` - (String) The status of the link. - * Constraints: Allowable values are: `normal`, `broken`. - * `matches` - (String) The regex for the variable value. - * `max_length` - (Integer) The maximum length of the variable value. Applicable for the string type. - * `max_value` - (Integer) The maximum value of the variable. Applicable for the integer type. - * `min_length` - (Integer) The minimum length of the variable value. Applicable for the string type. - * `min_value` - (Integer) The minimum value of the variable. Applicable for the integer type. - * `options` - (List) The list of possible values for this variable. If type is **integer** or **date**, then the array of string is converted to array of integers or date during the runtime. - * `position` - (Integer) The relative position of this variable in a list. - * `required` - (Boolean) If the variable required?. - * `secure` - (Boolean) Is the variable secure or sensitive ?. - * `source` - (String) The source of this meta-data. - * `type` - (String) Type of the variable. - * Constraints: Allowable values are: `boolean`, `string`, `integer`, `date`, `array`, `list`, `map`, `complex`, `link`. - * `name` - (String) The name of the variable. For example, `name = "inventory username"`. - * `use_default` - (Boolean) True, will ignore the data in the value attribute, instead the data in metadata.default_value will be used. - * `value` - (String) The value for the variable or reference to the value. For example, `value = ""`. **Note** The SSH key should contain `\n` at the end of the key details in case of command line or API calls. - * `agent_kpi` - (List) Schematics Agent key performance indicators. Nested scheme for **agent_kpi**: * `application_indicators` - (List) Agent application key performance indicators. diff --git a/website/docs/d/schematics_agents.html.markdown b/website/docs/d/schematics_agents.html.markdown index 08f7532d09..14b0034b40 100644 --- a/website/docs/d/schematics_agents.html.markdown +++ b/website/docs/d/schematics_agents.html.markdown @@ -44,7 +44,7 @@ Nested scheme for **agents**: * `id` - (String) The Agent registration id. * `location` - (String) List of locations supported by IBM Cloud Schematics service. While creating your workspace or action, choose the right region, since it cannot be changed. Note, this does not limit the location of the IBM Cloud resources, provisioned using Schematics. * Constraints: Allowable values are: `us-south`, `us-east`, `eu-gb`, `eu-de`. - * `name` - (String) The name of the agent (must be unique, for an account). + * `name` - (String) The name of the agent. * `profile_id` - (String) The IAM trusted profile id, used by the Agent instance. * `registered_at` - (String) The Agent registration date-time. * `registered_by` - (String) The email address of an user who registered the Agent. diff --git a/website/docs/d/schematics_workspace.html.markdown b/website/docs/d/schematics_workspace.html.markdown index 7b5e7aa29c..2f21acc368 100644 --- a/website/docs/d/schematics_workspace.html.markdown +++ b/website/docs/d/schematics_workspace.html.markdown @@ -45,6 +45,11 @@ Nested scheme for **catalog_ref**: * `item_url` - (String) The URL to the software template in the IBM Cloud catalog. * `launch_url` - (String) The URL to the dashboard to access your software. * `offering_version` - (String) The version of the software template that you chose to install from the IBM Cloud catalog. + * `service_extensions` - (List) List of service data +Nested scheme for **service_extensions**: + * `name` - (String) Name of the Service Data. + * `value` - (String) Value of the Service Data. + * `type` - (String) Type of the value string, int, bool. * `created_at` - (String) The timestamp when the workspace was created. @@ -105,7 +110,7 @@ Nested scheme for **env_values**: Nested scheme for **values_metadata**: * `aliases` - (List) The list of aliases for the variable name. * `cloud_data_type` - (String) Cloud data type of the variable. eg. resource_group_id, region, vpc_id. - * `default_value` - (String) Default value for the variable only if the override value is not specified. + * `default` - (String) Default value for the variable only if the override value is not specified. * `description` - (String) The description of the meta data. * `group_by` - (String) The display name of the group this variable belongs to. * `hidden` - (Boolean) If **true**, the variable is not displayed on UI or Command line. @@ -117,13 +122,25 @@ Nested scheme for **env_values**: * `max_value` - (Integer) The maximum value of the variable. Applicable for the integer type. * `min_length` - (Integer) The minimum length of the variable value. Applicable for the string type. * `min_value` - (Integer) The minimum value of the variable. Applicable for the integer type. + * `name` - (String) Name of the variable. * `options` - (List) The list of possible values for this variable. If type is **integer** or **date**, then the array of string is converted to array of integers or date during the runtime. * `position` - (Integer) The relative position of this variable in a list. * `required` - (Boolean) If the variable required?. * `secure` - (Boolean) Is the variable secure or sensitive ?. * `source` - (String) The source of this meta-data. + * `value` - (String) The value of the variable. Applicable for the integer type. + * `type` - (String) Type of the variable. + * Constraints: Allowable values are: `boolean`, `string`, `integer`, `date`, `array`, `list`, `map`, `complex`, `link`. + * `metadata` - (List) List of service data + Nested scheme for **metadata**: + * `default_value` - (String) Default value for the variable only if the override value is not specified. + * `description` - (String) The description of the meta data. + * `hidden` - (Boolean) If **true**, the variable is not displayed on UI or Command line. + * `options` - (List) The list of possible values for this variable. If type is **integer** or **date**, then the array of string is converted to array of integers or date during the runtime. + * `required` - (Boolean) If the variable required?. + * `secure` - (Boolean) Is the variable secure or sensitive ?. * `type` - (String) Type of the variable. - * Constraints: Allowable values are: `boolean`, `string`, `integer`, `date`, `array`, `list`, `map`, `complex`, `link`. + * Constraints: Allowable values are: `boolean`, `string`, `integer`, `date`, `array`, `list`, `map`, `complex`, `link`. * `template_inputs` - (List) Information about the input variables that your template uses. Nested scheme for **variablestore**: diff --git a/website/docs/r/code_engine_job.html.markdown b/website/docs/r/code_engine_job.html.markdown index 50c1847ae5..092a91a37b 100644 --- a/website/docs/r/code_engine_job.html.markdown +++ b/website/docs/r/code_engine_job.html.markdown @@ -58,7 +58,7 @@ Nested scheme for **run_env_variables**: * Constraints: The default value is `literal`. Allowable values are: `literal`, `config_map_full_reference`, `secret_full_reference`, `config_map_key_reference`, `secret_key_reference`. The value must match regular expression `/^(literal|config_map_full_reference|secret_full_reference|config_map_key_reference|secret_key_reference)$/`. * `value` - (Optional, String) The literal value of the environment variable. * Constraints: The maximum length is `253` characters. The minimum length is `1` character. The value must match regular expression `/^[\\-._a-zA-Z0-9]+$/`. -* `run_mode` - (Optional, String) The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `max_execution_time` and `retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `max_execution_time` and `retry_limit` properties are not allowed. +* `run_mode` - (Optional, String) The mode for runs of the job. Valid values are `task` and `daemon`. In `task` mode, the `scale_max_execution_time` and `scale_retry_limit` properties apply. In `daemon` mode, since there is no timeout and failed instances are restarted indefinitely, the `scale_max_execution_time` and `scale_retry_limit` properties are not allowed. * Constraints: The default value is `task`. Allowable values are: `task`, `daemon`. The minimum length is `0` characters. The value must match regular expression `/^(task|daemon)$/`. * `run_service_account` - (Optional, String) The name of the service account. For built-in service accounts, you can use the shortened names `manager`, `none`, `reader`, and `writer`. This property must not be set on a job run, which references a job template. * Constraints: The default value is `default`. Allowable values are: `default`, `manager`, `reader`, `writer`, `none`. The minimum length is `0` characters. The value must match regular expression `/^(manager|reader|writer|none|default)$/`. diff --git a/website/docs/r/container_cluster.html.markdown b/website/docs/r/container_cluster.html.markdown index 0857c6e2eb..3e93cde3d7 100644 --- a/website/docs/r/container_cluster.html.markdown +++ b/website/docs/r/container_cluster.html.markdown @@ -204,12 +204,13 @@ Review the argument references that you can specify for your resource. - `hardware` - (Optional, Forces new resource, String) The level of hardware isolation for your worker node. Use `dedicated` to have available physical resources dedicated to you only, or `shared` to allow physical resources to be shared with other IBM customers. This option is available for virtual machine worker node flavors only. - `image_security_enforcement` - (Optional, Bool) Set to **true** to enable image security enforcement policies in a cluster. - `gateway_enabled` - (Optional, Bool) Set to **true** if you want to automatically create a gateway-enabled cluster. If `gateway_enabled` is set to **true**, then `private_service_endpoint` must be set to **true** at the same time. -- `kms_config` - (Optional, List) Used to attach a Key Protect instance to a cluster. Nested `kms_config` block have `instance_id`, `crk_id`, `private_endpoint` structure. +- `kms_config` - (Optional, List) Used to attach a Key Protect instance to a cluster. Nested `kms_config` block has an `instance_id`, `crk_id`, `private_endpoint` and `account_id`. Nested scheme for `kms_config`: - `crk_id` - (Optional, String) The ID of the customer root key (CRK). - `instance_id` - (Optional, String) The GUID of the Key Protect instance. - `private_endpoint` - (Optional, Bool) Set to **true** to configure the KMS private service endpoint. Default value is **false**. + - `account_id` - (Optional, String) Account ID of KMS instance holder - if not provided, defaults to the account in use. - `kube_version` - (Optional, String) The Kubernetes or OpenShift version that you want to set up in your cluster. If the version is not specified, the default version in [IBM Cloud Kubernetes Service](https://cloud.ibm.com/docs/containers?topic=containers-cs_versions) or [Red Hat OpenShift on IBM Cloud](https://cloud.ibm.com/docs/openshift?topic=openshift-openshift_versions#version_types) is used. For example, to specify Kubernetes version 1.16, enter `1.16`. For OpenShift clusters, you can specify version `3.11_openshift` or `4.3.1_openshift`. - `labels`- (Optional, Map) Labels on all the workers in the default worker pool. - `machine_type` - (Optional, Forces new resource, String) The machine type for your worker node. The machine type determines the amount of memory, CPU, and disk space that is available to the worker node. For an overview of supported machine types, see [Planning your worker node setup](https://cloud.ibm.com/docs/containers?topic=containers-planning_worker_nodes). You can retrieve the value by executing the `ibmcloud ks machine-types ` command in the IBM Cloud CLI. diff --git a/website/docs/r/container_vpc_cluster.html.markdown b/website/docs/r/container_vpc_cluster.html.markdown index ae738215c6..76c36336b5 100644 --- a/website/docs/r/container_vpc_cluster.html.markdown +++ b/website/docs/r/container_vpc_cluster.html.markdown @@ -178,13 +178,14 @@ Review the argument references that you can specify for your resource. - `flavor` - (Required, Forces new resource, String) The flavor of the VPC worker node that you want to use. - `image_security_enforcement` - (Optional, Bool) Set to **true** to enable image security enforcement policies in a cluster. - `name` - (Required, Forces new resource, String) The name of the cluster. -- `kms_config` - (Optional, String) Use to attach a Key Protect instance to a cluster. Nested `kms_config` block has an `instance_id`, `crk_id`, `private_endpoint`. -- `host_pool_id` - (Optional, String) If provided, the cluster will be associated with a dedicated host pool identified by this ID. +- `kms_config` - (Optional, String) Use to attach a Key Protect instance to a cluster. Nested `kms_config` block has an `instance_id`, `crk_id`, `private_endpoint` and `account_id`. Nested scheme for `kms_config`: - `crk_id` - (Optional, String) The ID of the customer root key (CRK). - `instance_id` - (Optional, String) The GUID of the Key Protect instance. - `private_endpoint` - (Optional, Bool) Set **true** to configure the KMS private service endpoint. Default value is **false**. + - `account_id` - (Optional, String) Account ID of KMS instance holder - if not provided, defaults to the account in use. +- `host_pool_id` - (Optional, String) If provided, the cluster will be associated with a dedicated host pool identified by this ID. - `kube_version` - (Optional, String) Specify the Kubernetes version, including the major.minor version. If you do not include this flag, the default version is used. To see available versions, run `ibmcloud ks versions`. - `operating_system` - (Optional, Forces new resource, String) The operating system of the workers in the default worker pool. For supported options, see [Red Hat OpenShift on IBM Cloud version information](https://cloud.ibm.com/docs/openshift?topic=openshift-openshift_versions) or [IBM Cloud Kubernetes Service version information](https://cloud.ibm.com/docs/containers?topic=containers-cs_versions). - `secondary_storage` - (Optional, Forces new resource, String) The secondary storage option for the default worker pool. @@ -213,9 +214,9 @@ Review the argument references that you can specify for your resource. - `name` - (Required, Forces new resource, String) The zone name for the default worker pool in a multizone cluster. - `subnet_id` - (Required, Forces new resource, String) The VPC subnet to assign the cluster's default worker pool. -- `crk` - Root Key ID for boot volume encryption. -- `kms_instance_id` - Instance ID for boot volume encryption. -- `kms_account_id` - Account ID for boot volume encryption, if other account is providing the kms. +- `crk` - (Optional, String) Root Key ID for boot volume encryption. +- `kms_instance_id` - (Optional, String) Instance ID for boot volume encryption. +- `kms_account_id` - (Optional, String) Account ID for boot volume encryption, if other account is providing the kms. **Note** diff --git a/website/docs/r/pi_workspace.html.markdown b/website/docs/r/pi_workspace.html.markdown new file mode 100644 index 0000000000..b17e5ca2a4 --- /dev/null +++ b/website/docs/r/pi_workspace.html.markdown @@ -0,0 +1,49 @@ +--- + +subcategory: "Power Systems" +layout: "ibm" +page_title: "IBM: pi_workspace" +description: |- + Manages a workspace in the Power Virtual Server cloud. +--- + +# ibm_pi_workspace + +Create or Delete a PowerVS Workspace + +## Example usage + +```terraform +data "ibm_resource_group" "group" { + name = "test" +} + +resource "ibm_pi_workspace" "powervs_service_instance" { + pi_name = "test-name" + pi_datacenter = "us-east" + pi_resource_group_id = data.ibm_resource_group.group.id + pi_plan = "public" +} +``` + +## Notes + +- Please find [supported Regions](https://cloud.ibm.com/apidocs/power-cloud#endpoint) for endpoints. +- If a Power cloud instance is provisioned at `lon04`, The provider level attributes should be as follows: + - `region` - `lon` + - `zone` - `lon04` + +## Argument reference + +Review the argument references that you can specify for your resource. + +- `pi_name` - (Required, String) A descriptive name used to identify the workspace. +- `pi_datacenter` - (Required, String) Target location or environment to create the resource instance. +- `pi_resource_group_id` - (Required, String) The ID of the resource group where you want to create the workspace. You can retrieve the value from data source `ibm_resource_group`. +- `pi_plan` - (Required, String) Plan associated with the offering; Valid values are `public` or `private`. + +## Attribute reference + +In addition to all argument reference listed, you can access the following attribute references after your resource source is created. + +- `id` - (String) Workspace ID. \ No newline at end of file diff --git a/website/docs/r/project.html.markdown b/website/docs/r/project.html.markdown index 98926aaffd..b447a1d627 100644 --- a/website/docs/r/project.html.markdown +++ b/website/docs/r/project.html.markdown @@ -31,13 +31,13 @@ You can specify the following arguments for this resource. * `definition` - (Required, List) The definition of the project. Nested schema for **definition**: * `description` - (Optional, String) A brief explanation of the project's use in the configuration of a deployable architecture. It is possible to create a project without providing a description. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. * `destroy_on_delete` - (Required, Boolean) The policy that indicates whether the resources are destroyed or not when a project is deleted. - * `name` - (Required, String) The name of the project. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. + * `name` - (Required, String) The name of the project. It is unique within the account across regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. * `location` - (Required, Forces new resource, String) The IBM Cloud location where a resource is deployed. * Constraints: The maximum length is `64` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]*$/`. -* `resource_group` - (Required, Forces new resource, String) The resource group where the project's data and tools are created. +* `resource_group` - (Required, Forces new resource, String) The resource group name where the project's data and tools are created. * Constraints: The maximum length is `64` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]*$/`. ## Attribute Reference @@ -46,15 +46,15 @@ After your resource is created, you can read values from the listed arguments an * `id` - The unique identifier of the project. * `configs` - (List) The project configurations. These configurations are only included in the response of creating a project if a configs array is specified in the request payload. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `100` items. The minimum length is `0` items. Nested schema for **configs**: * `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `definition` - (List) The name and description of a project configuration. Nested schema for **definition**: * `description` - (String) A project configuration description. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. - * `name` - (String) The configuration name. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `name` - (String) The configuration name. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. * `href` - (String) A URL. * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(http(s)?:\/\/)[a-zA-Z0-9\\$\\-_\\.+!\\*'\\(\\),=&?\/]+$/`. * `id` - (String) The ID of the configuration. If this parameter is empty, an ID is automatically created for the configuration. @@ -63,7 +63,7 @@ Nested schema for **configs**: * `project` - (List) The project referenced by this resource. Nested schema for **project**: * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `definition` - (List) The definition of the project reference. Nested schema for **definition**: * `name` - (String) The name of the project. @@ -77,9 +77,9 @@ Nested schema for **configs**: * `version` - (Integer) The version of the configuration. * `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `cumulative_needs_attention_view` - (List) The cumulative list of needs attention items for a project. If the view is successfully retrieved, an array which could be empty is returned. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `50` items. The minimum length is `0` items. Nested schema for **cumulative_needs_attention_view**: * `config_id` - (String) A unique ID for the configuration. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. @@ -91,15 +91,15 @@ Nested schema for **cumulative_needs_attention_view**: * `cumulative_needs_attention_view_error` - (Boolean) True indicates that the fetch of the needs attention items failed. It only exists if there was an error while retrieving the cumulative needs attention view. * Constraints: The default value is `false`. * `environments` - (List) The project environments. These environments are only included in the response if project environments were created on the project. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `20` items. The minimum length is `0` items. Nested schema for **environments**: * `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `definition` - (List) The environment definition used in the project collection. Nested schema for **definition**: * `description` - (String) The description of the environment. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. - * `name` - (String) The name of the environment. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `name` - (String) The name of the environment. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. * `href` - (String) A URL. * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(http(s)?:\/\/)[a-zA-Z0-9\\$\\-_\\.+!\\*'\\(\\),=&?\/]+$/`. * `id` - (String) The environment id as a friendly name. @@ -107,7 +107,7 @@ Nested schema for **environments**: * `project` - (List) The project referenced by this resource. Nested schema for **project**: * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `definition` - (List) The definition of the project reference. Nested schema for **definition**: * `name` - (String) The name of the project. @@ -118,15 +118,17 @@ Nested schema for **environments**: * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. * `event_notifications_crn` - (String) The CRN of the event notifications instance if one is connected to this project. * Constraints: The maximum length is `512` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. +* `resource_group_id` - (String) The resource group id where the project's data and tools are created. + * Constraints: The maximum length is `64` characters. The minimum length is `0` characters. The value must match regular expression `/^[0-9a-zA-Z]+$/`. * `state` - (String) The project status value. * Constraints: Allowable values are: `ready`, `deleting`, `deleting_failed`. ## Import -You can import the `ibm_project` resource by using `id`. The unique ID. +You can import the `ibm_project` resource by using `id`. The unique project ID. # Syntax -``` -$ terraform import ibm_project.project -``` +
+$ terraform import ibm_project.project <id>
+
diff --git a/website/docs/r/project_config.html.markdown b/website/docs/r/project_config.html.markdown index db20dac197..995dfa3570 100644 --- a/website/docs/r/project_config.html.markdown +++ b/website/docs/r/project_config.html.markdown @@ -16,7 +16,6 @@ Create, update, and delete project_configs with this resource. resource "ibm_project_config" "project_config_instance" { definition { name = "static-website-dev" - labels = [ "env:dev", "billing:internal" ] description = "Website - development" authorizations { method = "api_key" @@ -39,7 +38,7 @@ resource "ibm_project_config" "project_config_instance" { You can specify the following arguments for this resource. -* `definition` - (Required, List) The type and output of a project configuration. +* `definition` - (Required, List) The name and description of a project configuration. Nested schema for **definition**: * `authorizations` - (Optional, List) The authorization details. You can authorize by using a trusted profile or an API key in Secrets Manager. Nested schema for **authorizations**: @@ -51,34 +50,80 @@ Nested schema for **definition**: * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. * `compliance_profile` - (Optional, List) The profile required for compliance. Nested schema for **compliance_profile**: - * `attachment_id` - (Optional, String) The unique ID. + * `attachment_id` - (Optional, String) A unique ID for the attachment to a compliance profile. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. - * `id` - (Optional, String) The unique ID. + * `id` - (Optional, String) The unique ID for that compliance profile. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. - * `instance_id` - (Optional, String) The unique ID. + * `instance_id` - (Optional, String) A unique ID for an instance of a compliance profile. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. * `instance_location` - (Optional, String) The location of the compliance instance. * Constraints: The maximum length is `12` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(us-south|us-east|eu-gb|eu-de)$/`. * `profile_name` - (Optional, String) The name of the compliance profile. * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^`<>\\x00-\\x1F]*$/`. * `description` - (Optional, String) A project configuration description. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. - * `environment` - (Optional, String) The ID of the project environment. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `environment_id` - (Optional, String) The ID of the project environment. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. * `inputs` - (Optional, List) The input variables for configuration definition and environment. Nested schema for **inputs**: - * `locator_id` - (Required, Forces new resource, String) A dotted value of catalogID.versionID. + * `locator_id` - (Required, Forces new resource, String) A unique concatenation of catalogID.versionID that identifies the DA in the catalog. * Constraints: The maximum length is `512` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[\\.0-9a-z-A-Z_-]+$/`. - * `name` - (Required, String) The configuration name. - * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. + * `name` - (Required, String) The configuration name. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9][a-zA-Z0-9-_ ]*$/`. * `settings` - (Optional, List) Schematics environment variables to use to deploy the configuration.Settings are only available if they were specified when the configuration was initially created. Nested schema for **settings**: - * `type` - (Computed, String) The type of a project configuration manual property. - * Constraints: Allowable values are: `terraform_template`, `schematics_blueprint`. * `project_id` - (Required, Forces new resource, String) The unique project ID. * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. -* `schematics` - (Optional, List) A schematics workspace associated to a project configuration. +* `schematics` - (Optional, List) A schematics workspace associated to a project configuration, with scripts. Nested schema for **schematics**: + * `deploy_post_script` - (Optional, List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **deploy_post_script**: + * `path` - (Computed, String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (Computed, String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (Computed, String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `deploy_pre_script` - (Optional, List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **deploy_pre_script**: + * `path` - (Computed, String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (Computed, String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (Computed, String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `undeploy_post_script` - (Optional, List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **undeploy_post_script**: + * `path` - (Computed, String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (Computed, String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (Computed, String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `undeploy_pre_script` - (Optional, List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **undeploy_pre_script**: + * `path` - (Computed, String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (Computed, String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (Computed, String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `validate_post_script` - (Optional, List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **validate_post_script**: + * `path` - (Computed, String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (Computed, String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (Computed, String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. + * `validate_pre_script` - (Optional, List) A script to be run as part of a Project configuration, for a given stage (pre, post) and action (validate, deploy, undeploy). + Nested schema for **validate_pre_script**: + * `path` - (Computed, String) The path to this script within the current version source. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^\\S+$/`. + * `short_description` - (Computed, String) The short description for this script. + * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `type` - (Computed, String) The type of the script. + * Constraints: The maximum length is `7` characters. The minimum length is `7` characters. The value must match regular expression `/^(ansible)$/`. * `workspace_crn` - (Optional, String) An existing schematics workspace CRN. * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. @@ -92,19 +137,19 @@ After your resource is created, you can read values from the listed arguments an * `last_saved_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `modified_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. * `needs_attention_state` - (List) The needs attention state of a configuration. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `50` items. The minimum length is `0` items. * `outputs` - (List) The outputs of a Schematics template property. - * Constraints: The default value is `[]`. The maximum length is `10000` items. The minimum length is `0` items. + * Constraints: The default value is `[]`. The maximum length is `50` items. The minimum length is `0` items. Nested schema for **outputs**: * `description` - (String) A short explanation of the output value. - * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s).*\\S$/`. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. * `name` - (String) The variable name. * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$).+$/`. * `value` - (String) Can be any value - a string, number, boolean, array, or object. * `project` - (List) The project referenced by this resource. Nested schema for **project**: * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. - * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/^crn:v[0-9](:([A-Za-z0-9\\-._~!$&'()*+,;=@\/]|%[0-9A-Z]{2})*){8}$/`. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. * `definition` - (List) The definition of the project reference. Nested schema for **definition**: * `name` - (String) The name of the project. @@ -124,15 +169,15 @@ Nested schema for **project**: ## Import You can import the `ibm_project_config` resource by using `id`. -The `id` property can be formed from `project_id`, and `id` in the following format: +The `id` property can be formed from `project_id`, and `project_config_id` in the following format: -``` -/ -``` +
+<project_id>/<project_config_id>
+
* `project_id`: A string. The unique project ID. -* `id`: A string. The unique config ID. +* `project_config_id`: A string. The ID of the configuration. If this parameter is empty, an ID is automatically created for the configuration. # Syntax -``` -$ terraform import ibm_project_config.project_config / -``` +
+$ terraform import ibm_project_config.project_config <project_id>/<project_config_id>
+
diff --git a/website/docs/r/project_environment.html.markdown b/website/docs/r/project_environment.html.markdown new file mode 100644 index 0000000000..f9783845eb --- /dev/null +++ b/website/docs/r/project_environment.html.markdown @@ -0,0 +1,103 @@ +--- +layout: "ibm" +page_title: "IBM : ibm_project_environment" +description: |- + Manages project_environment. +subcategory: "Projects" +--- + +# ibm_project_environment + +Create, update, and delete project_environments with this resource. + +## Example Usage + +```hcl +resource "ibm_project_environment" "project_environment" { + definition { + name = "environment-stage" + description = "environment for stage project" + authorizations { + method = "api_key" + api_key = "" + } + } + project_id = ibm_project.project_instance.id +} +``` + +## Argument Reference + +You can specify the following arguments for this resource. + +* `definition` - (Required, List) The environment definition. +Nested schema for **definition**: + * `authorizations` - (Optional, List) The authorization details. You can authorize by using a trusted profile or an API key in Secrets Manager. + Nested schema for **authorizations**: + * `api_key` - (Optional, String) The IBM Cloud API Key. + * Constraints: The maximum length is `512` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^`<>\\x00-\\x1F]*$/`. + * `method` - (Optional, String) The authorization method. You can authorize by using a trusted profile or an API key in Secrets Manager. + * Constraints: Allowable values are: `api_key`, `trusted_profile`. + * `trusted_profile_id` - (Optional, String) The trusted profile ID. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `compliance_profile` - (Optional, List) The profile required for compliance. + Nested schema for **compliance_profile**: + * `attachment_id` - (Optional, String) A unique ID for the attachment to a compliance profile. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `id` - (Optional, String) The unique ID for that compliance profile. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `instance_id` - (Optional, String) A unique ID for an instance of a compliance profile. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + * `instance_location` - (Optional, String) The location of the compliance instance. + * Constraints: The maximum length is `12` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(us-south|us-east|eu-gb|eu-de)$/`. + * `profile_name` - (Optional, String) The name of the compliance profile. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^`<>\\x00-\\x1F]*$/`. + * `description` - (Optional, String) The description of the environment. + * Constraints: The maximum length is `1024` characters. The minimum length is `0` characters. The value must match regular expression `/^$|^(?!\\s)(?!.*\\s$)[^\\x00-\\x1F]*$/`. + * `inputs` - (Optional, List) The input variables for configuration definition and environment. + Nested schema for **inputs**: + * `name` - (Required, String) The name of the environment. It is unique within the account across projects and regions. + * Constraints: The maximum length is `128` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. +* `project_id` - (Required, Forces new resource, String) The unique project ID. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. + +## Attribute Reference + +After your resource is created, you can read values from the listed arguments and the following attributes. + +* `id` - The unique identifier of the project_environment. +* `created_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. +* `modified_at` - (String) A date and time value in the format YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ, matching the date and time format as specified by RFC 3339. +* `project` - (List) The project referenced by this resource. +Nested schema for **project**: + * `crn` - (String) An IBM Cloud resource name, which uniquely identifies a resource. + * Constraints: The maximum length is `512` characters. The minimum length is `4` characters. The value must match regular expression `/(?!\\s)(?!.*\\s$)^(crn)[^'"`<>{}\\s\\x00-\\x1F]*/`. + * `definition` - (List) The definition of the project reference. + Nested schema for **definition**: + * `name` - (String) The name of the project. + * Constraints: The maximum length is `64` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$)[^'"`<>{}\\x00-\\x1F]+$/`. + * `href` - (String) A URL. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(http(s)?:\/\/)[a-zA-Z0-9\\$\\-_\\.+!\\*'\\(\\),=&?\/]+$/`. + * `id` - (String) The unique ID. + * Constraints: The maximum length is `128` characters. The value must match regular expression `/^[\\.\\-0-9a-zA-Z]+$/`. +* `project_environment_id` - (String) The environment id as a friendly name. + * Constraints: The maximum length is `256` characters. The minimum length is `1` character. The value must match regular expression `/^(?!\\s)(?!.*\\s$).+$/`. +* `target_account` - (String) The target account ID derived from the authentication block values. + * Constraints: The maximum length is `64` characters. The value must match regular expression `/^[a-zA-Z0-9.-]+$/`. + + +## Import + +You can import the `ibm_project_environment` resource by using `id`. +The `id` property can be formed from `project_id`, and `project_environment_id` in the following format: + +
+<project_id>/<project_environment_id>
+
+* `project_id`: A string. The unique project ID. +* `project_environment_id`: A string. The environment id as a friendly name. + +# Syntax +
+$ terraform import ibm_project_environment.project_environment <project_id>/<project_environment_id>
+
diff --git a/website/docs/r/schematics_agent.html.markdown b/website/docs/r/schematics_agent.html.markdown index af12fb8c26..4b04b38e6a 100644 --- a/website/docs/r/schematics_agent.html.markdown +++ b/website/docs/r/schematics_agent.html.markdown @@ -24,40 +24,6 @@ resource "ibm_schematics_agent" "schematics_agent_instance" { cos_bucket_name = "cos_bucket_name" cos_bucket_region = "cos_bucket_region" } - agent_inputs { - name = "name" - value = "value" - use_default = true - metadata { - type = "boolean" - aliases = [ "aliases" ] - description = "description" - cloud_data_type = "cloud_data_type" - default_value = "default_value" - link_status = "normal" - secure = true - immutable = true - hidden = true - required = true - options = [ "options" ] - min_value = 1 - max_value = 1 - min_length = 1 - max_length = 1 - matches = "matches" - position = 1 - group_by = "group_by" - source = "source" - } - link = "link" - } - agent_kpi { - availability_indicator = "available" - lifecycle_indicator = "consistent" - percent_usage_indicator = "percent_usage_indicator" - application_indicators = [ null ] - infra_indicators = [ null ] - } agent_location = "us-south" agent_metadata { name = "purpose" @@ -67,12 +33,7 @@ resource "ibm_schematics_agent" "schematics_agent_instance" { name = "MyDevAgent" resource_group = "Default" schematics_location = "us-south" - user_state { - state = "enable" - set_by = "set_by" - set_at = "2021-01-31T09:44:12Z" - } - version = "v1.0.0" + version = "1.0.0-beta2" } ``` @@ -89,35 +50,6 @@ Nested scheme for **agent_infrastructure**: * `cos_instance_name` - (Optional, String) The COS instance name to store the agent logs. * `infra_type` - (Optional, String) Type of target agent infrastructure. * Constraints: Allowable values are: `ibm_kubernetes`, `ibm_openshift`, `ibm_satellite`. -* `agent_inputs` - (Optional, List) Additional input variables for the agent. -Nested scheme for **agent_inputs**: - * `link` - (Computed, String) The reference link to the variable value By default the expression points to `$self.value`. - * `metadata` - (Optional, List) An user editable metadata for the variables. - Nested scheme for **metadata**: - * `aliases` - (Optional, List) The list of aliases for the variable name. - * `cloud_data_type` - (Optional, String) Cloud data type of the variable. eg. resource_group_id, region, vpc_id. - * `default_value` - (Optional, String) Default value for the variable only if the override value is not specified. - * `description` - (Optional, String) The description of the meta data. - * `group_by` - (Optional, String) The display name of the group this variable belongs to. - * `hidden` - (Optional, Boolean) If **true**, the variable is not displayed on UI or Command line. - * `immutable` - (Optional, Boolean) Is the variable readonly ?. - * `link_status` - (Optional, String) The status of the link. - * Constraints: Allowable values are: `normal`, `broken`. - * `matches` - (Optional, String) The regex for the variable value. - * `max_length` - (Optional, Integer) The maximum length of the variable value. Applicable for the string type. - * `max_value` - (Optional, Integer) The maximum value of the variable. Applicable for the integer type. - * `min_length` - (Optional, Integer) The minimum length of the variable value. Applicable for the string type. - * `min_value` - (Optional, Integer) The minimum value of the variable. Applicable for the integer type. - * `options` - (Optional, List) The list of possible values for this variable. If type is **integer** or **date**, then the array of string is converted to array of integers or date during the runtime. - * `position` - (Optional, Integer) The relative position of this variable in a list. - * `required` - (Optional, Boolean) If the variable required?. - * `secure` - (Optional, Boolean) Is the variable secure or sensitive ?. - * `source` - (Optional, String) The source of this meta-data. - * `type` - (Optional, String) Type of the variable. - * Constraints: Allowable values are: `boolean`, `string`, `integer`, `date`, `array`, `list`, `map`, `complex`, `link`. - * `name` - (Optional, String) The name of the variable. For example, `name = "inventory username"`. - * `use_default` - (Optional, Boolean) True, will ignore the data in the value attribute, instead the data in metadata.default_value will be used. - * `value` - (Optional, String) The value for the variable or reference to the value. For example, `value = ""`. **Note** The SSH key should contain `\n` at the end of the key details in case of command line or API calls. * `agent_kpi` - (Optional, List) Schematics Agent key performance indicators. Nested scheme for **agent_kpi**: * `application_indicators` - (Optional, List) Agent application key performance indicators. @@ -144,7 +76,7 @@ Nested scheme for **user_state**: * `set_by` - (Computed, String) Name of the User who set the state of the Object. * `state` - (Optional, String) User-defined states * `enable` Agent is enabled by the user. * `disable` Agent is disbaled by the user. * Constraints: Allowable values are: `enable`, `disable`. -* `version` - (Required, String) Agent version. +* `version` - (Required, String) Agent version. Available Versions are 1.0.0-beta1, 1.0.0-beta2 ## Attribute Reference diff --git a/website/docs/r/schematics_workspace.html.markdown b/website/docs/r/schematics_workspace.html.markdown index 69d51cd954..4e3a390a4c 100644 --- a/website/docs/r/schematics_workspace.html.markdown +++ b/website/docs/r/schematics_workspace.html.markdown @@ -67,7 +67,7 @@ Nested scheme for **shared_data**: Nested scheme for **template_values_metadata**: * `aliases` - (Optional, List) The list of aliases for the variable name. * `cloud_data_type` - (Optional, String) Cloud data type of the variable. eg. resource_group_id, region, vpc_id. - * `default_value` - (Optional, String) Default value for the variable only if the override value is not specified. + * `default` - (Optional, String) Default value for the variable only if the override value is not specified. * `description` - (Optional, String) The description of the meta data. * `group_by` - (Optional, String) The display name of the group this variable belongs to. * `hidden` - (Optional, Boolean) If **true**, the variable is not displayed on UI or Command line. @@ -79,6 +79,7 @@ Nested scheme for **template_values_metadata**: * `max_value` - (Optional, Integer) The maximum value of the variable. Applicable for the integer type. * `min_length` - (Optional, Integer) The minimum length of the variable value. Applicable for the string type. * `min_value` - (Optional, Integer) The minimum value of the variable. Applicable for the integer type. + * `name` - (String) Name of the variable. * `options` - (Optional, List) The list of possible values for this variable. If type is **integer** or **date**, then the array of string is converted to array of integers or date during the runtime. * `position` - (Optional, Integer) The relative position of this variable in a list. * `required` - (Optional, Boolean) If the variable required?.