Skip to content

Commit 1dbdb28

Browse files
add registry data source
1 parent 69bd27c commit 1dbdb28

File tree

5 files changed

+118
-6
lines changed

5 files changed

+118
-6
lines changed

client/registry.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@ func (registry *Registry) GetID() string {
4444
return registry.Id
4545
}
4646

47-
func (client *Client) GetRegistry(name string) (*Registry, error) {
48-
fullPath := fmt.Sprintf("/registries/%s?includePrivate=true", url.PathEscape(name))
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))
4950
opts := RequestOptions{
5051
Path: fullPath,
5152
Method: "GET",

codefresh/data_registry.go

Lines changed: 89 additions & 0 deletions
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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ 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(),

codefresh/resource_registry.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ func resourceRegistry() *schema.Resource {
256256
"behind_firewall": {
257257
Type: schema.TypeBool,
258258
Optional: true,
259+
Default: false,
259260
ForceNew: true,
260261
},
261262
},

examples/registries/main.tf

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ provider "codefresh" {
2020

2121
resource "codefresh_registry" "acr" {
2222
name = "acr"
23+
default = true
2324
spec {
2425
acr {
2526
domain = "acr.io"
@@ -32,6 +33,8 @@ resource "codefresh_registry" "acr" {
3233

3334
resource "codefresh_registry" "gcr" {
3435
name = "gcr"
36+
# all registries SHOULD be dependent on each other to be created/updated sequentially
37+
depends_on = [codefresh_registry.acr]
3538
spec {
3639
gcr {
3740
domain = "gcr.io"
@@ -43,6 +46,7 @@ resource "codefresh_registry" "gcr" {
4346

4447
resource "codefresh_registry" "gar" {
4548
name = "gar"
49+
depends_on = [codefresh_registry.gcr]
4650
spec {
4751
gar {
4852
domain = "asia"
@@ -52,19 +56,27 @@ resource "codefresh_registry" "gar" {
5256
}
5357
}
5458

55-
resource "codefresh_registry" "dockerhub" {
59+
data "codefresh_registry" "dockerhub" {
60+
name = "dockerhub"
61+
}
62+
63+
# example with using data reference to existing registry, not managed by terraform
64+
resource "codefresh_registry" "dockerhub1" {
5665
name = "dockerhub1"
57-
primary = false
66+
primary = !data.codefresh_registry.dockerhub.primary
67+
depends_on = [codefresh_registry.gar]
5868
spec {
5969
dockerhub {
6070
username = "test"
6171
password = "test"
6272
}
6373
}
74+
fallback_registry = data.codefresh_registry.dockerhub.id
6475
}
6576

6677
resource "codefresh_registry" "bintray" {
6778
name = "bintray"
79+
depends_on = [codefresh_registry.dockerhub1]
6880
spec {
6981
bintray {
7082
domain = "bintray.io"
@@ -76,7 +88,8 @@ resource "codefresh_registry" "bintray" {
7688

7789
resource "codefresh_registry" "other" {
7890
name = "other"
79-
primary = true
91+
depends_on = [codefresh_registry.bintray]
92+
primary = false
8093
spec {
8194
other {
8295
domain = "other.io"
@@ -86,9 +99,14 @@ resource "codefresh_registry" "other" {
8699
}
87100
}
88101

102+
# when you have multiple registries under the same domain
103+
# they MUST be dependant on each other and `primary`
104+
# MUST be specified at least and only for one registry
105+
# as `true`
89106
resource "codefresh_registry" "other1" {
90107
name = "other1"
91-
primary = false
108+
primary = true
109+
depends_on = [codefresh_registry.other]
92110
spec {
93111
other {
94112
domain = "other.io"
@@ -101,11 +119,13 @@ resource "codefresh_registry" "other1" {
101119
resource "codefresh_registry" "other2" {
102120
name = "other2"
103121
primary = false
122+
depends_on = [codefresh_registry.other1, codefresh_registry.bintray]
104123
spec {
105124
other {
106125
domain = "other.io"
107126
username = "test"
108127
password = "test"
109128
}
110129
}
130+
fallback_registry = codefresh_registry.bintray.id
111131
}

0 commit comments

Comments
 (0)