Skip to content

Commit 7f62201

Browse files
Merge pull request #67 from codefresh-io/CR-5753-registry
CR-5753-registry
2 parents a00f023 + ea8431a commit 7f62201

File tree

10 files changed

+1196
-1
lines changed

10 files changed

+1196
-1
lines changed

client/client.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ func (client *Client) RequestAPI(opt *RequestOptions) ([]byte, error) {
7272
return nil, fmt.Errorf("Failed to read body %v %v", resp.StatusCode, resp.Status)
7373
}
7474

75-
if resp.StatusCode != 200 {
75+
// todo: maybe other 2**?
76+
if resp.StatusCode != 200 && resp.StatusCode != 201 {
7677
return nil, fmt.Errorf("%v, %s", resp.Status, string(body))
7778
}
7879
return body, nil

client/registry.go

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package client
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/url"
7+
)
8+
9+
type Registry struct {
10+
// common
11+
Id string `json:"_id,omitempty"`
12+
Name string `json:"name,omitempty"`
13+
Kind string `json:"kind,omitempty"`
14+
Default bool `json:"default,omitempty"`
15+
Primary bool `json:"primary,omitempty"`
16+
BehindFirewall bool `json:"behindFirewall,omitempty"`
17+
FallbackRegistry string `json:"fallbackRegistry,omitempty"`
18+
RepositoryPrefix string `json:"repositoryPrefix,omitempty"`
19+
Provider string `json:"provider,omitempty"`
20+
21+
// mostly all
22+
Domain string `json:"domain,omitempty"`
23+
Username string `json:"username,omitempty"`
24+
Password string `json:"password,omitempty"`
25+
26+
// bintray
27+
Token string `json:"token,omitempty"`
28+
29+
// ecr
30+
AccessKeyId string `json:"accessKeyId,omitempty"`
31+
SecretAccessKey string `json:"secretAccessKey,omitempty"`
32+
Region string `json:"region,omitempty"`
33+
34+
// gcr, gar
35+
Keyfile string `json:"keyfile,omitempty"`
36+
37+
// acr
38+
ClientId string `json:"clientId,omitempty"`
39+
ClientSecret string `json:"clientSecret,omitempty"`
40+
//DenyCompositeDomain bool `json:"denyCompositeDomain,omitempty"`
41+
}
42+
43+
func (registry *Registry) GetID() string {
44+
return registry.Id
45+
}
46+
47+
// GetRegistry identifier is ObjectId or name
48+
func (client *Client) GetRegistry(identifier string) (*Registry, error) {
49+
fullPath := fmt.Sprintf("/registries/%s", url.PathEscape(identifier))
50+
opts := RequestOptions{
51+
Path: fullPath,
52+
Method: "GET",
53+
}
54+
55+
resp, err := client.RequestAPI(&opts)
56+
57+
if err != nil {
58+
return nil, err
59+
}
60+
var respRegistry Registry
61+
err = DecodeResponseInto(resp, &respRegistry)
62+
if err != nil {
63+
return nil, err
64+
}
65+
66+
return &respRegistry, nil
67+
68+
}
69+
70+
func (client *Client) CreateRegistry(registry *Registry) (*Registry, error) {
71+
72+
body, err := EncodeToJSON(registry)
73+
74+
if err != nil {
75+
return nil, err
76+
}
77+
opts := RequestOptions{
78+
Path: "/registries",
79+
Method: "POST",
80+
Body: body,
81+
}
82+
83+
resp, err := client.RequestAPI(&opts)
84+
85+
if err != nil {
86+
log.Printf("[DEBUG] Call to API for registry creation failed with Error = %v for Body %v", err, body)
87+
return nil, err
88+
}
89+
90+
var respRegistry Registry
91+
err = DecodeResponseInto(resp, &respRegistry)
92+
if err != nil {
93+
return nil, err
94+
}
95+
96+
return &respRegistry, nil
97+
98+
}
99+
100+
func (client *Client) UpdateRegistry(registry *Registry) (*Registry, error) {
101+
102+
body, err := EncodeToJSON(registry)
103+
104+
if err != nil {
105+
return nil, err
106+
}
107+
108+
fullPath := fmt.Sprintf("/registries/%s", url.PathEscape(registry.Id))
109+
opts := RequestOptions{
110+
Path: fullPath,
111+
Method: "PATCH",
112+
Body: body,
113+
}
114+
115+
resp, err := client.RequestAPI(&opts)
116+
117+
if err != nil {
118+
return nil, err
119+
}
120+
121+
var respRegistry Registry
122+
err = DecodeResponseInto(resp, &respRegistry)
123+
if err != nil {
124+
return nil, err
125+
}
126+
127+
return &respRegistry, nil
128+
129+
}
130+
131+
func (client *Client) DeleteRegistry(name string) error {
132+
133+
fullPath := fmt.Sprintf("/registries/%s", url.PathEscape(name))
134+
opts := RequestOptions{
135+
Path: fullPath,
136+
Method: "DELETE",
137+
}
138+
139+
_, err := client.RequestAPI(&opts)
140+
141+
if err != nil {
142+
return err
143+
}
144+
145+
return nil
146+
}

