Skip to content

Commit

Permalink
feat: add support for multiple instances
Browse files Browse the repository at this point in the history
  • Loading branch information
nrwiersma committed Feb 1, 2024
1 parent fc81609 commit dc200eb
Show file tree
Hide file tree
Showing 12 changed files with 303 additions and 95 deletions.
12 changes: 8 additions & 4 deletions ec/armada/resource_armada.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ func ResourceArmada() *schema.Resource {
}

func resourceArmadaRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down Expand Up @@ -58,7 +59,8 @@ func resourceArmadaRead(ctx context.Context, d *schema.ResourceData, m any) diag
}

func resourceArmadaCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -83,7 +85,8 @@ func resourceArmadaCreate(ctx context.Context, d *schema.ResourceData, m any) di
}

func resourceArmadaUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -108,7 +111,8 @@ func resourceArmadaUpdate(ctx context.Context, d *schema.ResourceData, m any) di
}

func resourceArmadaDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down
12 changes: 8 additions & 4 deletions ec/armada/resource_armadaset.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ func ResourceArmadaSet() *schema.Resource {
}

func resourceArmadaSetRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down Expand Up @@ -58,7 +59,8 @@ func resourceArmadaSetRead(ctx context.Context, d *schema.ResourceData, m any) d
}

func resourceArmadaSetCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -83,7 +85,8 @@ func resourceArmadaSetCreate(ctx context.Context, d *schema.ResourceData, m any)
}

func resourceArmadaSetUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -108,7 +111,8 @@ func resourceArmadaSetUpdate(ctx context.Context, d *schema.ResourceData, m any)
}

func resourceArmadaSetDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down
12 changes: 8 additions & 4 deletions ec/container/resource_branch.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ func ResourceBranch() *schema.Resource {
}

func resourceBranchRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down Expand Up @@ -58,7 +59,8 @@ func resourceBranchRead(ctx context.Context, d *schema.ResourceData, m any) diag
}

func resourceBranchCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -83,7 +85,8 @@ func resourceBranchCreate(ctx context.Context, d *schema.ResourceData, m any) di
}

func resourceBranchUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -108,7 +111,8 @@ func resourceBranchUpdate(ctx context.Context, d *schema.ResourceData, m any) di
}

func resourceBranchDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down
12 changes: 8 additions & 4 deletions ec/core/resource_core_environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ func ResourceEnvironment() *schema.Resource {
}

func resourceEnvironmentRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down Expand Up @@ -58,7 +59,8 @@ func resourceEnvironmentRead(ctx context.Context, d *schema.ResourceData, m any)
}

func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -81,7 +83,8 @@ func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, m an
}

func resourceEnvironmentUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -104,7 +107,8 @@ func resourceEnvironmentUpdate(ctx context.Context, d *schema.ResourceData, m an
}

func resourceEnvironmentDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down
12 changes: 8 additions & 4 deletions ec/core/resource_core_region.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ func ResourceRegion() *schema.Resource {
}

func resourceRegionRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down Expand Up @@ -58,7 +59,8 @@ func resourceRegionRead(ctx context.Context, d *schema.ResourceData, m any) diag
}

func resourceRegionCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -83,7 +85,8 @@ func resourceRegionCreate(ctx context.Context, d *schema.ResourceData, m any) di
}

func resourceRegionUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -108,7 +111,8 @@ func resourceRegionUpdate(ctx context.Context, d *schema.ResourceData, m any) di
}

func resourceRegionDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down
12 changes: 8 additions & 4 deletions ec/core/resource_core_site.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ func ResourceSite() *schema.Resource {
}

func resourceSiteRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down Expand Up @@ -58,7 +59,8 @@ func resourceSiteRead(ctx context.Context, d *schema.ResourceData, m any) diag.D
}

func resourceSiteCreate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -83,7 +85,8 @@ func resourceSiteCreate(ctx context.Context, d *schema.ResourceData, m any) diag
}

func resourceSiteUpdate(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -108,7 +111,8 @@ func resourceSiteUpdate(ctx context.Context, d *schema.ResourceData, m any) diag
}

