Skip to content

Commit

Permalink
fix: return errors in data sources (#40)
Browse files Browse the repository at this point in the history
  • Loading branch information
nrwiersma authored Feb 10, 2025
1 parent b889328 commit e427a7e
Show file tree
Hide file tree
Showing 13 changed files with 284 additions and 40 deletions.
27 changes: 26 additions & 1 deletion ec/armada/data_source_armada.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceArmada returns the data source resource for an Armada.
Expand All @@ -18,9 +21,31 @@ func DataSourceArmada() *schema.Resource {
}

func dataSourceArmadaRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)
env := d.Get("metadata.0.environment").(string)
d.SetId(ec.ScopedName(env, name))

return resourceArmadaRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.ArmadaV1().Armadas(env).Get(ctx, name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("Armada %q not found in environment %q", name, env)
}
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, armadaSchema())
if err != nil {
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
27 changes: 26 additions & 1 deletion ec/armada/data_source_armadaset.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceArmadaSet returns the data source resource for an ArmadaSet.
Expand All @@ -18,9 +21,31 @@ func DataSourceArmadaSet() *schema.Resource {
}

func dataSourceArmadaSetRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)
env := d.Get("metadata.0.environment").(string)
d.SetId(ec.ScopedName(env, name))

return resourceArmadaSetRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.ArmadaV1().ArmadaSets(env).Get(ctx, name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("ArmadaSet %q not found in environment %q", name, env)
}
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, armadaSetSchema())
if err != nil {
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
28 changes: 27 additions & 1 deletion ec/container/data_source_branch.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import (

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceBranch returns the data source resource for a Branch.
Expand All @@ -17,8 +21,30 @@ func DataSourceBranch() *schema.Resource {
}

func dataSourceBranchRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)
d.SetId(name)

return resourceBranchRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.ContainerV1().Branches().Get(ctx, name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("Branch %q not found", name)
}
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, branchSchema())
if err != nil {
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
12 changes: 4 additions & 8 deletions ec/container/data_source_image.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,10 @@ func dataSourceImageRead(ctx context.Context, d *schema.ResourceData, m any) dia
case hasName:
obj, err = clientSet.ContainerV1().Images(branch).Get(ctx, name.(string), metav1.GetOptions{})
if err != nil {
switch {
case apierrors.IsNotFound(err):
d.SetId("")
return nil
default:
return diag.FromErr(err)
if apierrors.IsNotFound(err) {
return diag.Errorf("Image %q not found in branch %q", name, branch)
}
return diag.FromErr(err)
}
case hasImage:
fieldSelector := map[string]string{
Expand All @@ -60,8 +57,7 @@ func dataSourceImageRead(ctx context.Context, d *schema.ResourceData, m any) dia
return diag.FromErr(err)
}
if len(list.Items) == 0 {
d.SetId("")
return nil
return diag.Errorf("Image %q not found in branch %q", name, branch)
}
latestImg := slices.MaxFunc(list.Items, func(a, b containerv1.Image) int {
switch {
Expand Down
28 changes: 27 additions & 1 deletion ec/core/data_source_core_environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import (

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceEnvironment returns the data source resource for an Environment.
Expand All @@ -18,7 +22,29 @@ func DataSourceEnvironment() *schema.Resource {

func dataSourceEnvironmentRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
name := d.Get("metadata.0.name").(string)
inst, _ := d.Get("instance").(string)
d.SetId(name)

return resourceEnvironmentRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.CoreV1().Environments().Get(ctx, name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("Environment %q not found", name)
}
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, environmentSchema())
if err != nil {
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
13 changes: 5 additions & 8 deletions ec/core/data_source_core_location.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,20 @@ func DataSourceLocation() *schema.Resource {

func dataSourceLocationRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)

clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

name := d.Get("metadata.0.name").(string)

var obj *corev1.Location
obj, err = clientSet.CoreV1().Locations().Get(ctx, name, metav1.GetOptions{})
if err != nil {
switch {
case apierrors.IsNotFound(err):
d.SetId("")
return nil
default:
return diag.FromErr(err)
if apierrors.IsNotFound(err) {
return diag.Errorf("Location %q not found", name)
}
return diag.FromErr(err)
}

d.SetId(name)
Expand Down
27 changes: 26 additions & 1 deletion ec/core/data_source_core_region.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceRegion returns the data source resource for a Region.
Expand All @@ -18,9 +21,31 @@ func DataSourceRegion() *schema.Resource {
}

func dataSourceRegionRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)
env := d.Get("metadata.0.environment").(string)
d.SetId(ec.ScopedName(env, name))

return resourceRegionRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.CoreV1().Regions(env).Get(ctx, name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("Region %q not found in environment %q", name, env)
}
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, regionSchema())
if err != nil {
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
28 changes: 27 additions & 1 deletion ec/core/data_source_core_site.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import (

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceSite returns the data source resource for a Site.
Expand All @@ -17,8 +21,30 @@ func DataSourceSite() *schema.Resource {
}

func dataSourceSiteRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)
d.SetId(name)

return resourceSiteRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.CoreV1().Sites().Get(ctx, name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("Site %q not found", name)
}
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, siteSchema())
if err != nil {
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
27 changes: 26 additions & 1 deletion ec/formation/data_source_formation.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceFormation returns the data source resource for a Formation.
Expand All @@ -18,9 +21,31 @@ func DataSourceFormation() *schema.Resource {
}

func dataSourceFormationRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)
env := d.Get("metadata.0.environment").(string)
d.SetId(ec.ScopedName(env, name))

return resourceFormationRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.FormationV1Beta1().Formations(env).Get(ctx, name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("Formation %q not found in environment %q", name, env)
}
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, formationSchema())
if err != nil {
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
27 changes: 26 additions & 1 deletion ec/formation/data_source_vessel.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/nitrado/terraform-provider-ec/ec"
"github.com/nitrado/terraform-provider-ec/pkg/resource"
apierrors "gitlab.com/nitrado/b2b/ec/apicore/api/errors"
metav1 "gitlab.com/nitrado/b2b/ec/apicore/apis/meta/v1"
)

// DataSourceVessel returns the data source resource for a Vessel.
Expand All @@ -18,9 +21,31 @@ func DataSourceVessel() *schema.Resource {
}

func dataSourceVesselRead(ctx context.Context, d *schema.ResourceData, m any) diag.Diagnostics {
inst, _ := d.Get("instance").(string)
name := d.Get("metadata.0.name").(string)
env := d.Get("metadata.0.environment").(string)
d.SetId(ec.ScopedName(env, name))

return resourceVesselRead(ctx, d, m)
clientSet, err := ec.ResolveClientSet(m, inst)
if err != nil {
return diag.FromErr(err)
}

obj, err := clientSet.FormationV1Beta1().Vessels(env).Get(ctx, name, metav1.GetOptions{})
if err != nil {
return diag.FromErr(err)
}

data, err := ec.Converter().Flatten(obj, vesselSchema())
if err != nil {
if apierrors.IsNotFound(err) {
return diag.Errorf("Vessel %q not found in environment %q", name, env)
}
return diag.FromErr(err)
}

if err = resource.SetData(d, data); err != nil {
return diag.FromErr(err)
}
return nil
}
Loading

0 comments on commit e427a7e

Please sign in to comment.