Skip to content

Commit 70071a3

Browse files
mgatevasaidstNicholas M. Iodice
authored
WIP: Kubernetes service endpoint (#236)
* Added serviceendpoint of type 'kubernetes'. * added further input validation to kubernetes serviceendpoint. * Made argument ca_cert mandatory * Updated documentation and examples. Reformatting of code. * add error to return-parameters of expand-function in resource_serviceendpoint_bitbucket.go to comply with signature defined by expandFunc-interface. * Resolved code smells detected by static code analysis. * Various fixes to acc-tests of kubernetes-sc. * Fixing source code with gofmt * Extracted common strings into const * Removed nested structure attr from acc tests, as there is no way to get the attrkey in a flat structure * Formatting provider.go * Updated go mod * Reworked schema and flatten for secret values * Added test data for unit tests * Adapted to new method signature Co-authored-by: saidst <stephen.said@henkel.com> Co-authored-by: Nicholas M. Iodice <niiodice@microsoft.com>
1 parent 111f592 commit 70071a3

18 files changed

+1245
-48
lines changed

azuredevops/crud/serviceendpoint/crud_service_endpoint.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ import (
1515
"github.com/microsoft/terraform-provider-azuredevops/azuredevops/utils/validate"
1616
)
1717

18+
const errMsgTfConfigRead = "Error reading terraform configuration: %+v"
19+
1820
type flatFunc func(d *schema.ResourceData, serviceEndpoint *serviceendpoint.ServiceEndpoint, projectID *string)
19-
type expandFunc func(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string)
21+
type expandFunc func(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string, error)
2022
type importFunc func(clients *config.AggregatedClient, id string) (string, string, error)
2123

2224
//GenBaseServiceEndpointResource creates a Resource with the common parts
@@ -185,7 +187,10 @@ func updateServiceEndpoint(clients *config.AggregatedClient, endpoint *serviceen
185187
func genServiceEndpointCreateFunc(flatFunc flatFunc, expandFunc expandFunc) func(d *schema.ResourceData, m interface{}) error {
186188
return func(d *schema.ResourceData, m interface{}) error {
187189
clients := m.(*config.AggregatedClient)
188-
serviceEndpoint, projectID := expandFunc(d)
190+
serviceEndpoint, projectID, err := expandFunc(d)
191+
if err != nil {
192+
return fmt.Errorf(errMsgTfConfigRead, err)
193+
}
189194

190195
createdServiceEndpoint, err := createServiceEndpoint(clients, serviceEndpoint, projectID)
191196
if err != nil {
@@ -237,7 +242,10 @@ func genServiceEndpointReadFunc(flatFunc flatFunc) func(d *schema.ResourceData,
237242
func genServiceEndpointUpdateFunc(flatFunc flatFunc, expandFunc expandFunc) schema.UpdateFunc {
238243
return func(d *schema.ResourceData, m interface{}) error {
239244
clients := m.(*config.AggregatedClient)
240-
serviceEndpoint, projectID := expandFunc(d)
245+
serviceEndpoint, projectID, err := expandFunc(d)
246+
if err != nil {
247+
return fmt.Errorf(errMsgTfConfigRead, err)
248+
}
241249

242250
updatedServiceEndpoint, err := updateServiceEndpoint(clients, serviceEndpoint, projectID)
243251
if err != nil {
@@ -252,7 +260,10 @@ func genServiceEndpointUpdateFunc(flatFunc flatFunc, expandFunc expandFunc) sche
252260
func genServiceEndpointDeleteFunc(expandFunc expandFunc) schema.DeleteFunc {
253261
return func(d *schema.ResourceData, m interface{}) error {
254262
clients := m.(*config.AggregatedClient)
255-
serviceEndpoint, projectID := expandFunc(d)
263+
serviceEndpoint, projectID, err := expandFunc(d)
264+
if err != nil {
265+
return fmt.Errorf(errMsgTfConfigRead, err)
266+
}
256267

257268
return deleteServiceEndpoint(clients, projectID, serviceEndpoint.Id)
258269
}

azuredevops/provider.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,20 @@ import (
99
func Provider() *schema.Provider {
1010
p := &schema.Provider{
1111
ResourcesMap: map[string]*schema.Resource{
12-
"azuredevops_resource_authorization": resourceResourceAuthorization(),
13-
"azuredevops_build_definition": resourceBuildDefinition(),
14-
"azuredevops_project": resourceProject(),
15-
"azuredevops_variable_group": resourceVariableGroup(),
16-
"azuredevops_serviceendpoint_azurerm": resourceServiceEndpointAzureRM(),
17-
"azuredevops_serviceendpoint_bitbucket": resourceServiceEndpointBitBucket(),
18-
"azuredevops_serviceendpoint_dockerhub": resourceServiceEndpointDockerHub(),
19-
"azuredevops_serviceendpoint_github": resourceServiceEndpointGitHub(),
20-
"azuredevops_git_repository": resourceGitRepository(),
21-
"azuredevops_user_entitlement": resourceUserEntitlement(),
22-
"azuredevops_group_membership": resourceGroupMembership(),
23-
"azuredevops_agent_pool": resourceAzureAgentPool(),
24-
"azuredevops_group": resourceGroup(),
12+
"azuredevops_resource_authorization": resourceResourceAuthorization(),
13+
"azuredevops_build_definition": resourceBuildDefinition(),
14+
"azuredevops_project": resourceProject(),
15+
"azuredevops_variable_group": resourceVariableGroup(),
16+
"azuredevops_serviceendpoint_azurerm": resourceServiceEndpointAzureRM(),
17+
"azuredevops_serviceendpoint_bitbucket": resourceServiceEndpointBitBucket(),
18+
"azuredevops_serviceendpoint_dockerhub": resourceServiceEndpointDockerHub(),
19+
"azuredevops_serviceendpoint_github": resourceServiceEndpointGitHub(),
20+
"azuredevops_serviceendpoint_kubernetes": resourceServiceEndpointKubernetes(),
21+
"azuredevops_git_repository": resourceGitRepository(),
22+
"azuredevops_user_entitlement": resourceUserEntitlement(),
23+
"azuredevops_group_membership": resourceGroupMembership(),
24+
"azuredevops_agent_pool": resourceAzureAgentPool(),
25+
"azuredevops_group": resourceGroup(),
2526
},
2627
DataSourcesMap: map[string]*schema.Resource{
2728
"azuredevops_group": dataGroup(),

azuredevops/provider_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func TestAzureDevOpsProvider_HasChildResources(t *testing.T) {
2222
"azuredevops_serviceendpoint_dockerhub",
2323
"azuredevops_serviceendpoint_azurerm",
2424
"azuredevops_serviceendpoint_bitbucket",
25+
"azuredevops_serviceendpoint_kubernetes",
2526
"azuredevops_variable_group",
2627
"azuredevops_git_repository",
2728
"azuredevops_user_entitlement",

azuredevops/resource_serviceendpoint_azurerm.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func resourceServiceEndpointAzureRM() *schema.Resource {
5555
}
5656

5757
// Convert internal Terraform data structure to an AzDO data structure
58-
func expandServiceEndpointAzureRM(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string) {
58+
func expandServiceEndpointAzureRM(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string, error) {
5959
serviceEndpoint, projectID := crud.DoBaseExpansion(d)
6060

6161
scope := fmt.Sprintf("/subscriptions/%s", d.Get("azurerm_subscription_id"))
@@ -95,7 +95,7 @@ func expandServiceEndpointAzureRM(d *schema.ResourceData) (*serviceendpoint.Serv
9595

9696
serviceEndpoint.Type = converter.String("azurerm")
9797
serviceEndpoint.Url = converter.String("https://management.azure.com/")
98-
return serviceEndpoint, projectID
98+
return serviceEndpoint, projectID, nil
9999
}
100100

101101
func expandSpnKey(credentials map[string]interface{}) string {

azuredevops/resource_serviceendpoint_azurerm_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func TestAzureDevOpsServiceEndpointAzureRM_ExpandFlatten_Roundtrip(t *testing.T)
115115
for _, resource := range azurermTestServiceEndpointsAzureRM {
116116
resourceData := getResourceData(t, resource)
117117
flattenServiceEndpointAzureRM(resourceData, &resource, azurermTestServiceEndpointAzureRMProjectID)
118-
serviceEndpointAfterRoundTrip, projectID := expandServiceEndpointAzureRM(resourceData)
118+
serviceEndpointAfterRoundTrip, projectID, _ := expandServiceEndpointAzureRM(resourceData)
119119

120120
require.Equal(t, resource, *serviceEndpointAfterRoundTrip)
121121
require.Equal(t, azurermTestServiceEndpointAzureRMProjectID, projectID)
@@ -256,7 +256,7 @@ func TestAzureDevOpsServiceEndpointAzureRM_ExpandHandlesMissingSpnKeyInAPIRespon
256256

257257
// step (2)
258258
flattenServiceEndpointAzureRM(resourceData, &endpoint, azurermTestServiceEndpointAzureRMProjectID)
259-
expandedEndpoint, _ := expandServiceEndpointAzureRM(resourceData)
259+
expandedEndpoint, _, _ := expandServiceEndpointAzureRM(resourceData)
260260

261261
// step (3)
262262
spnKeyProperty := (*expandedEndpoint.Authorization.Parameters)["serviceprincipalkey"]

azuredevops/resource_serviceendpoint_bitbucket.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func resourceServiceEndpointBitBucket() *schema.Resource {
1515
return r
1616
}
1717

18-
func expandServiceEndpointBitBucket(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string) {
18+
func expandServiceEndpointBitBucket(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string, error) {
1919
serviceEndpoint, projectID := crud.DoBaseExpansion(d)
2020
serviceEndpoint.Authorization = &serviceendpoint.EndpointAuthorization{
2121
Parameters: &map[string]string{
@@ -26,7 +26,7 @@ func expandServiceEndpointBitBucket(d *schema.ResourceData) (*serviceendpoint.Se
2626
}
2727
serviceEndpoint.Type = converter.String(string(RepoTypeValues.Bitbucket))
2828
serviceEndpoint.Url = converter.String("https://api.bitbucket.org/")
29-
return serviceEndpoint, projectID
29+
return serviceEndpoint, projectID, nil
3030
}
3131

3232
func flattenServiceEndpointBitBucket(d *schema.ResourceData, serviceEndpoint *serviceendpoint.ServiceEndpoint, projectID *string) {

azuredevops/resource_serviceendpoint_dockerhub.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func resourceServiceEndpointDockerHub() *schema.Resource {
1818
}
1919

2020
// Convert internal Terraform data structure to an AzDO data structure
21-
func expandServiceEndpointDockerHub(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string) {
21+
func expandServiceEndpointDockerHub(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string, error) {
2222
serviceEndpoint, projectID := crud.DoBaseExpansion(d)
2323
serviceEndpoint.Authorization = &serviceendpoint.EndpointAuthorization{
2424
Parameters: &map[string]string{
@@ -34,7 +34,7 @@ func expandServiceEndpointDockerHub(d *schema.ResourceData) (*serviceendpoint.Se
3434
}
3535
serviceEndpoint.Type = converter.String("dockerregistry")
3636
serviceEndpoint.Url = converter.String("https://hub.docker.com/")
37-
return serviceEndpoint, projectID
37+
return serviceEndpoint, projectID, nil
3838
}
3939

4040
// Convert AzDO data structure to internal Terraform data structure

azuredevops/resource_serviceendpoint_dockerhub_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ func TestAzureDevOpsServiceEndpointDockerHub_ExpandFlatten_Roundtrip(t *testing.
5656
resourceData := schema.TestResourceDataRaw(t, resourceServiceEndpointDockerHub().Schema, nil)
5757
flattenServiceEndpointDockerHub(resourceData, &dhTestServiceEndpoint, dhTestServiceEndpointProjectID)
5858

59-
serviceEndpointAfterRoundTrip, projectID := expandServiceEndpointDockerHub(resourceData)
59+
serviceEndpointAfterRoundTrip, projectID, err := expandServiceEndpointDockerHub(resourceData)
6060

61+
require.Nil(t, err)
6162
require.Equal(t, dhTestServiceEndpoint, *serviceEndpointAfterRoundTrip)
6263
require.Equal(t, dhTestServiceEndpointProjectID, projectID)
6364
}

azuredevops/resource_serviceendpoint_github.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func expandAuthPersonalSet(d *schema.Set) map[string]string {
107107
}
108108

109109
// Convert internal Terraform data structure to an AzDO data structure
110-
func expandServiceEndpointGitHub(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string) {
110+
func expandServiceEndpointGitHub(d *schema.ResourceData) (*serviceendpoint.ServiceEndpoint, *string, error) {
111111
serviceEndpoint, projectID := crud.DoBaseExpansion(d)
112112
scheme := "InstallationToken"
113113

@@ -132,7 +132,7 @@ func expandServiceEndpointGitHub(d *schema.ResourceData) (*serviceendpoint.Servi
132132
serviceEndpoint.Type = converter.String("github")
133133
serviceEndpoint.Url = converter.String("http://github.com")
134134

135-
return serviceEndpoint, projectID
135+
return serviceEndpoint, projectID, nil
136136
}
137137

138138
// Convert AzDO data structure to internal Terraform data structure

azuredevops/resource_serviceendpoint_github_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ func TestAzureDevOpsServiceEndpointGitHub_ExpandFlatten_Roundtrip(t *testing.T)
5151
configureAuthPersonal(resourceData)
5252
flattenServiceEndpointGitHub(resourceData, &ghTestServiceEndpoint, ghTestServiceEndpointProjectID)
5353

54-
serviceEndpointAfterRoundTrip, projectID := expandServiceEndpointGitHub(resourceData)
54+
serviceEndpointAfterRoundTrip, projectID, err := expandServiceEndpointGitHub(resourceData)
55+
56+
require.Nil(t, err)
5557
require.Equal(t, ghTestServiceEndpoint, *serviceEndpointAfterRoundTrip)
5658
require.Equal(t, ghTestServiceEndpointProjectID, projectID)
5759
}

0 commit comments

Comments
 (0)