Skip to content

Commit f008aa9

Browse files
ceng-575-add-conda-upstream-and-update-go-binding
1 parent 10e2c8f commit f008aa9

File tree

5 files changed

+157
-3
lines changed

5 files changed

+157
-3
lines changed

cloudsmith/resource_repository_upstream.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
const (
1717
Cargo = "cargo"
1818
Composer = "composer"
19+
Conda = "conda"
1920
Cran = "cran"
2021
Dart = "dart"
2122
Deb = "deb"
@@ -70,6 +71,7 @@ var (
7071
upstreamTypes = []string{
7172
Cargo,
7273
Composer,
74+
Conda,
7375
Cran,
7476
Dart,
7577
Deb,
@@ -224,6 +226,24 @@ func resourceRepositoryUpstreamCreate(d *schema.ResourceData, m interface{}) err
224226
VerifySsl: verifySsl,
225227
})
226228
upstream, resp, err = pc.APIClient.ReposApi.ReposUpstreamComposerCreateExecute(req)
229+
case Conda:
230+
req := pc.APIClient.ReposApi.ReposUpstreamCondaCreate(pc.Auth, namespace, repository)
231+
req = req.Data(cloudsmith.CondaUpstreamRequest{
232+
AuthMode: authMode,
233+
AuthSecret: authSecret,
234+
AuthUsername: authUsername,
235+
ExtraHeader1: extraHeader1,
236+
ExtraHeader2: extraHeader2,
237+
ExtraValue1: extraValue1,
238+
ExtraValue2: extraValue2,
239+
IsActive: isActive,
240+
Mode: mode,
241+
Name: name,
242+
Priority: priority,
243+
UpstreamUrl: upstreamUrl,
244+
VerifySsl: verifySsl,
245+
})
246+
upstream, resp, err = pc.APIClient.ReposApi.ReposUpstreamCondaCreateExecute(req)
227247
case Cran:
228248
req := pc.APIClient.ReposApi.ReposUpstreamCranCreate(pc.Auth, namespace, repository)
229249
req = req.Data(cloudsmith.CranUpstreamRequest{
@@ -529,6 +549,9 @@ func getUpstream(d *schema.ResourceData, m interface{}) (Upstream, *http.Respons
529549
case Composer:
530550
req := pc.APIClient.ReposApi.ReposUpstreamComposerRead(pc.Auth, namespace, repository, d.Id())
531551
upstream, resp, err = pc.APIClient.ReposApi.ReposUpstreamComposerReadExecute(req)
552+
case Conda:
553+
req := pc.APIClient.ReposApi.ReposUpstreamCondaRead(pc.Auth, namespace, repository, d.Id())
554+
upstream, resp, err = pc.APIClient.ReposApi.ReposUpstreamCondaReadExecute(req)
532555
case Cran:
533556
req := pc.APIClient.ReposApi.ReposUpstreamCranRead(pc.Auth, namespace, repository, d.Id())
534557
upstream, resp, err = pc.APIClient.ReposApi.ReposUpstreamCranReadExecute(req)
@@ -698,6 +721,24 @@ func resourceRepositoryUpstreamUpdate(d *schema.ResourceData, m interface{}) err
698721
VerifySsl: verifySsl,
699722
})
700723
upstream, _, err = pc.APIClient.ReposApi.ReposUpstreamComposerUpdateExecute(req)
724+
case Conda:
725+
req := pc.APIClient.ReposApi.ReposUpstreamCondaUpdate(pc.Auth, namespace, repository, slugPerm)
726+
req = req.Data(cloudsmith.CondaUpstreamRequest{
727+
AuthMode: authMode,
728+
AuthSecret: authSecret,
729+
AuthUsername: authUsername,
730+
ExtraHeader1: extraHeader1,
731+
ExtraHeader2: extraHeader2,
732+
ExtraValue1: extraValue1,
733+
ExtraValue2: extraValue2,
734+
IsActive: isActive,
735+
Mode: mode,
736+
Name: name,
737+
Priority: priority,
738+
UpstreamUrl: upstreamUrl,
739+
VerifySsl: verifySsl,
740+
})
741+
upstream, _, err = pc.APIClient.ReposApi.ReposUpstreamCondaUpdateExecute(req)
701742
case Cran:
702743
req := pc.APIClient.ReposApi.ReposUpstreamCranUpdate(pc.Auth, namespace, repository, slugPerm)
703744
req = req.Data(cloudsmith.CranUpstreamRequest{
@@ -993,6 +1034,9 @@ func resourceRepositoryUpstreamDelete(d *schema.ResourceData, m interface{}) err
9931034
case Composer:
9941035
req := pc.APIClient.ReposApi.ReposUpstreamComposerDelete(pc.Auth, namespace, repository, d.Id())
9951036
_, err = pc.APIClient.ReposApi.ReposUpstreamComposerDeleteExecute(req)
1037+
case Conda:
1038+
req := pc.APIClient.ReposApi.ReposUpstreamCondaDelete(pc.Auth, namespace, repository, d.Id())
1039+
_, err = pc.APIClient.ReposApi.ReposUpstreamCondaDeleteExecute(req)
9961040
case Cran:
9971041
req := pc.APIClient.ReposApi.ReposUpstreamCranDelete(pc.Auth, namespace, repository, d.Id())
9981042
_, err = pc.APIClient.ReposApi.ReposUpstreamCranDeleteExecute(req)

cloudsmith/resource_repository_upstream_test.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,99 @@ resource "cloudsmith_repository_upstream" "crates_io" {
121121
})
122122
}
123123

124+
func TestAccRepositoryUpstreamConda_basic(t *testing.T) {
125+
t.Parallel()
126+
127+
const condaUpstreamResourceName = "cloudsmith_repository_upstream.conda_forge"
128+
129+
testAccRepositoryCondaUpstreamConfigBasic := fmt.Sprintf(`
130+
resource "cloudsmith_repository" "test" {
131+
name = "terraform-acc-test-upstream-conda"
132+
namespace = "%s"
133+
}
134+
135+
resource "cloudsmith_repository_upstream" "conda_forge" {
136+
namespace = cloudsmith_repository.test.namespace
137+
repository = cloudsmith_repository.test.slug
138+
name = cloudsmith_repository.test.name
139+
upstream_type = "conda"
140+
upstream_url = "https://conda.anaconda.org/conda-forge"
141+
}
142+
`, namespace)
143+
144+
testAccRepositoryCondaUpstreamConfigUpdate := fmt.Sprintf(`
145+
resource "cloudsmith_repository" "test" {
146+
name = "terraform-acc-test-upstream-conda"
147+
namespace = "%s"
148+
}
149+
150+
resource "cloudsmith_repository_upstream" "conda_forge" {
151+
extra_header_1 = "X-Custom-Header"
152+
extra_header_2 = "Access-Control-Allow-Origin"
153+
extra_value_1 = "custom-value"
154+
extra_value_2 = "*"
155+
namespace = cloudsmith_repository.test.namespace
156+
repository = cloudsmith_repository.test.slug
157+
name = cloudsmith_repository.test.name
158+
upstream_type = "conda"
159+
upstream_url = "https://conda.anaconda.org/conda-forge"
160+
}
161+
`, namespace)
162+
163+
resource.Test(t, resource.TestCase{
164+
PreCheck: func() { testAccPreCheck(t) },
165+
Providers: testAccProviders,
166+
CheckDestroy: testAccRepositoryUpstreamCheckDestroy(condaUpstreamResourceName),
167+
Steps: []resource.TestStep{
168+
{
169+
Config: testAccRepositoryCondaUpstreamConfigBasic,
170+
Check: resource.ComposeTestCheckFunc(
171+
resource.TestCheckResourceAttr(condaUpstreamResourceName, AuthMode, "None"),
172+
resource.TestCheckResourceAttr(condaUpstreamResourceName, AuthUsername, ""),
173+
resource.TestCheckResourceAttrSet(condaUpstreamResourceName, CreatedAt),
174+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraHeader1, ""),
175+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraHeader2, ""),
176+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraValue1, ""),
177+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraValue2, ""),
178+
resource.TestCheckResourceAttr(condaUpstreamResourceName, IsActive, "true"),
179+
resource.TestCheckResourceAttr(condaUpstreamResourceName, Mode, "Proxy Only"),
180+
resource.TestCheckResourceAttr(condaUpstreamResourceName, Name, "terraform-acc-test-upstream-conda"),
181+
resource.TestCheckResourceAttrSet(condaUpstreamResourceName, Priority),
182+
resource.TestCheckResourceAttr(condaUpstreamResourceName, UpstreamType, "conda"),
183+
resource.TestCheckResourceAttr(condaUpstreamResourceName, UpstreamUrl, "https://conda.anaconda.org/conda-forge"),
184+
resource.TestCheckResourceAttrSet(condaUpstreamResourceName, UpdatedAt),
185+
resource.TestCheckResourceAttr(condaUpstreamResourceName, VerifySsl, "true"),
186+
),
187+
},
188+
{
189+
Config: testAccRepositoryCondaUpstreamConfigUpdate,
190+
Check: resource.ComposeTestCheckFunc(
191+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraHeader1, "X-Custom-Header"),
192+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraHeader2, "Access-Control-Allow-Origin"),
193+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraValue1, "custom-value"),
194+
resource.TestCheckResourceAttr(condaUpstreamResourceName, ExtraValue2, "*"),
195+
resource.TestCheckResourceAttr(condaUpstreamResourceName, IsActive, "true"),
196+
),
197+
},
198+
{
199+
ResourceName: condaUpstreamResourceName,
200+
ImportState: true,
201+
ImportStateIdFunc: func(s *terraform.State) (string, error) {
202+
resourceState := s.RootModule().Resources[condaUpstreamResourceName]
203+
return fmt.Sprintf(
204+
"%s.%s.%s.%s",
205+
resourceState.Primary.Attributes[Namespace],
206+
resourceState.Primary.Attributes[Repository],
207+
resourceState.Primary.Attributes[UpstreamType],
208+
resourceState.Primary.Attributes[SlugPerm],
209+
), nil
210+
},
211+
ImportStateVerify: true,
212+
},
213+
},
214+
})
215+
}
216+
124217
func TestAccRepositoryUpstreamDart_basic(t *testing.T) {
125218
t.Parallel()
126219

@@ -1533,6 +1626,9 @@ func testAccRepositoryUpstreamCheckDestroy(resourceName string) resource.TestChe
15331626
case Composer:
15341627
req := pc.APIClient.ReposApi.ReposUpstreamComposerRead(pc.Auth, namespace, repository, slugPerm)
15351628
_, resp, err = pc.APIClient.ReposApi.ReposUpstreamComposerReadExecute(req)
1629+
case Conda:
1630+
req := pc.APIClient.ReposApi.ReposUpstreamCondaRead(pc.Auth, namespace, repository, slugPerm)
1631+
_, resp, err = pc.APIClient.ReposApi.ReposUpstreamCondaReadExecute(req)
15361632
case Cran:
15371633
req := pc.APIClient.ReposApi.ReposUpstreamCranRead(pc.Auth, namespace, repository, slugPerm)
15381634
_, resp, err = pc.APIClient.ReposApi.ReposUpstreamCranReadExecute(req)

docs/resources/repository_upstream.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ resource "cloudsmith_repository_upstream" "crates_io" {
3535
namespace = "${data.cloudsmith_organization.my_organization.slug_perm}"
3636
repository = "${resource.cloudsmith_repository.my_repository.slug_perm}"
3737
upstream_type = "cargo"
38-
upstream_url = "https://crates.io"
38+
upstream_url = "https://index.crates.io"
3939
}
4040
```
4141

@@ -51,6 +51,18 @@ resource "cloudsmith_repository_upstream" "packagist" {
5151
}
5252
```
5353

54+
### Conda
55+
56+
```hcl
57+
resource "cloudsmith_repository_upstream" "conda_forge" {
58+
name = "Conda Forge"
59+
namespace = "${data.cloudsmith_organization.my_organization.slug_perm}"
60+
repository = "${resource.cloudsmith_repository.my_repository.slug_perm}"
61+
upstream_type = "conda"
62+
upstream_url = "https://conda.anaconda.org/conda-forge"
63+
}
64+
```
65+
5466
### Cran
5567

5668
```hcl
@@ -259,7 +271,7 @@ The following arguments are supported:
259271
| `priority` | N | number | N/A | Upstream sources are selected for resolving requests by sequential order (1..n), followed by creation date. |
260272
| `repository` | Y | string | N/A | The Repository to which the upstream belongs. |
261273
| `upstream_distribution` | N | string | N/A | Used only in conjunction with an `upstream_type` of `"deb"` to declare the [distribution](https://wiki.debian.org/DebianRepository/Format#Overview) to fetch from the upstream. |
262-
| `upstream_type` | Y | string | `"cargo"`<br>`"composer"`<br>`"cran"`<br>`"dart"`<br>`"deb"`<br>`"docker"`<br>`"go"`<br>`"helm"`<br>`"maven"`<br>`"npm"`<br>`"nuget"`<br>`"python"`<br>`"rpm"`<br>`"ruby"`<br>`"swift"` | The type of Upstream. |
274+
| `upstream_type` | Y | string | `"cargo"`<br>`"composer"`<br>`"conda"`<br>`"cran"`<br>`"dart"`<br>`"deb"`<br>`"docker"`<br>`"go"`<br>`"helm"`<br>`"maven"`<br>`"npm"`<br>`"nuget"`<br>`"python"`<br>`"rpm"`<br>`"ruby"`<br>`"swift"` | The type of Upstream. |
263275
| `upstream_url` | Y | string | N/A | The URL for this upstream source. This must be a fully qualified URL including any path elements required to reach the root of the repository. The URL cannot end with a trailing slash. |
264276
| `verify_ssl` | N | bool | N/A | If enabled, SSL certificates are verified when requests are made to this upstream. It's recommended to leave this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. Please note this only applies to HTTPS upstreams. |
265277

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/cloudsmith-io/terraform-provider-cloudsmith
33
go 1.19
44

55
require (
6-
github.com/cloudsmith-io/cloudsmith-api-go v0.0.49
6+
github.com/cloudsmith-io/cloudsmith-api-go v0.0.50
77
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
88
github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1
99
github.com/samber/lo v1.36.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ github.com/cloudsmith-io/cloudsmith-api-go v0.0.47 h1:BQ2H4ImSZLlxoBqAsfFy6jVI+4
3131
github.com/cloudsmith-io/cloudsmith-api-go v0.0.47/go.mod h1:xHTDgU8TyMXiWUZdn2OQR7AaZdz9M5SrNenyQU44zGQ=
3232
github.com/cloudsmith-io/cloudsmith-api-go v0.0.49 h1:L9zUEtpF5BJd/3UHkheU1sFEm/eB5IQbyDnm0z6+KFs=
3333
github.com/cloudsmith-io/cloudsmith-api-go v0.0.49/go.mod h1:xHTDgU8TyMXiWUZdn2OQR7AaZdz9M5SrNenyQU44zGQ=
34+
github.com/cloudsmith-io/cloudsmith-api-go v0.0.50 h1:wXOwzDvrMPNV6c7LNvO6cLOuphKH08/0gCmf8XFtblE=
35+
github.com/cloudsmith-io/cloudsmith-api-go v0.0.50/go.mod h1:xHTDgU8TyMXiWUZdn2OQR7AaZdz9M5SrNenyQU44zGQ=
3436
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
3537
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3638
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=

0 commit comments

Comments
 (0)