Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PLT-1454: Added User Management support in terraform #538

Merged
merged 13 commits into from
Nov 18, 2024
42 changes: 42 additions & 0 deletions docs/data-sources/team.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "spectrocloud_team Data Source - terraform-provider-spectrocloud"
subcategory: ""
description: |-

---

# spectrocloud_team (Data Source)



## Example Usage

```terraform
data "spectrocloud_team" "team1" {
name = "team2"

# (alternatively)
# id = "5fd0ca727c411c71b55a359c"
}

output "team-id" {
value = data.spectrocloud_team.team1.id
}

output "team-role-ids" {
value = data.spectrocloud_team.team1.role_ids
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Optional

- `id` (String) The unique ID of the team. If provided, `name` cannot be used.
- `name` (String) The name of the team. If provided, `id` cannot be used.

### Read-Only

- `role_ids` (List of String) The roles id's assigned to the team.
157 changes: 157 additions & 0 deletions docs/resources/user.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
---
page_title: "spectrocloud_user Resource - terraform-provider-spectrocloud"
subcategory: ""
description: |-
Create and manage projects in Palette.
---

# spectrocloud_user (Resource)

Create and manage projects in Palette.

You can learn more about managing users in Palette by reviewing the [Users](https://docs.spectrocloud.com/user-management/) guide.

## Example Usage

An example of creating a user resource with assigned teams and custom roles in Palette.

```hcl
resource "spectrocloud_user" "user-test"{
first_name = "tf"
last_name = "test"
email = "[email protected]"
team_ids = [data.spectrocloud_team.team2.id]
project_role {
project_id = data.spectrocloud_project.default.id
role_ids = [for r in data.spectrocloud_role.app_roles : r.id]
}
project_role {
project_id = data.spectrocloud_project.ranjith.id
role_ids = [for r in data.spectrocloud_role.app_roles : r.id]
}

tenant_role = [for t in data.spectrocloud_role.tenant_roles : t.id]

workspace_role {
project_id = data.spectrocloud_project.default.id
workspace {
id = data.spectrocloud_workspace.workspace.id
role_ids = [for w in data.spectrocloud_role.workspace_roles : w.id]
}
workspace {
id = data.spectrocloud_workspace.workspace2.id
role_ids = ["66fbea622947f81fc26983e6"]
}
}

resource_role {
project_ids = [data.spectrocloud_project.default.id, data.spectrocloud_project.ranjith.id]
filter_ids = [data.spectrocloud_filter.filter.id]
role_ids = [for r in data.spectrocloud_role.resource_roles : r.id]
}

resource_role {
project_ids = [data.spectrocloud_project.ranjith.id]
filter_ids = [data.spectrocloud_filter.filter.id]
role_ids = [for re in data.spectrocloud_role.resource_roles_editor : re.id]
}

}
```

The example below demonstrates how to create an user with only assigned teams.

```hcl
resource "spectrocloud_user" "user-test"{
first_name = "tf"
last_name = "test"
email = "[email protected]"
team_ids = [data.spectrocloud_team.team2.id]
}


```

### Importing existing user states

```hcl
# import existing user example
import {
to = spectrocloud_user.test_user
id = "{userUID}"
}

# To generate TF configuration.
terraform plan -generate-config-out=test_user.tf

