Skip to content

Commit 4bc4065

Browse files
author
Antony Perigault
committed
feat: Add organization role data source
1 parent ab1642e commit 4bc4065

4 files changed

Lines changed: 121 additions & 5 deletions

File tree

awx/data_source_organization.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@ func dataSourceOrganizationsRead(ctx context.Context, d *schema.ResourceData, m
6161
organizations, _, err := client.OrganizationsService.ListOrganizations(params)
6262
if err != nil {
6363
return buildDiagnosticsMessage(
64-
"Get: Fail to fetch Inventory Group",
65-
"Fail to find the group got: %s",
64+
"Get: Fail to fetch organization",
65+
"Fail to find the organization got: %s",
6666
err.Error(),
6767
)
6868
}
6969
if len(organizations) > 1 {
7070
return buildDiagnosticsMessage(
7171
"Get: find more than one Element",
72-
"The Query Returns more than one Group, %d",
72+
"The Query Returns more than one organization, %d",
7373
len(organizations),
7474
)
7575
return diags
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/*
2+
*TBD*
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "awx_organization" "myorg" {
8+
name = "My AWX Org"
9+
...
10+
}
11+
12+
data "awx_organization_role" "org_admins" {
13+
name = "Admin"
14+
organization_id = resource.awx_organization.myorg.id
15+
}
16+
```
17+
18+
*/
19+
package awx
20+
21+
import (
22+
"context"
23+
"strconv"
24+
25+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
26+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
27+
awx "github.com/mrcrilly/goawx/client"
28+
)
29+
30+
func dataSourceOrganizationRole() *schema.Resource {
31+
return &schema.Resource{
32+
ReadContext: dataSourceOrganizationRolesRead,
33+
Schema: map[string]*schema.Schema{
34+
"id": {
35+
Type: schema.TypeInt,
36+
Optional: true,
37+
Computed: true,
38+
},
39+
"name": {
40+
Type: schema.TypeString,
41+
Optional: true,
42+
Computed: true,
43+
},
44+
"organization_id": {
45+
Type: schema.TypeInt,
46+
Required: true,
47+
},
48+
},
49+
}
50+
}
51+
52+
func dataSourceOrganizationRolesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
53+
var diags diag.Diagnostics
54+
client := m.(*awx.AWX)
55+
params := make(map[string]string)
56+
57+
org_id := d.Get("organization_id").(int)
58+
59+
organization, err := client.OrganizationsService.GetOrganizationsByID(org_id, params)
60+
if err != nil {
61+
return buildDiagnosticsMessage(
62+
"Get: Fail to fetch organization role",
63+
"Fail to find the organization role got: %s",
64+
err.Error(),
65+
)
66+
}
67+
68+
roleslist := []*awx.ApplyRole{
69+
organization.SummaryFields.ObjectRoles.AdhocRole,
70+
organization.SummaryFields.ObjectRoles.AdminRole,
71+
organization.SummaryFields.ObjectRoles.ApprovalRole,
72+
organization.SummaryFields.ObjectRoles.AuditorRole,
73+
organization.SummaryFields.ObjectRoles.CredentialAdminRole,
74+
organization.SummaryFields.ObjectRoles.ExecuteRole,
75+
organization.SummaryFields.ObjectRoles.InventoryAdminRole,
76+
organization.SummaryFields.ObjectRoles.JobTemplateAdminRole,
77+
organization.SummaryFields.ObjectRoles.MemberRole,
78+
organization.SummaryFields.ObjectRoles.NotificationAdminRole,
79+
organization.SummaryFields.ObjectRoles.ProjectAdminRole,
80+
organization.SummaryFields.ObjectRoles.ReadRole,
81+
organization.SummaryFields.ObjectRoles.UpdateRole,
82+
organization.SummaryFields.ObjectRoles.UseRole,
83+
organization.SummaryFields.ObjectRoles.WorkflowAdminRole,
84+
}
85+
86+
if roleID, okID := d.GetOk("id"); okID {
87+
id := roleID.(int)
88+
for _, v := range roleslist {
89+
if v != nil && id == v.ID {
90+
d = setOrganizationRoleData(d, v)
91+
return diags
92+
}
93+
}
94+
}
95+
96+
if roleName, okName := d.GetOk("name"); okName {
97+
name := roleName.(string)
98+
99+
for _, v := range roleslist {
100+
if v != nil && name == v.Name {
101+
d = setOrganizationRoleData(d, v)
102+
return diags
103+
}
104+
}
105+
}
106+
107+
return buildDiagnosticsMessage(
108+
"Failed to fetch organization role - Not Found",
109+
"The organization role was not found",
110+
)
111+
}
112+
113+
func setOrganizationRoleData(d *schema.ResourceData, r *awx.ApplyRole) *schema.ResourceData {
114+
d.Set("name", r.Name)
115+
d.SetId(strconv.Itoa(r.ID))
116+
return d
117+
}

awx/data_source_project_role.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,8 @@ func dataSourceProjectRolesRead(ctx context.Context, d *schema.ResourceData, m i
6868
roleslist := []*awx.ApplyRole{
6969
Project.SummaryFields.ObjectRoles.UseRole,
7070
Project.SummaryFields.ObjectRoles.AdminRole,
71-
Project.SummaryFields.ObjectRoles.AdhocRole,
7271
Project.SummaryFields.ObjectRoles.UpdateRole,
7372
Project.SummaryFields.ObjectRoles.ReadRole,
74-
Project.SummaryFields.ObjectRoles.ExecuteRole,
7573
}
7674

7775
if roleID, okID := d.GetOk("id"); okID {

awx/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ func Provider() *schema.Provider {
7171
"awx_inventory_role": dataSourceInventoryRole(),
7272
"awx_job_template": dataSourceJobTemplate(),
7373
"awx_organization": dataSourceOrganization(),
74+
"awx_organization_role": dataSourceOrganizationRole(),
7475
"awx_project": dataSourceProject(),
7576
"awx_project_role": dataSourceProjectRole(),
7677
"awx_workflow_job_template": dataSourceWorkflowJobTemplate(),

0 commit comments

Comments
 (0)