Skip to content

Commit c9543e2

Browse files
authored
Shared api service clients across resources (#18)
* shared api service clients across resources * use ArgoCD 1.6.1 for local development acceptance testing
1 parent 52e9c9e commit c9543e2

File tree

9 files changed

+457
-431
lines changed

9 files changed

+457
-431
lines changed

argocd/features.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ var (
2525
)
2626

2727
type ServerInterface struct {
28-
ApiClient apiclient.Client
29-
ApplicationClient application.ApplicationServiceClient
30-
ProjectClient project.ProjectServiceClient
31-
RepositoryClient repository.RepositoryServiceClient
28+
ApiClient *apiclient.Client
29+
ApplicationClient *application.ApplicationServiceClient
30+
ProjectClient *project.ProjectServiceClient
31+
RepositoryClient *repository.RepositoryServiceClient
3232
ServerVersion *semver.Version
3333
ServerVersionMessage *version.VersionMessage
3434
}

argocd/provider.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,10 @@ func initServerInterface(
168168
}
169169

170170
return ServerInterface{
171-
apiClient,
172-
applicationClient,
173-
projectClient,
174-
repositoryClient,
171+
&apiClient,
172+
&applicationClient,
173+
&projectClient,
174+
&repositoryClient,
175175
serverVersion,
176176
serverVersionMessage}, err
177177
}

argocd/resource_argocd_application.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func resourceArgoCDApplicationCreate(d *schema.ResourceData, meta interface{}) e
3333
return err
3434
}
3535
server := meta.(ServerInterface)
36-
c := server.ApplicationClient
36+
c := *server.ApplicationClient
3737
app, err := c.Get(context.Background(), &applicationClient.ApplicationQuery{
3838
Name: &objectMeta.Name,
3939
})
@@ -83,7 +83,7 @@ func resourceArgoCDApplicationCreate(d *schema.ResourceData, meta interface{}) e
8383