codefresh/data_registry.go

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package codefresh
2+
3+
import (
4+
"fmt"
5+
6+
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
func dataSourceRegistry() *schema.Resource {
11+
return &schema.Resource{
12+
Read: dataSourceRegistryRead,
13+
Schema: map[string]*schema.Schema{
14+
"name": {
15+
Type: schema.TypeString,
16+
Required: true,
17+
},
18+
"kind": {
19+
Type: schema.TypeString,
20+
Computed: true,
21+
},
22+
"domain": {
23+
Type: schema.TypeString,
24+
Computed: true,
25+
},
26+
"registry_provider": {
27+
Type: schema.TypeString,
28+
Computed: true,
29+
},
30+
"default": {
31+
Type: schema.TypeBool,
32+
Computed: true,
33+
},
34+
"primary": {
35+
Type: schema.TypeBool,
36+
Computed: true,
37+
},
38+
"fallback_registry": {
39+
Type: schema.TypeString,
40+
Computed: true,
41+
},
42+
"repository_prefix": {
43+
Type: schema.TypeString,
44+
Computed: true,
45+
},
46+
},
47+
}
48+
}
49+
50+
func dataSourceRegistryRead(d *schema.ResourceData, meta interface{}) error {
51+
52+
client := meta.(*cfClient.Client)
53+
var registry *cfClient.Registry
54+
var err error
55+
56+
if name, nameOk := d.GetOk("name"); nameOk {
57+
registry, err = client.GetRegistry(name.(string))
58+
} else {
59+
return fmt.Errorf("data.codefresh_registry - must specify name")
60+
}
61+
if err != nil {
62+
return err
63+
}
64+
65+
if registry == nil {
66+
return fmt.Errorf("data.codefresh_registry - cannot find registry")
67+
}
68+
69+
return mapDataRegistryToResource(registry, d)
70+
}
71+
72+
func mapDataRegistryToResource(registry *cfClient.Registry, d *schema.ResourceData) error {
73+
74+
if registry == nil || registry.Name == "" {
75+
return fmt.Errorf("data.codefresh_registry - failed to mapDataRegistryToResource")
76+
}
77+
d.SetId(registry.Id)
78+
79+
d.Set("name", registry.Name)
80+
d.Set("registry_provider", registry.Provider)
81+
d.Set("kind", registry.Kind)
82+
d.Set("domain", registry.Domain)
83+
d.Set("primary", registry.Primary)
84+
d.Set("default", registry.Default)
85+
d.Set("fallback_registry", registry.FallbackRegistry)
86+
d.Set("repository_prefix", registry.RepositoryPrefix)
87+
88+
return nil
89+
}

codefresh/provider.go

+2
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,14 @@ func Provider() *schema.Provider {
3535
"codefresh_team": dataSourceTeam(),
3636
"codefresh_user": dataSourceUser(),
3737
"codefresh_users": dataSourceUsers(),
38+
"codefresh_registry": dataSourceRegistry(),
3839
},
3940
ResourcesMap: map[string]*schema.Resource{
4041
"codefresh_account": resourceAccount(),
4142
"codefresh_account_admins": resourceAccountAdmins(),
4243
"codefresh_api_key": resourceApiKey(),
4344
"codefresh_context": resourceContext(),
45+
"codefresh_registry": resourceRegistry(),
4446
"codefresh_idp_accounts": resourceIDPAccounts(),
4547
"codefresh_permission": resourcePermission(),
4648
"codefresh_pipeline": resourcePipeline(),

0 commit comments

Comments
 (0)