# To import State file
terraform import spectrocloud_user.test_user {userUID}
```


<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `email` (String) The email of the user.
- `first_name` (String) The first name of the user.
- `last_name` (String) The last name of the user.

### Optional

- `project_role` (Block Set) List of project roles to be associated with the user. (see [below for nested schema](#nestedblock--project_role))
- `resource_role` (Block Set) (see [below for nested schema](#nestedblock--resource_role))
- `team_ids` (List of String) The team id's assigned to the user.
- `tenant_role` (Set of String) List of tenant role ids to be associated with the user.
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
- `workspace_role` (Block Set) List of workspace roles to be associated with the user. (see [below for nested schema](#nestedblock--workspace_role))

### Read-Only

- `id` (String) The ID of this resource.

<a id="nestedblock--project_role"></a>
### Nested Schema for `project_role`

Required:

- `project_id` (String) Project id to be associated with the user.
- `role_ids` (Set of String) List of project role ids to be associated with the user.


<a id="nestedblock--resource_role"></a>
### Nested Schema for `resource_role`

Required:

- `filter_ids` (Set of String) List of filter ids.
- `project_ids` (Set of String) Project id's to be associated with the user.
- `role_ids` (Set of String) List of resource role ids to be associated with the user.


<a id="nestedblock--timeouts"></a>
### Nested Schema for `timeouts`

Optional:

- `create` (String)
- `delete` (String)
- `update` (String)


<a id="nestedblock--workspace_role"></a>
### Nested Schema for `workspace_role`

Required:

- `project_id` (String) Project id to be associated with the user.
- `workspace` (Block Set, Min: 1) List of workspace roles to be associated with the user. (see [below for nested schema](#nestedblock--workspace_role--workspace))

<a id="nestedblock--workspace_role--workspace"></a>
### Nested Schema for `workspace_role.workspace`

Required:

- `id` (String) Workspace id to be associated with the user.
- `role_ids` (Set of String) List of workspace role ids to be associated with the user.
14 changes: 14 additions & 0 deletions examples/data-sources/spectrocloud_team/data-source.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
data "spectrocloud_team" "team1" {
name = "team2"

# (alternatively)
# id = "5fd0ca727c411c71b55a359c"
}

output "team-id" {
value = data.spectrocloud_team.team1.id
}

output "team-role-ids" {
value = data.spectrocloud_team.team1.role_ids
}
28 changes: 28 additions & 0 deletions examples/data-sources/spectrocloud_team/providers.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
terraform {
required_providers {
spectrocloud = {
version = ">= 0.1"
source = "spectrocloud/spectrocloud"
}
}
}

variable "sc_host" {
description = "Spectro Cloud Endpoint"
default = "api.spectrocloud.com"
}

variable "sc_api_key" {
description = "Spectro Cloud API key"
}

variable "sc_project_name" {
description = "Spectro Cloud Project (e.g: Default)"
default = "Default"
}

provider "spectrocloud" {
host = var.sc_host
api_key = var.sc_api_key
project_name = var.sc_project_name
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Spectro Cloud credentials
sc_host = "{Enter Spectro Cloud API Host}" #e.g: api.spectrocloud.com (for SaaS)
sc_api_key = "{Enter Spectro Cloud API Key}"
sc_project_name = "{Enter Spectro Cloud Project Name}" #e.g: Default
49 changes: 49 additions & 0 deletions examples/resources/spectrocloud_user/data_source.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@

data "spectrocloud_project" "default" {
name = "Default"
}

data "spectrocloud_project" "ranjith" {
name = "ranjith"
}

data "spectrocloud_role" "app_roles" {
for_each = toset(var.app_role_var)
name = each.key
}

data "spectrocloud_role" "tenant_roles" {
for_each = toset(var.tenant_role_var)
name = each.key
}

data "spectrocloud_workspace" "workspace" {
name = "test-ws-tf"
}

data "spectrocloud_workspace" "workspace2" {
name = "test-ws-2"
}

data "spectrocloud_role" "workspace_roles" {
for_each = toset(var.workspace_role_var)
name = each.key
}

data "spectrocloud_filter" "filter" {
name = "test-tf"
}

data "spectrocloud_role" "resource_roles" {
for_each = toset(var.resource_role_var)
name = each.key
}

data "spectrocloud_role" "resource_roles_editor" {
for_each = toset(var.resource_role_editor_var)
name = each.key
}

data "spectrocloud_team" "team2" {
name = "team2"
}
14 changes: 14 additions & 0 deletions examples/resources/spectrocloud_user/providers.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
terraform {
required_providers {
spectrocloud = {
version = ">= 0.1"
source = "spectrocloud/spectrocloud"
}
}
}

provider "spectrocloud" {
host = var.sc_host
api_key = var.sc_api_key
project_name = var.sc_project_name
}
53 changes: 53 additions & 0 deletions examples/resources/spectrocloud_user/resource.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
resource "spectrocloud_user" "user-test" {
first_name = "tf"
last_name = "test"
email = "[email protected]"
team_ids = [data.spectrocloud_team.team2.id]
project_role {
project_id = data.spectrocloud_project.default.id
role_ids = [for r in data.spectrocloud_role.app_roles : r.id]
}
project_role {
project_id = data.spectrocloud_project.ranjith.id
role_ids = [for r in data.spectrocloud_role.app_roles : r.id]
}

tenant_role = [for t in data.spectrocloud_role.tenant_roles : t.id]

workspace_role {
project_id = data.spectrocloud_project.default.id
workspace {
id = data.spectrocloud_workspace.workspace.id
role_ids = [for w in data.spectrocloud_role.workspace_roles : w.id]
}
workspace {
id = data.spectrocloud_workspace.workspace2.id
role_ids = ["66fbea622947f81fc26983e6"]
}
}

resource_role {
project_ids = [data.spectrocloud_project.default.id, data.spectrocloud_project.ranjith.id]
filter_ids = [data.spectrocloud_filter.filter.id]
role_ids = [for r in data.spectrocloud_role.resource_roles : r.id]
}

resource_role {
project_ids = [data.spectrocloud_project.ranjith.id]
filter_ids = [data.spectrocloud_filter.filter.id]
role_ids = [for re in data.spectrocloud_role.resource_roles_editor : re.id]
}

}

# import existing user example
#import {
# to = spectrocloud_user.test_user
# id = "66fcb5fe19eb6dc880776d59"
#}

# To generate TF configuration.
#terraform plan -generate-config-out=test_user.tf

# To import State file
#terraform import spectrocloud_user.test_user 672c5ae21adfa1c28c9e37c9
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Spectro Cloud credentials
sc_host = "{Enter Spectro Cloud API Host}" #e.g: api.spectrocloud.com (for SaaS)
sc_api_key = "{Enter Spectro Cloud API Key}"
sc_project_name = "{Enter Spectro Cloud Project Name}" #e.g: Default
Loading
Loading