forked from scaleway/scaleway-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(registry): add scaleway_registry_namespace_beta resource (scalew…
- Loading branch information
1 parent
11f6428
commit a066b56
Showing
34 changed files
with
1,819 additions
and
126 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package scaleway | ||
|
||
import ( | ||
"github.com/hashicorp/terraform-plugin-sdk/helper/schema" | ||
"github.com/scaleway/scaleway-sdk-go/api/registry/v1" | ||
"github.com/scaleway/scaleway-sdk-go/scw" | ||
) | ||
|
||
// registryNamespaceAPIWithRegion returns a new container registry API and the region. | ||
func registryNamespaceAPIWithRegion(d *schema.ResourceData, m interface{}) (*registry.API, scw.Region, error) { | ||
meta := m.(*Meta) | ||
api := registry.NewAPI(meta.scwClient) | ||
|
||
region, err := extractRegion(d, meta) | ||
return api, region, err | ||
} | ||
|
||
// registryNamespaceAPIWithRegionAndID returns a new container registry API, region and ID. | ||
func registryNamespaceAPIWithRegionAndID(m interface{}, id string) (*registry.API, scw.Region, string, error) { | ||
meta := m.(*Meta) | ||
api := registry.NewAPI(meta.scwClient) | ||
|
||
region, id, err := parseRegionalID(id) | ||
return api, region, id, err | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
package scaleway | ||
|
||
import ( | ||
"github.com/hashicorp/terraform-plugin-sdk/helper/schema" | ||
"github.com/scaleway/scaleway-sdk-go/api/registry/v1" | ||
"github.com/scaleway/scaleway-sdk-go/scw" | ||
) | ||
|
||
func resourceScalewayRegistryNamespaceBeta() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: resourceScalewayRegistryNamespaceBetaCreate, | ||
Read: resourceScalewayRegistryNamespaceBetaRead, | ||
Update: resourceScalewayRegistryNamespaceBetaUpdate, | ||
Delete: resourceScalewayRegistryNamespaceBetaDelete, | ||
Importer: &schema.ResourceImporter{ | ||
State: schema.ImportStatePassthrough, | ||
}, | ||
SchemaVersion: 0, | ||
Schema: map[string]*schema.Schema{ | ||
"name": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
Description: "The name of the container registry namespace", | ||
}, | ||
"description": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
Description: "The description of the container registry namespace", | ||
}, | ||
"is_public": { | ||
Type: schema.TypeBool, | ||
Optional: true, | ||
Description: "Define the default visibity policy", | ||
}, | ||
"endpoint": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
Description: "The endpoint reachable by docker", | ||
}, | ||
"region": regionSchema(), | ||
"organization_id": organizationIDSchema(), | ||
}, | ||
} | ||
} | ||
|
||
func resourceScalewayRegistryNamespaceBetaCreate(d *schema.ResourceData, m interface{}) error { | ||
api, region, err := registryNamespaceAPIWithRegion(d, m) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
ns, err := api.CreateNamespace(®istry.CreateNamespaceRequest{ | ||
Region: region, | ||
OrganizationID: d.Get("organization_id").(string), | ||
Name: d.Get("name").(string), | ||
Description: d.Get("description").(string), | ||
IsPublic: d.Get("is_public").(bool), | ||
}) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
d.SetId(newRegionalId(region, ns.ID)) | ||
|
||
return resourceScalewayRegistryNamespaceBetaRead(d, m) | ||
} | ||
|
||
func resourceScalewayRegistryNamespaceBetaRead(d *schema.ResourceData, m interface{}) error { | ||
api, region, id, err := registryNamespaceAPIWithRegionAndID(m, d.Id()) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
ns, err := api.GetNamespace(®istry.GetNamespaceRequest{ | ||
Region: region, | ||
NamespaceID: id, | ||
}) | ||
|
||
if err != nil { | ||
if is404Error(err) { | ||
d.SetId("") | ||
return nil | ||
} | ||
return err | ||
} | ||
|
||
d.Set("name", ns.Name) | ||
d.Set("description", ns.Description) | ||
d.Set("organization_id", ns.OrganizationID) | ||
d.Set("is_public", ns.IsPublic) | ||
d.Set("endpoint", ns.Endpoint) | ||
d.Set("region", ns.Region) | ||
|
||
return nil | ||
} | ||
|
||
func resourceScalewayRegistryNamespaceBetaUpdate(d *schema.ResourceData, m interface{}) error { | ||
api, region, id, err := registryNamespaceAPIWithRegionAndID(m, d.Id()) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
if d.HasChange("description") || d.HasChange("is_public") { | ||
if _, err := api.UpdateNamespace(®istry.UpdateNamespaceRequest{ | ||
Region: region, | ||
NamespaceID: id, | ||
Description: scw.StringPtr(d.Get("description").(string)), | ||
IsPublic: scw.BoolPtr(d.Get("is_public").(bool)), | ||
}); err != nil { | ||
return err | ||
} | ||
} | ||
|
||
return resourceScalewayRegistryNamespaceBetaRead(d, m) | ||
} | ||
|
||
func resourceScalewayRegistryNamespaceBetaDelete(d *schema.ResourceData, m interface{}) error { | ||
api, region, id, err := registryNamespaceAPIWithRegionAndID(m, d.Id()) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
_, err = api.DeleteNamespace(®istry.DeleteNamespaceRequest{ | ||
Region: region, | ||
NamespaceID: id, | ||
}) | ||
|
||
if err != nil && !is404Error(err) { | ||
return err | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
package scaleway | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/helper/resource" | ||
"github.com/hashicorp/terraform-plugin-sdk/terraform" | ||
"github.com/scaleway/scaleway-sdk-go/api/registry/v1" | ||
) | ||
|
||
func TestRegistryNamespaceBeta(t *testing.T) { | ||
resource.ParallelTest(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
Providers: testAccProviders, | ||
CheckDestroy: testAccCheckScalewayRegistryNamespaceBetaDestroy, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: ` | ||
resource scaleway_registry_namespace_beta cr01 { | ||
name = "test-cr" | ||
} | ||
`, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccCheckScalewayRegistryNamespaceBetaExists("scaleway_registry_namespace_beta.cr01"), | ||
resource.TestCheckResourceAttr("scaleway_registry_namespace_beta.cr01", "name", "test-cr"), | ||
testCheckResourceAttrUUID("scaleway_registry_namespace_beta.cr01", "id"), | ||
), | ||
}, | ||
{ | ||
Config: ` | ||
resource scaleway_registry_namespace_beta cr01 { | ||
name = "test-cr" | ||
description = "test registry namespace" | ||
is_public = true | ||
} | ||
`, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccCheckScalewayRegistryNamespaceBetaExists("scaleway_registry_namespace_beta.cr01"), | ||
resource.TestCheckResourceAttr("scaleway_registry_namespace_beta.cr01", "description", "test registry namespace"), | ||
resource.TestCheckResourceAttr("scaleway_registry_namespace_beta.cr01", "is_public", "true"), | ||
testCheckResourceAttrUUID("scaleway_registry_namespace_beta.cr01", "id"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccCheckScalewayRegistryNamespaceBetaExists(n string) resource.TestCheckFunc { | ||
return func(s *terraform.State) error { | ||
rs, ok := s.RootModule().Resources[n] | ||
if !ok { | ||
return fmt.Errorf("resource not found: %s", n) | ||
} | ||
|
||
api, region, id, err := registryNamespaceAPIWithRegionAndID(testAccProvider.Meta(), rs.Primary.ID) | ||
if err != nil { | ||
return nil | ||
} | ||
|
||
_, err = api.GetNamespace(®istry.GetNamespaceRequest{ | ||
NamespaceID: id, | ||
Region: region, | ||
}) | ||
|
||
if err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} | ||
} | ||
|
||
func testAccCheckScalewayRegistryNamespaceBetaDestroy(s *terraform.State) error { | ||
for _, rs := range s.RootModule().Resources { | ||
if rs.Type != "scaleway_registry_namespace_beta" { | ||
continue | ||
} | ||
|
||
api, region, id, err := registryNamespaceAPIWithRegionAndID(testAccProvider.Meta(), rs.Primary.ID) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
_, err = api.DeleteNamespace(®istry.DeleteNamespaceRequest{ | ||
NamespaceID: id, | ||
Region: region, | ||
}) | ||
|
||
if err == nil { | ||
return fmt.Errorf("namespace (%s) still exists", rs.Primary.ID) | ||
} | ||
|
||
if !is404Error(err) { | ||
return err | ||
} | ||
} | ||
|
||
return nil | ||
} |
50 changes: 50 additions & 0 deletions
50
vendor/github.com/scaleway/scaleway-sdk-go/api/baremetal/v1alpha1/baremetal_sdk.go
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.