func resourceSiteDelete(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
clientSet, err := ec.ResolveClientSet(m)
inst, _ := d.Get("instance").(string)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}
Expand Down
17 changes: 12 additions & 5 deletions ec/core/resource_core_site_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ func TestResourceSites(t *testing.T) {
{
Config: testResourceSitesConfigBasic(name),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr("ec_core_site.test", "instance", "test"),
resource.TestCheckResourceAttr("ec_core_site.test", "metadata.0.name", name),
resource.TestCheckResourceAttr("ec_core_site.test", "spec.#", "1"),
resource.TestCheckResourceAttr("ec_core_site.test", "spec.0.description", "My Site"),
Expand All @@ -38,6 +39,7 @@ func TestResourceSites(t *testing.T) {
{
Config: testResourceSitesConfigBasic2(name),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr("ec_core_site.test", "instance", "test"),
resource.TestCheckResourceAttr("ec_core_site.test", "metadata.0.name", name),
resource.TestCheckResourceAttr("ec_core_site.test", "metadata.0.labels.foo", "bar"),
resource.TestCheckResourceAttr("ec_core_site.test", "spec.#", "1"),
Expand All @@ -53,6 +55,7 @@ func TestResourceSites(t *testing.T) {
{
Config: testResourceSitesConfigBasicWithEnv(name),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr("ec_core_site.test", "instance", "test"),
resource.TestCheckResourceAttr("ec_core_site.test", "metadata.0.name", name),
resource.TestCheckResourceAttr("ec_core_site.test", "spec.#", "1"),
resource.TestCheckResourceAttr("ec_core_site.test", "spec.0.description", "My Other Site"),
Expand All @@ -72,16 +75,18 @@ func TestResourceSites(t *testing.T) {
),
},
{
ResourceName: "ec_core_site.test",
ImportState: true,
ImportStateVerify: true,
ResourceName: "ec_core_site.test",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"instance"},
},
},
})
}

func testResourceSitesConfigBasic(name string) string {
return fmt.Sprintf(`resource "ec_core_site" "test" {
instance = "test"
metadata {
name = "%s"
}
Expand All @@ -103,6 +108,7 @@ func testResourceSitesConfigBasic(name string) string {

func testResourceSitesConfigBasic2(name string) string {
return fmt.Sprintf(`resource "ec_core_site" "test" {
instance = "test"
metadata {
name = "%s"
labels = {
Expand All @@ -127,6 +133,7 @@ func testResourceSitesConfigBasic2(name string) string {

func testResourceSitesConfigBasicWithEnv(name string) string {
return fmt.Sprintf(`resource "ec_core_site" "test" {
instance = "test"
metadata {
name = "%s"
}
Expand Down Expand Up @@ -168,15 +175,15 @@ func testResourceSitesConfigBasicWithEnv(name string) string {
func testCheckSiteDestroy(cs clientset.Interface) func(s *terraform.State) error {
return func(s *terraform.State) error {
for _, rs := range s.RootModule().Resources {
if rs.Type != "ec_armada_site" {
if rs.Type != "ec_core_site" {
continue
}

name := rs.Primary.ID
resp, err := cs.CoreV1().Sites().Get(context.Background(), name, metav1.GetOptions{})
if err == nil {
if resp.Name == rs.Primary.ID {
return fmt.Errorf("Site still exists: %s", rs.Primary.ID)
return fmt.Errorf("site still exists: %s", rs.Primary.ID)
}
}
}
Expand Down
5 changes: 5 additions & 0 deletions ec/core/schema_environment.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 34 additions & 4 deletions ec/ec.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,50 @@ package ec

import (
"errors"
"fmt"
"strings"

"github.com/nitrado/tfconv"
"gitlab.com/nitrado/b2b/ec/core/pkg/apiclient/clientset"
"k8s.io/apimachinery/pkg/api/resource"
)

// ProviderContext contains connection context information.
type ProviderContext struct {
defaultCS clientset.Interface
instances map[string]clientset.Interface
}

// NewProviderContext returns a provider context with the given default clientset and instances.
func NewProviderContext(defCS clientset.Interface, instances map[string]clientset.Interface) ProviderContext {
if instances == nil {
instances = map[string]clientset.Interface{}
}
return ProviderContext{
defaultCS: defCS,
instances: instances,
}
}

// ResolveClientSet resolves the ClientSet from the given context.
func ResolveClientSet(m any) (clientset.Interface, error) {
clientSet, ok := m.(clientset.Interface)
func ResolveClientSet(m any, name string) (clientset.Interface, error) {
connCtx, ok := m.(ProviderContext)
if !ok {
return nil, errors.New("invalid clientset")
return nil, errors.New("invalid connection context")
}

if name == "" {
if connCtx.defaultCS == nil {
return nil, errors.New("no default clientset found")
}
return connCtx.defaultCS, nil
}

cs, ok := connCtx.instances[name]
if !ok || cs == nil {
return nil, fmt.Errorf("instance %q clientset not found", name)
}
return clientSet, nil
return cs, nil
}

// ScopedName returns the encoded name of an object.
Expand Down
Loading

0 comments on commit dc200eb

Please sign in to comment.