diff --git a/README.md b/README.md index 26e436923..d00b67106 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,11 @@ Documentation is auto-generated by the [tfplugindocs CLI](https://github.com/has $ make docs ``` +or +```shell +go generate main.go +``` + ## 🤝 Contributions Contributions are welcome! :heart: Please read our [Contributing Guide](CONTRIBUTING.md) for information about how to get involved in this project. diff --git a/docs/data-sources/tenants.md b/docs/data-sources/tenants.md index 46a4cf5aa..28d093d17 100644 --- a/docs/data-sources/tenants.md +++ b/docs/data-sources/tenants.md @@ -42,16 +42,7 @@ Read-Only: - `description` (String) The description of this tenant. - `id` (String) The unique ID for this resource. - `name` (String) The name of this resource. -- `project_environment` (Set of Object) (see [below for nested schema](#nestedatt--tenants--project_environment)) - `space_id` (String) The space ID associated with this resource. - `tenant_tags` (List of String) A list of tenant tags associated with this resource. - -### Nested Schema for `tenants.project_environment` - -Read-Only: - -- `environments` (List of String) -- `project_id` (String) - diff --git a/docs/resources/tenant.md b/docs/resources/tenant.md index 60a2793f8..ba3ce6aa6 100644 --- a/docs/resources/tenant.md +++ b/docs/resources/tenant.md @@ -1,5 +1,4 @@ --- -# generated by https://github.com/hashicorp/terraform-plugin-docs page_title: "octopusdeploy_tenant Resource - terraform-provider-octopusdeploy" subcategory: "" description: |- @@ -10,8 +9,6 @@ description: |- This resource manages tenants in Octopus Deploy. - - ## Schema @@ -24,16 +21,7 @@ This resource manages tenants in Octopus Deploy. - `cloned_from_tenant_id` (String) The ID of the tenant from which this tenant was cloned. - `description` (String) The description of this tenant. - `id` (String) The unique ID for this resource. -- `project_environment` (Block Set) (see [below for nested schema](#nestedblock--project_environment)) - `space_id` (String) The space ID associated with this resource. - `tenant_tags` (List of String) A list of tenant tags associated with this resource. - -### Nested Schema for `project_environment` - -Required: - -- `environments` (List of String) A list of environment IDs associated with this tenant through a project. -- `project_id` (String) The project ID associated with this tenant. - - +~> **NOTE property `project_environment` deprecated:** The `project_environment` property has been replaced by the `octopusdeploy_tenant_project` resource to allow more advanced provisioning scenarioes. \ No newline at end of file diff --git a/docs/resources/tenant_project.md b/docs/resources/tenant_project.md new file mode 100644 index 000000000..f537e8fcc --- /dev/null +++ b/docs/resources/tenant_project.md @@ -0,0 +1,32 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "octopusdeploy_tenant_project Resource - terraform-provider-octopusdeploy" +subcategory: "" +description: |- + This resource represents the connection between tenants and projects. +--- + +# octopusdeploy_tenant_project (Resource) + +This resource represents the connection between tenants and projects. + + + + +## Schema + +### Required + +- `project_id` (String) The project ID associated with this tenant. +- `tenant_id` (String) The tenant ID associated with this tenant. + +### Optional + +- `environment_ids` (List of String) The environment ID associated with this tenant. +- `space_id` (String) The space ID associated with this resource. + +### Read-Only + +- `id` (String) The ID of this resource. + + diff --git a/go.mod b/go.mod index affa1f49d..f9bdcfde4 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.21 require ( github.com/OctopusDeploy/go-octopusdeploy/v2 v2.43.0 - github.com/OctopusSolutionsEngineering/OctopusTerraformTestFramework v0.0.0-20240718055636-f42871b46363 + github.com/OctopusSolutionsEngineering/OctopusTerraformTestFramework v0.0.0-20240725054341-2848f54d101e github.com/google/uuid v1.6.0 github.com/gruntwork-io/terratest v0.41.11 github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637 diff --git a/go.sum b/go.sum index c4124620a..d50b01763 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,8 @@ github.com/Microsoft/hcsshim v0.11.5 h1:haEcLNpj9Ka1gd3B3tAEs9CpE0c+1IhoL59w/exY github.com/Microsoft/hcsshim v0.11.5/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU= github.com/OctopusDeploy/go-octopusdeploy/v2 v2.43.0 h1:fYwGBqG88xy3qHp5j1ySCztdqfw2NLfg2yp0N3XcBYg= github.com/OctopusDeploy/go-octopusdeploy/v2 v2.43.0/go.mod h1:GZmFu6LmN8Yg0tEoZx3ytk9FnaH+84cWm7u5TdWZC6E= -github.com/OctopusSolutionsEngineering/OctopusTerraformTestFramework v0.0.0-20240718055636-f42871b46363 h1:dBe8x8+XwanocHxpPEukOEBt/ubpvnCaobbRqpDGLOw= -github.com/OctopusSolutionsEngineering/OctopusTerraformTestFramework v0.0.0-20240718055636-f42871b46363/go.mod h1:Oq9KbiRNDBB5jFmrwnrgLX0urIqR/1ptY18TzkqXm7M= +github.com/OctopusSolutionsEngineering/OctopusTerraformTestFramework v0.0.0-20240725054341-2848f54d101e h1:FIvWa8wNg8IBG5uVhqkKvcBhaxx4TgN7T8/5Ed4VQUE= +github.com/OctopusSolutionsEngineering/OctopusTerraformTestFramework v0.0.0-20240725054341-2848f54d101e/go.mod h1:Oq9KbiRNDBB5jFmrwnrgLX0urIqR/1ptY18TzkqXm7M= github.com/ProtonMail/go-crypto v1.1.0-alpha.2 h1:bkyFVUP+ROOARdgCiJzNQo2V2kiB97LyUpzH9P6Hrlg= github.com/ProtonMail/go-crypto v1.1.0-alpha.2/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= diff --git a/octopusdeploy/provider.go b/octopusdeploy/provider.go index e26c7a93b..a8fe7131c 100644 --- a/octopusdeploy/provider.go +++ b/octopusdeploy/provider.go @@ -2,6 +2,7 @@ package octopusdeploy import ( "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -96,6 +97,7 @@ func Provider() *schema.Provider { "octopusdeploy_tag_set": resourceTagSet(), "octopusdeploy_team": resourceTeam(), "octopusdeploy_tenant": resourceTenant(), + "octopusdeploy_tenant_project": resourceTenantProject(), "octopusdeploy_tenant_common_variable": resourceTenantCommonVariable(), "octopusdeploy_tenant_project_variable": resourceTenantProjectVariable(), "octopusdeploy_tentacle_certificate": resourceTentacleCertificate(), diff --git a/octopusdeploy/resource_tenant project.go b/octopusdeploy/resource_tenant project.go new file mode 100644 index 000000000..b04d2f6c6 --- /dev/null +++ b/octopusdeploy/resource_tenant project.go @@ -0,0 +1,158 @@ +package octopusdeploy + +import ( + "context" + "log" + "net/http" + "strings" + + "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/client" + "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/core" + "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/tenants" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func resourceTenantProject() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceTenantProjectCreate, + DeleteContext: resourceTenantProjectDelete, + Description: "This resource represents the connection between tenants and projects.", + Importer: getImporter(), + ReadContext: resourceTenantProjectRead, + UpdateContext: resourceTenantProjectUpdate, + Schema: getTenantProjectSchema(), + } +} + +func resourceTenantProjectUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + mutex.Lock() + defer mutex.Unlock() + + client := m.(*client.Client) + k := extractRelationship(d, client) + + log.Printf("[INFO] updating tenant (%#v) connection to project (%#v)", k.tenantID, k.projectID) + + tenant, err := tenants.GetByID(client, k.spaceID, k.tenantID) + if err != nil { + return diag.FromErr(err) + } + + tenant.ProjectEnvironments[k.projectID] = k.environmentIDs + + _, err = tenants.Update(client, tenant) + if err != nil { + return diag.FromErr(err) + } + + log.Printf("[INFO] updated tenant (%s) connection to project (%#v)", k.tenantID, k.projectID) + return nil +} + +func resourceTenantProjectCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + mutex.Lock() + defer mutex.Unlock() + + client := m.(*client.Client) + k := extractRelationship(d, client) + + log.Printf("[INFO] connecting tenant (%#v) to project (%#v)", k.tenantID, k.projectID) + + tenant, err := tenants.GetByID(client, k.spaceID, k.tenantID) + if err != nil { + return diag.FromErr(err) + } + + tenant.ProjectEnvironments[k.projectID] = k.environmentIDs + + _, err = tenants.Update(client, tenant) + if err != nil { + return diag.FromErr(err) + } + + id := k.spaceID + ":" + k.tenantID + ":" + k.projectID + d.SetId(id) + + log.Printf("[INFO] tenant (%s) connected to project (%#v)", k.tenantID, k.projectID) + return nil +} + +func resourceTenantProjectDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + mutex.Lock() + defer mutex.Unlock() + + client := m.(*client.Client) + k := extractRelationship(d, client) + + log.Printf("[INFO] removing tenant (%#v) from project (%#v)", k.tenantID, k.projectID) + + tenant, err := tenants.GetByID(client, k.spaceID, k.tenantID) + if err != nil { + apiError := err.(*core.APIError) + if apiError.StatusCode == http.StatusNotFound { + log.Printf("[INFO] tenant (%#v) no longer exists", k.tenantID) + d.SetId("") + return nil + } + + return diag.FromErr(err) + } + + delete(tenant.ProjectEnvironments, k.projectID) + + _, err = tenants.Update(client, tenant) + if err != nil { + return diag.FromErr(err) + } + + log.Printf("[INFO] tenant (%#v) disconnected from project (%#v)", k.tenantID, k.projectID) + d.SetId("") + return nil +} + +func resourceTenantProjectRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + client := m.(*client.Client) + + bits := strings.Split(d.Id(), ":") + spaceID := bits[0] + tenantID := bits[1] + projectID := bits[2] + + tenant, err := tenants.GetByID(client, spaceID, tenantID) + if err != nil { + apiError := err.(*core.APIError) + if apiError.StatusCode != http.StatusNotFound { + return diag.FromErr(err) + } + } + + d.Set("environment_ids", tenant.ProjectEnvironments[projectID]) + + return nil +} + +func extractRelationship(d *schema.ResourceData, client *client.Client) person { + tenantID := d.Get("tenant_id").(string) + projectID := d.Get("project_id").(string) + + environmentIDs := []string{} + if attr, ok := d.GetOk("environment_ids"); ok { + environmentIDs = getSliceFromTerraformTypeList(attr) + } + + spaceID := client.GetSpaceID() + if v, ok := d.GetOk("space_id"); ok { + spaceID = v.(string) + } + + n := person{tenantID: tenantID, projectID: projectID, environmentIDs: environmentIDs, spaceID: spaceID} + return n +} + +type person struct { + tenantID string + projectID string + environmentIDs []string + spaceID string +} diff --git a/octopusdeploy/resource_tenant.go b/octopusdeploy/resource_tenant.go index c4792434d..49ae9808f 100644 --- a/octopusdeploy/resource_tenant.go +++ b/octopusdeploy/resource_tenant.go @@ -24,6 +24,9 @@ func resourceTenant() *schema.Resource { } func resourceTenantCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + mutex.Lock() + defer mutex.Unlock() + tenant := expandTenant(d) log.Printf("[INFO] creating tenant: %#v", tenant) @@ -45,6 +48,9 @@ func resourceTenantCreate(ctx context.Context, d *schema.ResourceData, m interfa } func resourceTenantDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + mutex.Lock() + defer mutex.Unlock() + log.Printf("[INFO] deleting tenant (%s)", d.Id()) client := m.(*client.Client) @@ -75,6 +81,9 @@ func resourceTenantRead(ctx context.Context, d *schema.ResourceData, m interface } func resourceTenantUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { + mutex.Lock() + defer mutex.Unlock() + log.Printf("[INFO] updating tenant (%s)", d.Id()) tenant := expandTenant(d) diff --git a/octopusdeploy/schema_project_environment.go b/octopusdeploy/schema_project_environment.go deleted file mode 100644 index 2995b486b..000000000 --- a/octopusdeploy/schema_project_environment.go +++ /dev/null @@ -1,40 +0,0 @@ -package octopusdeploy - -import ( - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func expandProjectEnvironments(value interface{}) map[string][]string { - expandedProjectEnvironments := map[string][]string{} - - set := value.(*schema.Set) - for _, item := range set.List() { - projectEnvironment := item.(map[string]interface{}) - projectID := projectEnvironment["project_id"].(string) - environments := []string{} - for _, e := range projectEnvironment["environments"].([]interface{}) { - environments = append(environments, e.(string)) - } - - expandedProjectEnvironments[projectID] = environments - } - - return expandedProjectEnvironments -} - -func flattenProjectEnvironments(projectEnvironments map[string][]string) []interface{} { - if projectEnvironments == nil { - return nil - } - - flattenedProjectEnvironments := []interface{}{} - for projectID, enviroments := range projectEnvironments { - rawProjectEnvironment := map[string]interface{}{ - "project_id": projectID, - "environments": enviroments, - } - flattenedProjectEnvironments = append(flattenedProjectEnvironments, rawProjectEnvironment) - } - - return flattenedProjectEnvironments -} diff --git a/octopusdeploy/schema_tenant.go b/octopusdeploy/schema_tenant.go index a72a4af63..6045f5981 100644 --- a/octopusdeploy/schema_tenant.go +++ b/octopusdeploy/schema_tenant.go @@ -22,10 +22,6 @@ func expandTenant(d *schema.ResourceData) *tenants.Tenant { tenant.Description = v.(string) } - if v, ok := d.GetOk("project_environment"); ok { - tenant.ProjectEnvironments = expandProjectEnvironments(v) - } - if v, ok := d.GetOk("space_id"); ok { tenant.SpaceID = v.(string) } @@ -47,7 +43,6 @@ func flattenTenant(tenant *tenants.Tenant) map[string]interface{} { "description": tenant.Description, "id": tenant.GetID(), "name": tenant.Name, - "project_environment": flattenProjectEnvironments(tenant.ProjectEnvironments), "space_id": tenant.SpaceID, "tenant_tags": tenant.TenantTags, } @@ -89,25 +84,6 @@ func getTenantSchema() map[string]*schema.Schema { "description": getDescriptionSchema("tenant"), "id": getIDSchema(), "name": getNameSchema(true), - "project_environment": { - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "environments": { - Description: "A list of environment IDs associated with this tenant through a project.", - Elem: &schema.Schema{Type: schema.TypeString}, - Required: true, - Type: schema.TypeList, - }, - "project_id": { - Description: "The project ID associated with this tenant.", - Required: true, - Type: schema.TypeString, - }, - }, - }, - Type: schema.TypeSet, - }, "space_id": getSpaceIDSchema(), "tenant_tags": getTenantTagsSchema(), } @@ -118,11 +94,6 @@ func setTenant(ctx context.Context, d *schema.ResourceData, tenant *tenants.Tena d.Set("description", tenant.Description) d.Set("id", tenant.GetID()) d.Set("name", tenant.Name) - - if err := d.Set("project_environment", flattenProjectEnvironments(tenant.ProjectEnvironments)); err != nil { - return fmt.Errorf("error setting project_environment: %s", err) - } - d.Set("space_id", tenant.SpaceID) if err := d.Set("tenant_tags", tenant.TenantTags); err != nil { diff --git a/octopusdeploy/schema_tenant_project_environment.go b/octopusdeploy/schema_tenant_project_environment.go new file mode 100644 index 000000000..0cab0481f --- /dev/null +++ b/octopusdeploy/schema_tenant_project_environment.go @@ -0,0 +1,28 @@ +package octopusdeploy + +import "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + +func getTenantProjectSchema() map[string]*schema.Schema { + return map[string]*schema.Schema{ + "tenant_id": { + Description: "The tenant ID associated with this tenant.", + Required: true, + Type: schema.TypeString, + ForceNew: true, + }, + "project_id": { + Description: "The project ID associated with this tenant.", + Required: true, + Type: schema.TypeString, + ForceNew: true, + }, + "environment_ids": { + Description: "The environment ID associated with this tenant.", + Elem: &schema.Schema{Type: schema.TypeString}, + Optional: true, + Type: schema.TypeList, + Required: false, + }, + "space_id": getSpaceIDSchema(), + } +} diff --git a/octopusdeploy/schema_tenant_test.go b/octopusdeploy/schema_tenant_test.go index 76016001e..0a1d00d18 100644 --- a/octopusdeploy/schema_tenant_test.go +++ b/octopusdeploy/schema_tenant_test.go @@ -31,7 +31,6 @@ func TestFlattenTenant(t *testing.T) { "description": description, "id": id, "name": name, - "project_environment": flattenProjectEnvironments(projectEnvironments), "space_id": spaceID, "tenant_tags": tenantTags, } diff --git a/templates/resources/tenant.md.tmpl b/templates/resources/tenant.md.tmpl new file mode 100644 index 000000000..d144e1f7c --- /dev/null +++ b/templates/resources/tenant.md.tmpl @@ -0,0 +1,14 @@ +--- +page_title: "{{.Name}} {{.Type}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Name}} ({{.Type}}) + +{{ .Description | trimspace }} + +{{ .SchemaMarkdown | trimspace }} + +~> **NOTE property `project_environment` deprecated:** The `project_environment` property has been replaced by the `octopusdeploy_tenant_project` resource to allow more advanced provisioning scenarioes. \ No newline at end of file diff --git a/terraform/24-tenants/tenant.tf b/terraform/24-tenants/tenant.tf index 5637e1def..609dcca2d 100644 --- a/terraform/24-tenants/tenant.tf +++ b/terraform/24-tenants/tenant.tf @@ -3,9 +3,11 @@ resource "octopusdeploy_tenant" "tenant_team_a" { description = "Test tenant" tenant_tags = ["tag1/a", "tag1/b"] depends_on = [octopusdeploy_tag.tag_a, octopusdeploy_tag.tag_b] - - project_environment { - environments = [octopusdeploy_environment.test_environment.id, octopusdeploy_environment.development_environment.id, octopusdeploy_environment.production_environment.id] - project_id = octopusdeploy_project.deploy_frontend_project.id - } } + + +resource "octopusdeploy_tenant_project" "team_a_frontend" { + tenant_id = octopusdeploy_tenant.tenant_team_a.id + project_id = octopusdeploy_project.deploy_frontend_project.id + environment_ids = [octopusdeploy_environment.test_environment.id, octopusdeploy_environment.development_environment.id, octopusdeploy_environment.production_environment.id] +} \ No newline at end of file diff --git a/terraform/25-certificates/tenant.tf b/terraform/25-certificates/tenant.tf index 5637e1def..e88cc53e4 100644 --- a/terraform/25-certificates/tenant.tf +++ b/terraform/25-certificates/tenant.tf @@ -3,9 +3,10 @@ resource "octopusdeploy_tenant" "tenant_team_a" { description = "Test tenant" tenant_tags = ["tag1/a", "tag1/b"] depends_on = [octopusdeploy_tag.tag_a, octopusdeploy_tag.tag_b] - - project_environment { - environments = [octopusdeploy_environment.test_environment.id, octopusdeploy_environment.development_environment.id, octopusdeploy_environment.production_environment.id] - project_id = octopusdeploy_project.deploy_frontend_project.id - } } + +resource "octopusdeploy_tenant_project" "team_a_frontend" { + tenant_id = octopusdeploy_tenant.tenant_team_a.id + project_id = octopusdeploy_project.deploy_frontend_project.id + environment_ids = [octopusdeploy_environment.test_environment.id, octopusdeploy_environment.development_environment.id, octopusdeploy_environment.production_environment.id] +} \ No newline at end of file diff --git a/terraform/26-tenant_variables/tenant.tf b/terraform/26-tenant_variables/tenant.tf index 610f519df..14dde35ec 100644 --- a/terraform/26-tenant_variables/tenant.tf +++ b/terraform/26-tenant_variables/tenant.tf @@ -1,9 +1,10 @@ resource "octopusdeploy_tenant" "tenant_team_a" { name = "Team A" description = "Test tenant" - - project_environment { - environments = [octopusdeploy_environment.test_environment.id, octopusdeploy_environment.development_environment.id, octopusdeploy_environment.production_environment.id] - project_id = octopusdeploy_project.deploy_frontend_project.id - } } + +resource "octopusdeploy_tenant_project" "team_a_frontend" { + tenant_id = octopusdeploy_tenant.tenant_team_a.id + project_id = octopusdeploy_project.deploy_frontend_project.id + environment_ids = [octopusdeploy_environment.test_environment.id, octopusdeploy_environment.development_environment.id, octopusdeploy_environment.production_environment.id] +} \ No newline at end of file diff --git a/terraform/26-tenant_variables/tenant_variables.tf b/terraform/26-tenant_variables/tenant_variables.tf index 28dcd1106..060b4e235 100644 --- a/terraform/26-tenant_variables/tenant_variables.tf +++ b/terraform/26-tenant_variables/tenant_variables.tf @@ -4,6 +4,7 @@ resource "octopusdeploy_tenant_project_variable" "tenantprojectvariable6_team_a" template_id = "${octopusdeploy_project.deploy_frontend_project.template[0].id}" tenant_id = "${octopusdeploy_tenant.tenant_team_a.id}" value = "my value" + depends_on = [ octopusdeploy_tenant_project.team_a_frontend ] } resource "octopusdeploy_tenant_common_variable" "tenantcommonvariable1_team_a" { @@ -11,4 +12,5 @@ resource "octopusdeploy_tenant_common_variable" "tenantcommonvariable1_team_a" { template_id = "${octopusdeploy_library_variable_set.library_variable_set_octopus_variables.template[0].id}" tenant_id = "${octopusdeploy_tenant.tenant_team_a.id}" value = "my value" + depends_on = [ octopusdeploy_tenant_project.team_a_frontend ] } diff --git a/terraform/53-scheduledprojecttrigger/Tenanted.tf b/terraform/53-scheduledprojecttrigger/Tenanted.tf index 601353db9..34bc8b512 100644 --- a/terraform/53-scheduledprojecttrigger/Tenanted.tf +++ b/terraform/53-scheduledprojecttrigger/Tenanted.tf @@ -119,11 +119,13 @@ resource "octopusdeploy_tenant" "tenant_team_a" { space_id = var.octopus_space_id depends_on = [octopusdeploy_tag.tag_a, octopusdeploy_tag.tag_b] +} - project_environment { - environments = [octopusdeploy_environment.env_1.id, octopusdeploy_environment.env_2.id] - project_id = octopusdeploy_project.tenanted.id - } +resource "octopusdeploy_tenant_project" "team_a_tenanted" { + tenant_id = octopusdeploy_tenant.tenant_team_a.id + project_id = octopusdeploy_project.tenanted.id + environment_ids = [octopusdeploy_environment.env_1.id, octopusdeploy_environment.env_2.id] + space_id = var.octopus_space_id } resource "octopusdeploy_tenant" "tenant_team_b" { @@ -132,11 +134,13 @@ resource "octopusdeploy_tenant" "tenant_team_b" { tenant_tags = ["tag1/a", "tag1/b"] space_id = var.octopus_space_id depends_on = [octopusdeploy_tag.tag_a, octopusdeploy_tag.tag_b] +} - project_environment { - environments = [octopusdeploy_environment.env_1.id, octopusdeploy_environment.env_2.id] - project_id = octopusdeploy_project.tenanted.id - } +resource "octopusdeploy_tenant_project" "team_b_tenanted" { + tenant_id = octopusdeploy_tenant.tenant_team_b.id + project_id = octopusdeploy_project.tenanted.id + environment_ids = [octopusdeploy_environment.env_1.id, octopusdeploy_environment.env_2.id] + space_id = var.octopus_space_id } resource "octopusdeploy_project_scheduled_trigger" "tenanted_trigger" {