8484
func resourceArgoCDApplicationRead(d *schema.ResourceData, meta interface{}) error {
8585
server := meta.(ServerInterface)
86-
c := server.ApplicationClient
86+
c := *server.ApplicationClient
8787
appName := d.Id()
8888
app, err := c.Get(context.Background(), &applicationClient.ApplicationQuery{
8989
Name: &appName,
@@ -111,7 +111,7 @@ func resourceArgoCDApplicationUpdate(d *schema.ResourceData, meta interface{}) e
111111
return err
112112
}
113113
server := meta.(ServerInterface)
114-
c := server.ApplicationClient
114+
c := *server.ApplicationClient
115115
appRequest := &applicationClient.ApplicationUpdateRequest{
116116
Application: &application.Application{
117117
ObjectMeta: objectMeta,
@@ -147,7 +147,7 @@ func resourceArgoCDApplicationUpdate(d *schema.ResourceData, meta interface{}) e
147147

148148
func resourceArgoCDApplicationDelete(d *schema.ResourceData, meta interface{}) error {
149149
server := meta.(ServerInterface)
150-
c := server.ApplicationClient
150+
c := *server.ApplicationClient
151151
appName := d.Id()
152152
_, err := c.Delete(context.Background(), &applicationClient.ApplicationDeleteRequest{Name: &appName})
153153
if err != nil {

argocd/resource_argocd_project.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func resourceArgoCDProjectCreate(d *schema.ResourceData, meta interface{}) error
3333
return err
3434
}
3535
server := meta.(ServerInterface)
36-
c := server.ProjectClient
36+
c := *server.ProjectClient
3737
p, err := c.Get(context.Background(), &projectClient.ProjectQuery{
3838
Name: objectMeta.Name,
3939
})
@@ -73,7 +73,7 @@ func resourceArgoCDProjectCreate(d *schema.ResourceData, meta interface{}) error
7373

7474
func resourceArgoCDProjectRead(d *schema.ResourceData, meta interface{}) error {
7575
server := meta.(ServerInterface)
76-
c := server.ProjectClient
76+
c := *server.ProjectClient
7777
p, err := c.Get(context.Background(), &projectClient.ProjectQuery{
7878
Name: d.Id(),
7979
})
@@ -97,7 +97,7 @@ func resourceArgoCDProjectUpdate(d *schema.ResourceData, meta interface{}) error
9797
return err
9898
}
9999
server := meta.(ServerInterface)
100-
c := server.ProjectClient
100+
c := *server.ProjectClient
101101
projectRequest := &projectClient.ProjectUpdateRequest{
102102
Project: &application.AppProject{
103103
ObjectMeta: objectMeta,
@@ -133,7 +133,7 @@ func resourceArgoCDProjectUpdate(d *schema.ResourceData, meta interface{}) error
133133

134134
func resourceArgoCDProjectDelete(d *schema.ResourceData, meta interface{}) error {
135135
server := meta.(ServerInterface)
136-
c := server.ProjectClient
136+
c := *server.ProjectClient
137137
_, err := c.Delete(context.Background(), &projectClient.ProjectQuery{Name: d.Id()})
138138
if err != nil {
139139
return err

argocd/resource_argocd_project_token.go

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
argoCDProject "github.com/argoproj/argo-cd/pkg/apiclient/project"
7+
"github.com/argoproj/argo-cd/pkg/apiclient/project"
88
application "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1"
99
"github.com/cristalhq/jwt/v3"
1010
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
@@ -72,19 +72,19 @@ func resourceArgoCDProjectToken() *schema.Resource {
7272

7373
func resourceArgoCDProjectTokenCreate(d *schema.ResourceData, meta interface{}) error {
7474
server := meta.(ServerInterface)
75-
c := server.ProjectClient
75+
c := *server.ProjectClient
7676
var claims jwt.StandardClaims
7777
var expiresIn int64
7878

79-
project := d.Get("project").(string)
79+
p := d.Get("project").(string)
8080
role := d.Get("role").(string)
81-
opts := &argoCDProject.ProjectTokenCreateRequest{
82-
Project: project,
81+
opts := &project.ProjectTokenCreateRequest{
82+
Project: p,
8383
Role: role,
8484
}
8585

86-
if _, ok := tokenMutexProjectMap[project]; !ok {
87-
tokenMutexProjectMap[project] = &sync.RWMutex{}
86+
if _, ok := tokenMutexProjectMap[p]; !ok {
87+
tokenMutexProjectMap[p] = &sync.RWMutex{}
8888
}
8989
if d, ok := d.GetOk("description"); ok {
9090
opts.Description = d.(string)
@@ -120,14 +120,14 @@ func resourceArgoCDProjectTokenCreate(d *schema.ResourceData, meta interface{})
120120
return err
121121
}
122122

123-
tokenMutexProjectMap[project].Lock()
123+
tokenMutexProjectMap[p].Lock()
124124
resp, err := c.CreateToken(context.Background(), opts)
125125
// ensure issuedAt is unique upon multiple simultaneous resource creation invocations
126126
// as this is the unique ID for old tokens
127127
if !featureTokenIDSupported {
128128
time.Sleep(1 * time.Second)
129129
}
130-
tokenMutexProjectMap[project].Unlock()
130+
tokenMutexProjectMap[p].Unlock()
131131
if err != nil {
132132
return err
133133
}
@@ -164,7 +164,7 @@ func resourceArgoCDProjectTokenCreate(d *schema.ResourceData, meta interface{})
164164
}
165165
d.SetId(claims.ID)
166166
} else {
167-
d.SetId(fmt.Sprintf("%s-%s-%d", project, role, claims.IssuedAt.Unix()))
167+
d.SetId(fmt.Sprintf("%s-%s-%d", p, role, claims.IssuedAt.Unix()))
168168
}
169169
return resourceArgoCDProjectTokenRead(d, meta)
170170
}
@@ -177,10 +177,10 @@ func resourceArgoCDProjectTokenRead(d *schema.ResourceData, meta interface{}) er
177177
var requestTokenIAT int64 = 0
178178

179179
server := meta.(ServerInterface)
180-
c := server.ProjectClient
180+
c := *server.ProjectClient
181181

182182
// Delete token from state if project has been deleted in an out-of-band fashion
183-
project, err := c.Get(context.Background(), &argoCDProject.ProjectQuery{
183+
p, err := c.Get(context.Background(), &project.ProjectQuery{
184184
Name: d.Get("project").(string),
185185
})
186186
if err != nil {
@@ -192,8 +192,8 @@ func resourceArgoCDProjectTokenRead(d *schema.ResourceData, meta interface{}) er
192192
return err
193193
}
194194
}
195-
if _, ok := tokenMutexProjectMap[project.Name]; !ok {
196-
tokenMutexProjectMap[project.Name] = &sync.RWMutex{}
195+
if _, ok := tokenMutexProjectMap[p.Name]; !ok {
196+
tokenMutexProjectMap[p.Name] = &sync.RWMutex{}
197197
}
198198
featureTokenIDSupported, err := server.isFeatureSupported(featureTokenIDs)
199199
if err != nil {
@@ -214,13 +214,13 @@ func resourceArgoCDProjectTokenRead(d *schema.ResourceData, meta interface{}) er
214214
}
215215
}
216216

217-
tokenMutexProjectMap[project.Name].RLock()
218-
token, _, err = project.GetJWTToken(
217+
tokenMutexProjectMap[p.Name].RLock()
218+
token, _, err = p.GetJWTToken(
219219
d.Get("role").(string),
220220
requestTokenIAT,
221221
requestTokenID,
222222
)
223-
tokenMutexProjectMap[project.Name].RUnlock()
223+
tokenMutexProjectMap[p.Name].RUnlock()
224224
if err != nil {
225225
// Token has been deleted in an out-of-band fashion
226226
d.SetId("")
@@ -269,17 +269,17 @@ func resourceArgoCDProjectTokenUpdate(d *schema.ResourceData, meta interface{})
269269

270270
func resourceArgoCDProjectTokenDelete(d *schema.ResourceData, meta interface{}) error {
271271
server := meta.(ServerInterface)
272-
c := server.ProjectClient
272+
c := *server.ProjectClient
273273

274-
project := d.Get("project").(string)
274+
p := d.Get("project").(string)
275275
role := d.Get("role").(string)
276-
opts := &argoCDProject.ProjectTokenDeleteRequest{
277-
Project: project,
276+
opts := &project.ProjectTokenDeleteRequest{
277+
Project: p,
278278
Role: role,
279279
}
280280

281-
if _, ok := tokenMutexProjectMap[project]; !ok {
282-
tokenMutexProjectMap[project] = &sync.RWMutex{}
281+
if _, ok := tokenMutexProjectMap[p]; !ok {
282+
tokenMutexProjectMap[p] = &sync.RWMutex{}
283283
}
284284

285285
featureTokenIDSupported, err := server.isFeatureSupported(featureTokenIDs)
@@ -298,11 +298,11 @@ func resourceArgoCDProjectTokenDelete(d *schema.ResourceData, meta interface{})
298298
}
299299
}
300300

301-
tokenMutexProjectMap[project].Lock()
301+
tokenMutexProjectMap[p].Lock()
302302
if _, err := c.DeleteToken(context.Background(), opts); err != nil {
303303
return err
304304
}
305-
tokenMutexProjectMap[project].Unlock()
305+
tokenMutexProjectMap[p].Unlock()
306306
d.SetId("")
307307
return nil
308308
}

argocd/resource_argocd_repository.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func resourceArgoCDRepository() *schema.Resource {
2525

2626
func resourceArgoCDRepositoryCreate(d *schema.ResourceData, meta interface{}) error {
2727
server := meta.(ServerInterface)
28-
c := server.RepositoryClient
28+
c := *server.RepositoryClient
2929
repo := expandRepository(d)
3030
r, err := c.CreateRepository(
3131
context.Background(),
@@ -51,7 +51,7 @@ func resourceArgoCDRepositoryCreate(d *schema.ResourceData, meta interface{}) er
5151

5252
func resourceArgoCDRepositoryRead(d *schema.ResourceData, meta interface{}) error {
5353
server := meta.(ServerInterface)
54-
c := server.RepositoryClient
54+
c := *server.RepositoryClient
5555
r := &application.Repository{}
5656

5757
featureRepositoryGetSupported, err := server.isFeatureSupported(featureRepositoryGet)
@@ -107,7 +107,7 @@ func resourceArgoCDRepositoryRead(d *schema.ResourceData, meta interface{}) erro
107107

108108
func resourceArgoCDRepositoryUpdate(d *schema.ResourceData, meta interface{}) error {
109109
server := meta.(ServerInterface)
110-
c := server.RepositoryClient
110+
c := *server.RepositoryClient
111111
repo := expandRepository(d)
112112
r, err := c.UpdateRepository(
113113
context.Background(),
@@ -136,7 +136,7 @@ func resourceArgoCDRepositoryUpdate(d *schema.ResourceData, meta interface{}) er
136136

137137
func resourceArgoCDRepositoryDelete(d *schema.ResourceData, meta interface{}) error {
138138
server := meta.(ServerInterface)
139-
c := server.RepositoryClient
139+
c := *server.RepositoryClient
140140
_, err := c.DeleteRepository(
141141
context.Background(),
142142
&repository.RepoQuery{Repo: d.Id()},

argocd/utils.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package argocd
33
import (
44
"fmt"
55
"github.com/argoproj/argo-cd/pkg/apiclient"
6-
"github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1"
6+
application "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1"
77
util "github.com/argoproj/gitops-engine/pkg/utils/io"
88
"regexp"
99
"strconv"
@@ -108,7 +108,7 @@ func validatePolicy(project string, role string, policy string) error {
108108
return nil
109109
}
110110

111-
func isValidToken(token *v1alpha1.JWTToken, expiresIn int64) error {
111+
func isValidToken(token *application.JWTToken, expiresIn int64) error {
112112
// Check token expiry
113113
if expiresIn > 0 && token.ExpiresAt < time.Now().Unix() {
114114
return fmt.Errorf("token has expired")

0 commit comments

Comments
 (0)