Skip to content

Commit 8c3919c

Browse files
authored
Merge pull request #20 from CruGlobal/add-project-view-resource
feat(project_view): Add project view resource and data source
2 parents 40fb0e5 + a1a3dd5 commit 8c3919c

22 files changed

+789
-13
lines changed

docs/data-sources/project_template.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ data "semaphoreui_project_template" "build" {
5454
- `suppress_success_alerts` (Boolean) Suppress success alerts.
5555
- `survey_vars` (Attributes List) Survey variables. (see [below for nested schema](#nestedatt--survey_vars))
5656
- `vaults` (Attributes List) Ansible Vault Passwords. (see [below for nested schema](#nestedatt--vaults))
57+
- `view_id` (Number) The view ID that the templates belongs to.
5758

5859
<a id="nestedatt--build"></a>
5960
### Nested Schema for `build`

docs/data-sources/project_view.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "semaphoreui_project_view Data Source - semaphoreui"
4+
subcategory: ""
5+
description: |-
6+
The project view data source allows you to read a Views details.
7+
---
8+
9+
# semaphoreui_project_view (Data Source)
10+
11+
The project view data source allows you to read a Views details.
12+
13+
14+
15+
<!-- schema generated by tfplugindocs -->
16+
## Schema
17+
18+
### Required
19+
20+
- `project_id` (Number) The project ID that the template belongs to.
21+
22+
### Optional
23+
24+
- `id` (Number) The view ID. Ensure that one and only one attribute from this collection is set : `id`, `title`.
25+
- `title` (String) Title of the view. Ensure that one and only one attribute from this collection is set : `id`, `title`.
26+
27+
### Read-Only
28+
29+
- `position` (Number) The position of the view in the project.

docs/resources/project_template.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ resource "semaphoreui_project_template" "deploy" {
146146
- `suppress_success_alerts` (Boolean) Suppress success alerts. Value defaults to `false`.
147147
- `survey_vars` (Attributes List) Survey variables. (see [below for nested schema](#nestedatt--survey_vars))
148148
- `vaults` (Attributes List) Ansible Vault Passwords. (see [below for nested schema](#nestedatt--vaults))
149+
- `view_id` (Number) The view ID that the templates belongs to.
149150

150151
### Read-Only
151152

docs/resources/project_view.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "semaphoreui_project_view Resource - semaphoreui"
4+
subcategory: ""
5+
description: |-
6+
The project view resource allows you to manage a Views in a project.
7+
---
8+
9+
# semaphoreui_project_view (Resource)
10+
11+
The project view resource allows you to manage a Views in a project.
12+
13+
## Example Usage
14+
15+
```terraform
16+
resource "semaphoreui_project" "project" {
17+
name = "Example Project"
18+
}
19+
20+
resource "semaphoreui_project_view" "view" {
21+
project_id = semaphoreui_project.project.id
22+
title = "Section A"
23+
position = 0
24+
}
25+
```
26+
27+
<!-- schema generated by tfplugindocs -->
28+
## Schema
29+
30+
### Required
31+
32+
- `position` (Number) The position of the view in the project. Value must be at least 0.
33+
- `project_id` (Number) (ForceNew) The project ID that the template belongs to.
34+
- `title` (String) Title of the view.
35+
36+
### Read-Only
37+
38+
- `id` (Number) The view ID.
39+
40+
## Import
41+
42+
Import is supported using the following syntax:
43+
44+
```shell
45+
# Import ID is specified by the string "project/{project_id}/view/{view_id}".
46+
# - {project_id} is the ID of the project in SemaphoreUI.
47+
# - {view_id} is the ID of the view in SemaphoreUI.
48+
terraform import semaphoreui_project_view.example project/1/view/2
49+
```
50+
Or using `import {}` block in the configuration file:
51+
```hcl
52+
import {
53+
to = semaphoreui_project_view.example
54+
id = "project/1/view/2"
55+
}
56+
```
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Lookup by View ID
2+
data "semaphoreui_project_view" "view" {
3+
project_id = 1
4+
id = 3
5+
}
6+
7+
# Lookup by View Name
8+
data "semaphoreui_project_view" "prod" {
9+
project_id = 1
10+
title = "Prod"
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Import ID is specified by the string "project/{project_id}/view/{view_id}".
2+
# - {project_id} is the ID of the project in SemaphoreUI.
3+
# - {view_id} is the ID of the view in SemaphoreUI.
4+
terraform import semaphoreui_project_view.example project/1/view/2
5+
```
6+
Or using `import {}` block in the configuration file:
7+
```hcl
8+
import {
9+
to = semaphoreui_project_view.example
10+
id = "project/1/view/2"
11+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
resource "semaphoreui_project" "project" {
2+
name = "Example Project"
3+
}
4+
5+
resource "semaphoreui_project_view" "view" {
6+
project_id = semaphoreui_project.project.id
7+
title = "Section A"
8+
position = 0
9+
}

internal/provider/project_template_data_source_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ resource "semaphoreui_project_environment" "test" {
4646
}]
4747
}
4848
49+
resource "semaphoreui_project_view" "test" {
50+
project_id = semaphoreui_project.test.id
51+
title = "Title"
52+
position = 2
53+
}
54+
4955
# Task Template
5056
resource "semaphoreui_project_template" "test" {
5157
project_id = semaphoreui_project.test.id
@@ -59,6 +65,7 @@ resource "semaphoreui_project_template" "test" {
5965
"--help",
6066
"--vvv",
6167
]
68+
view_id = semaphoreui_project_view.test.id
6269
allow_override_args_in_task = true
6370
6471
survey_vars = [{
@@ -178,6 +185,7 @@ func TestAcc_ProjectTemplateDataSource_basicID(t *testing.T) {
178185
resource.TestCheckResourceAttrSet("data.semaphoreui_project_template.test", "environment_id"),
179186
resource.TestCheckResourceAttrSet("data.semaphoreui_project_template.test", "repository_id"),
180187
resource.TestCheckResourceAttrSet("data.semaphoreui_project_template.test", "inventory_id"),
188+
resource.TestCheckResourceAttrSet("data.semaphoreui_project_template.test", "view_id"),
181189
),
182190
},
183191
},
@@ -207,6 +215,7 @@ func TestAcc_ProjectTemplateDataSource_basicName(t *testing.T) {
207215
resource.TestCheckResourceAttrSet("data.semaphoreui_project_template.test", "environment_id"),
208216
resource.TestCheckResourceAttrSet("data.semaphoreui_project_template.test", "repository_id"),
209217
resource.TestCheckResourceAttrSet("data.semaphoreui_project_template.test", "inventory_id"),
218+
resource.TestCheckNoResourceAttr("data.semaphoreui_project_template.test", "view_id"),
210219
),
211220
},
212221
},

internal/provider/project_template_resource.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ func convertProjectTemplateModelToTemplateRequest(ctx context.Context, template
7373
if !template.GitBranch.IsNull() && !template.GitBranch.IsUnknown() {
7474
model.GitBranch = template.GitBranch.ValueString()
7575
}
76+
if !template.ViewID.IsNull() && !template.ViewID.IsUnknown() {
77+
model.ViewID = template.ViewID.ValueInt64Pointer()
78+
}
7679

7780
if len(template.Arguments.Elements()) != 0 {
7881
var arguments []string
@@ -182,6 +185,12 @@ func convertTemplateResponseToProjectTemplateModel(ctx context.Context, request
182185
model.GitBranch = prev.GitBranch
183186
}
184187

188+
if request.ViewID != nil {
189+
model.ViewID = types.Int64PointerValue(request.ViewID)
190+
} else {
191+
model.ViewID = prev.ViewID
192+
}
193+
185194
var arguments []string
186195
if json.Unmarshal([]byte(request.Arguments), &arguments) != nil {
187196
model.Arguments = types.ListNull(types.StringType)

internal/provider/project_template_resource_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,12 @@ resource "semaphoreui_project_environment" "test" {
8787
project_id = semaphoreui_project.test.id
8888
name = "Env-%[1]s"
8989
}
90-
`, nameSuffix)
90+
91+
resource "semaphoreui_project_view" "test" {
92+
project_id = semaphoreui_project.test.id
93+
title = "Test View"
94+
position = 0
95+
}`, nameSuffix)
9196
}
9297

9398
func testAccProjectTemplateConfig(nameSuffix string, extras string) string {
@@ -181,6 +186,7 @@ func TestAcc_ProjectTemplateResource_basic(t *testing.T) {
181186
resource.TestCheckNoResourceAttr("semaphoreui_project_template.test", "vaults"),
182187
resource.TestCheckNoResourceAttr("semaphoreui_project_template.test", "build"),
183188
resource.TestCheckNoResourceAttr("semaphoreui_project_template.test", "deploy"),
189+
resource.TestCheckNoResourceAttr("semaphoreui_project_template.test", "view_id"),
184190

185191
resource.TestCheckResourceAttrSet("semaphoreui_project_template.test", "id"),
186192
resource.TestCheckResourceAttrSet("semaphoreui_project_template.test", "project_id"),
@@ -205,6 +211,7 @@ arguments = [
205211
"--help",
206212
"--verbose",
207213
]
214+
view_id = semaphoreui_project_view.test.id
208215
`),
209216
Check: resource.ComposeAggregateTestCheckFunc(
210217
testAccProjectTemplateExists("semaphoreui_project_template.test", ""),
@@ -229,6 +236,7 @@ arguments = [
229236
resource.TestCheckResourceAttrSet("semaphoreui_project_template.test", "inventory_id"),
230237
resource.TestCheckResourceAttrSet("semaphoreui_project_template.test", "environment_id"),
231238
resource.TestCheckResourceAttrSet("semaphoreui_project_template.test", "repository_id"),
239+
resource.TestCheckResourceAttrSet("semaphoreui_project_template.test", "view_id"),
232240
),
233241
},
234242
// Delete testing

0 commit comments

Comments
 (0)