Skip to content

Commit

Permalink
add debug loglines
Browse files Browse the repository at this point in the history
  • Loading branch information
maksym-nazarenko committed Dec 25, 2023
1 parent be45bbb commit 661886e
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 18 deletions.
16 changes: 10 additions & 6 deletions mikrotik/internal/utils/struct_copy.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@ import (
"github.com/hashicorp/terraform-plugin-framework/attr"
"github.com/hashicorp/terraform-plugin-framework/diag"
tftypes "github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-log/tflog"
)

// MikrotikStructToTerraformModel is a wrapper for copyStruct() to ensure proper src/dest typing
func MikrotikStructToTerraformModel(src client.Resource, dest interface{}) error {
return copyStruct(src, dest)
func MikrotikStructToTerraformModel(ctx context.Context, src client.Resource, dest interface{}) error {
return copyStruct(ctx, src, dest)
}

// TerraformModelToMikrotikStruct is a wrapper for copyStruct() to ensure proper src/dest typing
func TerraformModelToMikrotikStruct(src interface{}, dest client.Resource) error {
return copyStruct(src, dest)
func TerraformModelToMikrotikStruct(ctx context.Context, src interface{}, dest client.Resource) error {
return copyStruct(ctx, src, dest)
}

// copyStruct copies fields of src struct to fields of dest struct.
Expand All @@ -29,7 +30,7 @@ func TerraformModelToMikrotikStruct(src interface{}, dest client.Resource) error
// Having multiple fields with the same name but different case leads to unpredictable behavior.
//
// If dest struct has no field with particular name, it is skipped.
func copyStruct(src, dest interface{}) error {
func copyStruct(ctx context.Context, src, dest interface{}) error {
if reflect.ValueOf(dest).Kind() != reflect.Pointer {
return errors.New("destination must be a pointer")
}
Expand All @@ -52,17 +53,20 @@ func copyStruct(src, dest interface{}) error {
func(s string) bool {
return strings.EqualFold(srcFieldType.Name, s)
})

tflog.Debug(ctx, fmt.Sprintf("trying to copy struct field %q to %q", srcFieldType.Name, destFieldType.Name))
if !destField.IsValid() || !found {
// skip if dest struct does not have it (by name)
tflog.Debug(ctx, "target field was not found")
continue
}
if srcFieldType.PkgPath != "" || destFieldType.PkgPath != "" {
// skip unexported fields
tflog.Debug(ctx, "the source/target fields are unexported")
continue
}
if !destField.CanSet() {
// skip if dest field is not settable
tflog.Debug(ctx, "target field is not settable")
continue
}

Expand Down
7 changes: 4 additions & 3 deletions mikrotik/internal/utils/struct_copy_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package utils

import (
"context"
"testing"

"github.com/ddelnano/terraform-provider-mikrotik/client"
Expand Down Expand Up @@ -334,7 +335,7 @@ func TestCopyStruct(t *testing.T) {
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
err := copyStruct(tc.src, tc.dest)
err := copyStruct(context.TODO(), tc.src, tc.dest)
if tc.expectError {
require.Error(t, err)
return
Expand Down Expand Up @@ -395,7 +396,7 @@ func TestCopyTerraformToMikrotik(t *testing.T) {
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
err := TerraformModelToMikrotikStruct(tc.src, tc.dest)
err := TerraformModelToMikrotikStruct(context.TODO(), tc.src, tc.dest)
if tc.expectError {
require.Error(t, err)
return
Expand Down Expand Up @@ -469,7 +470,7 @@ func TestCopyMikrotikToTerraform(t *testing.T) {
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
err := MikrotikStructToTerraformModel(tc.src, tc.dest)
err := MikrotikStructToTerraformModel(context.TODO(), tc.src, tc.dest)
if tc.expectError {
require.Error(t, err)
return
Expand Down
14 changes: 7 additions & 7 deletions mikrotik/resource_generic_crud_operations.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func GenericCreateResource(terraformModel interface{}, mikrotikModel client.Reso
if resp.Diagnostics.HasError() {
return
}
if err := utils.TerraformModelToMikrotikStruct(terraformModel, mikrotikModel); err != nil {
if err := utils.TerraformModelToMikrotikStruct(ctx, terraformModel, mikrotikModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: Terraform -> MikroTik", err.Error())
return
}
Expand All @@ -37,7 +37,7 @@ func GenericCreateResource(terraformModel interface{}, mikrotikModel client.Reso
return
}

if err := utils.MikrotikStructToTerraformModel(created, terraformModel); err != nil {
if err := utils.MikrotikStructToTerraformModel(ctx, created, terraformModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: MikroTik -> Terraform", err.Error())
return
}
Expand All @@ -56,7 +56,7 @@ func GenericReadResource(terraformModel interface{}, mikrotikModel client.Resour
if resp.Diagnostics.HasError() {
return
}
if err := utils.TerraformModelToMikrotikStruct(terraformModel, mikrotikModel); err != nil {
if err := utils.TerraformModelToMikrotikStruct(ctx, terraformModel, mikrotikModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: Terraform -> MikroTik", err.Error())
return
}
Expand All @@ -73,7 +73,7 @@ func GenericReadResource(terraformModel interface{}, mikrotikModel client.Resour
)
return
}
if err := utils.MikrotikStructToTerraformModel(resource, terraformModel); err != nil {
if err := utils.MikrotikStructToTerraformModel(ctx, resource, terraformModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: MikroTik -> Terraform", err.Error())
return
}
Expand All @@ -92,7 +92,7 @@ func GenericUpdateResource(terraformModel interface{}, mikrotikModel client.Reso
if resp.Diagnostics.HasError() {
return
}
if err := utils.TerraformModelToMikrotikStruct(terraformModel, mikrotikModel); err != nil {
if err := utils.TerraformModelToMikrotikStruct(ctx, terraformModel, mikrotikModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: Terraform -> MikroTik", err.Error())
return
}
Expand All @@ -101,7 +101,7 @@ func GenericUpdateResource(terraformModel interface{}, mikrotikModel client.Reso
resp.Diagnostics.AddError("Update failed", err.Error())
return
}
if err := utils.MikrotikStructToTerraformModel(updated, terraformModel); err != nil {
if err := utils.MikrotikStructToTerraformModel(ctx, updated, terraformModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: MikroTik -> Terraform", err.Error())
return
}
Expand All @@ -118,7 +118,7 @@ func GenericDeleteResource(terraformModel interface{}, mikrotikModel client.Reso
return
}

if err := utils.TerraformModelToMikrotikStruct(terraformModel, mikrotikModel); err != nil {
if err := utils.TerraformModelToMikrotikStruct(ctx, terraformModel, mikrotikModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: Terraform -> MikroTik", err.Error())
return
}
Expand Down
4 changes: 2 additions & 2 deletions mikrotik/resource_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func (r *pool) Update(ctx context.Context, req resource.UpdateRequest, resp *res
terraformModel.NextPool = tftypes.StringValue("none")
}

if err := utils.TerraformModelToMikrotikStruct(&terraformModel, &mikrotikModel); err != nil {
if err := utils.TerraformModelToMikrotikStruct(ctx, &terraformModel, &mikrotikModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: Terraform -> MikroTik", err.Error())
return
}
Expand All @@ -131,7 +131,7 @@ func (r *pool) Update(ctx context.Context, req resource.UpdateRequest, resp *res
resp.Diagnostics.AddError("Update failed", err.Error())
return
}
if err := utils.MikrotikStructToTerraformModel(updated, &terraformModel); err != nil {
if err := utils.MikrotikStructToTerraformModel(ctx, updated, &terraformModel); err != nil {
resp.Diagnostics.AddError("Cannot copy model: MikroTik -> Terraform", err.Error())
return
}
Expand Down

0 comments on commit 661886e

Please sign in to comment.