Skip to content

Commit dd9c5fa

Browse files
authored
Merge pull request #534 from magodo/slog
Changing the logger type to `slog.Logger`
2 parents 523f5b8 + 9e046f0 commit dd9c5fa

File tree

14 files changed

+186
-109
lines changed

14 files changed

+186
-109
lines changed

.github/workflows/codeql.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
- name: Set up Go
3535
uses: actions/setup-go@v1
3636
with:
37-
go-version: 1.19
37+
go-version: 1.22
3838

3939
- name: Build
4040
run: |

.github/workflows/pr.yaml

+4-6
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ jobs:
88
- name: Set up Go
99
uses: actions/setup-go@v1
1010
with:
11-
go-version: 1.19
12-
11+
go-version: 1.22
1312
- name: Check out code into the Go module directory
1413
uses: actions/checkout@v2
1514

@@ -22,10 +21,9 @@ jobs:
2221
runs-on: ubuntu-latest
2322
steps:
2423
- name: Checkout Source
25-
uses: actions/checkout@v2
26-
24+
uses: actions/checkout@v3
2725
- name: Run Gosec Security Scanner
28-
uses: securego/gosec@v2.16.0
26+
uses: securego/gosec@2ae137abcf405533ad6e549e9363e58e4f6e8b7d
2927
with:
3028
args: './...'
3129

@@ -36,7 +34,7 @@ jobs:
3634
- name: Set up Go
3735
uses: actions/setup-go@v1
3836
with:
39-
go-version: 1.19
37+
go-version: 1.22
4038

4139
- name: Check out code into the Go module directory
4240
uses: actions/checkout@v2

flag.go

+1-15
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package main
33
import (
44
"fmt"
55
"os"
6-
"os/exec"
76
"strings"
87

98
"github.com/Azure/aztfexport/internal/cfgfile"
@@ -15,8 +14,6 @@ import (
1514
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
1615
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
1716
"github.com/gofrs/uuid"
18-
"github.com/hashicorp/go-hclog"
19-
"github.com/magodo/terraform-client-go/tfclient"
2017
"github.com/urfave/cli/v2"
2118
)
2219

@@ -335,6 +332,7 @@ func buildAzureSDKCredAndClientOpt(fset FlagSet) (azcore.TokenCredential, *arm.C
335332
}
336333
}
337334

335+
// BuildCommonConfig builds the CommonConfig from the FlagSet, except the TFClient, which is built afterwards as it requires a logger.
338336
func (f FlagSet) BuildCommonConfig() (config.CommonConfig, error) {
339337
cred, clientOpt, err := buildAzureSDKCredAndClientOpt(f)
340338
if err != nil {
@@ -369,17 +367,5 @@ func (f FlagSet) BuildCommonConfig() (config.CommonConfig, error) {
369367
}
370368
}
371369

372-
if f.hflagTFClientPluginPath != "" {
373-
// #nosec G204
374-
tfc, err := tfclient.New(tfclient.Option{
375-
Cmd: exec.Command(flagset.hflagTFClientPluginPath),
376-
Logger: hclog.NewNullLogger(),
377-
})
378-
if err != nil {
379-
return cfg, err
380-
}
381-
cfg.TFClient = tfc
382-
}
383-
384370
return cfg, nil
385371
}

go.mod

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/Azure/aztfexport
22

3-
go 1.19
3+
go 1.21
44

55
require (
66
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0
@@ -11,7 +11,7 @@ require (
1111
github.com/charmbracelet/bubbletea v0.22.1
1212
github.com/charmbracelet/lipgloss v0.5.0
1313
github.com/gofrs/uuid v3.3.0+incompatible
14-
github.com/hashicorp/go-hclog v1.3.1
14+
github.com/hashicorp/go-hclog v1.6.3
1515
github.com/hashicorp/go-version v1.6.0
1616
github.com/hashicorp/hc-install v0.6.2
1717
github.com/hashicorp/hcl/v2 v2.17.0
@@ -20,8 +20,9 @@ require (
2020
github.com/hashicorp/terraform-json v0.19.0
2121
github.com/hexops/gotextdiff v1.0.3
2222
github.com/magodo/armid v0.0.0-20230511151020-27880e5961c3
23-
github.com/magodo/azlist v0.0.0-20231101012443-e30f2da262c1
23+
github.com/magodo/azlist v0.0.0-20240613024003-b4529218cc6a
2424
github.com/magodo/aztft v0.3.1-0.20240429022627-002cdc06267a
25+
github.com/magodo/slog2hclog v0.0.0-20240614031327-090ebd72a033
2526
github.com/magodo/spinner v0.0.0-20220720073946-50f31b2dc5a6
2627
github.com/magodo/terraform-client-go v0.0.0-20230323074119-02ceb732dd25
2728
github.com/magodo/textinput v0.0.0-20210913072708-7d24f2b4b0c0

go.sum

+36-4
Large diffs are not rendered by default.

internal/meta/base_meta.go

+17-17
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ func (meta *baseMeta) ParallelImport(ctx context.Context, items []*ImportItem) e
298298
// Ensure the state file is removed after this round import, preparing for the next round.
299299
defer os.Remove(stateFile)
300300

301-
log.Printf("[DEBUG] Merging terraform state file %s (tfmerge)", stateFile)
301+
log.Debug("Merging terraform state file (tfmerge)", "file", stateFile)
302302
newState, err := tfmerge.Merge(ctx, meta.tf, meta.baseState, stateFile)
303303
if err != nil {
304304
return fmt.Errorf("failed to merge state file: %v", err)
@@ -667,12 +667,12 @@ func (meta *baseMeta) initImportDirs() error {
667667
}
668668

669669
func (meta *baseMeta) initTF(ctx context.Context) error {
670-
log.Printf("[INFO] Init Terraform")
670+
log.Info("Init Terraform")
671671
execPath, err := FindTerraform(ctx)
672672
if err != nil {
673673
return fmt.Errorf("error finding a terraform exectuable: %w", err)
674674
}
675-
log.Printf("[INFO] Find terraform binary at %s", execPath)
675+
log.Info("Found terraform binary", "path", execPath)
676676

677677
newTF := func(dir string) (*tfexec.Terraform, error) {
678678
tf, err := tfexec.NewTerraform(dir, execPath)
@@ -708,7 +708,7 @@ func (meta *baseMeta) initTF(ctx context.Context) error {
708708
}
709709

710710
func (meta *baseMeta) initProvider(ctx context.Context) error {
711-
log.Printf("[INFO] Init provider")
711+
log.Info("Init provider")
712712

713713
module, diags := tfconfig.LoadModule(meta.outdir)
714714
if diags.HasErrors() {
@@ -721,7 +721,7 @@ func (meta *baseMeta) initProvider(ctx context.Context) error {
721721
}
722722

723723
if module.ProviderConfigs[meta.providerName] == nil {
724-
log.Printf("[INFO] Output directory doesn't contain provider setting, create one then")
724+
log.Info("Output directory doesn't contain provider setting, create one then")
725725
cfgFile := filepath.Join(meta.outdir, meta.outputFileNames.ProviderFileName)
726726
// #nosec G306
727727
if err := os.WriteFile(cfgFile, []byte(meta.buildProviderConfig()), 0644); err != nil {
@@ -730,7 +730,7 @@ func (meta *baseMeta) initProvider(ctx context.Context) error {
730730
}
731731

732732
if tfblock == nil {
733-
log.Printf("[INFO] Output directory doesn't contain terraform block, create one then")
733+
log.Info("Output directory doesn't contain terraform block, create one then")
734734
cfgFile := filepath.Join(meta.outdir, meta.outputFileNames.TerraformFileName)
735735
// #nosec G306
736736
if err := os.WriteFile(cfgFile, []byte(meta.buildTerraformConfig(meta.backendType)), 0644); err != nil {
@@ -744,7 +744,7 @@ func (meta *baseMeta) initProvider(ctx context.Context) error {
744744
opts = append(opts, tfexec.BackendConfig(opt))
745745
}
746746

747-
log.Printf(`[DEBUG] Run "terraform init" for the output directory %s`, meta.outdir)
747+
log.Debug(`Run "terraform init" for the output directory`, "dir", meta.outdir)
748748
if err := meta.tf.Init(ctx, opts...); err != nil {
749749
return fmt.Errorf("error running terraform init for the output directory: %s", err)
750750
}
@@ -766,9 +766,9 @@ func (meta *baseMeta) initProvider(ctx context.Context) error {
766766
return nil, fmt.Errorf("error creating terraform config: %w", err)
767767
}
768768
if meta.devProvider {
769-
log.Printf(`[DEBUG] Skip running "terraform init" for the import directory (dev provider): %s`, meta.importBaseDirs[i])
769+
log.Debug(`Skip running "terraform init" for the import directory (dev provider)`, "dir", meta.importBaseDirs[i])
770770
} else {
771-
log.Printf(`[DEBUG] Run "terraform init" for the import directory %s`, meta.importBaseDirs[i])
771+
log.Debug(`Run "terraform init" for the import directory`, "dir", meta.importBaseDirs[i])
772772
if err := meta.importTFs[i].Init(ctx); err != nil {
773773
return nil, fmt.Errorf("error running terraform init: %s", err)
774774
}
@@ -785,7 +785,7 @@ func (meta *baseMeta) initProvider(ctx context.Context) error {
785785

786786
func (meta *baseMeta) importItem(ctx context.Context, item *ImportItem, importIdx int) {
787787
if item.Skip() {
788-
log.Printf("[INFO] Skipping %s", item.TFResourceId)
788+
log.Info("Skipping resource", "tf_id", item.TFResourceId)
789789
return
790790
}
791791

@@ -807,7 +807,7 @@ func (meta *baseMeta) importItem_tf(ctx context.Context, item *ImportItem, impor
807807
// #nosec G306
808808
if err := os.WriteFile(cfgFile, []byte(tpl), 0644); err != nil {
809809
err := fmt.Errorf("generating resource template file for %s: %w", item.TFAddr, err)
810-
log.Printf("[ERROR] %v", err)
810+
log.Error("Failed to generate resource template file", "error", err, "tf_addr", item.TFAddr)
811811
item.ImportError = err
812812
return
813813
}
@@ -819,13 +819,13 @@ func (meta *baseMeta) importItem_tf(ctx context.Context, item *ImportItem, impor
819819
addr = meta.moduleAddr + "." + addr
820820
}
821821

822-
log.Printf("[INFO] Importing %s as %s", item.TFResourceId, addr)
822+
log.Info("Importing a resource", "tf_id", item.TFResourceId, "tf_addr", addr)
823823
// The actual resource type names in telemetry is redacted
824824
meta.tc.Trace(telemetry.Info, fmt.Sprintf("Importing %s as %s", item.AzureResourceID.TypeString(), addr))
825825

826826
err := tf.Import(ctx, addr, item.TFResourceId)
827827
if err != nil {
828-
log.Printf("[ERROR] Importing %s: %v", item.TFAddr, err)
828+
log.Error("Terraform import failed", "tf_addr", item.TFAddr, "error", err)
829829
meta.tc.Trace(telemetry.Error, fmt.Sprintf("Importing %s failed", item.AzureResourceID.TypeString()))
830830
meta.tc.Trace(telemetry.Error, fmt.Sprintf("Error detail: %v", err))
831831
} else {
@@ -838,7 +838,7 @@ func (meta *baseMeta) importItem_tf(ctx context.Context, item *ImportItem, impor
838838
func (meta *baseMeta) importItem_notf(ctx context.Context, item *ImportItem, importIdx int) {
839839
// Import resources
840840
addr := item.TFAddr.String()
841-
log.Printf("[INFO] Importing %s as %s", item.TFResourceId, addr)
841+
log.Info("Importing a resource", "tf_id", item.TFResourceId, "tf_addr", addr)
842842
// The actual resource type names in telemetry is redacted
843843
meta.tc.Trace(telemetry.Info, fmt.Sprintf("Importing %s as %s", item.AzureResourceID.TypeString(), addr))
844844

@@ -847,7 +847,7 @@ func (meta *baseMeta) importItem_notf(ctx context.Context, item *ImportItem, imp
847847
ID: item.TFResourceId,
848848
})
849849
if diags.HasErrors() {
850-
log.Printf("[ERROR] Importing %s: %v", item.TFAddr, diags)
850+
log.Error("Terraform import failed", "tf_addr", item.TFAddr, "error", diags.Err())
851851
meta.tc.Trace(telemetry.Error, fmt.Sprintf("Importing %s failed", item.AzureResourceID.TypeString()))
852852
meta.tc.Trace(telemetry.Error, fmt.Sprintf("Error detail: %v", diags.Err()))
853853
item.ImportError = diags.Err()
@@ -856,7 +856,7 @@ func (meta *baseMeta) importItem_notf(ctx context.Context, item *ImportItem, imp
856856
}
857857
if len(importResp.ImportedResources) != 1 {
858858
err := fmt.Errorf("expect 1 resource being imported, got=%d", len(importResp.ImportedResources))
859-
log.Printf("[ERROR] %s", err)
859+
log.Error(err.Error())
860860
meta.tc.Trace(telemetry.Error, err.Error())
861861
item.ImportError = err
862862
item.Imported = false
@@ -869,7 +869,7 @@ func (meta *baseMeta) importItem_notf(ctx context.Context, item *ImportItem, imp
869869
Private: res.Private,
870870
})
871871
if diags.HasErrors() {
872-
log.Printf("[ERROR] Reading %s: %v", item.TFAddr, diags)
872+
log.Error("Terraform read a resource failed", "tf_addr", item.TFAddr, "error", diags.Err())
873873
meta.tc.Trace(telemetry.Error, fmt.Sprintf("Reading %s failed", item.AzureResourceID.TypeString()))
874874
meta.tc.Trace(telemetry.Error, fmt.Sprintf("Error detail: %v", diags.Err()))
875875
item.ImportError = diags.Err()

internal/meta/meta_map.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type MetaMap struct {
2121
}
2222

2323
func NewMetaMap(cfg config.Config) (*MetaMap, error) {
24-
log.Printf("[INFO] New map meta")
24+
log.Info("New map meta")
2525
baseMeta, err := NewBaseMeta(cfg.CommonConfig)
2626
if err != nil {
2727
return nil, err
@@ -42,7 +42,7 @@ func (meta MetaMap) ScopeName() string {
4242
func (meta *MetaMap) ListResource(_ context.Context) (ImportList, error) {
4343
var m resmap.ResourceMapping
4444

45-
log.Printf("[DEBUG] Read resource set from mapping file")
45+
log.Debug("Read resource set from mapping file")
4646
b, err := os.ReadFile(meta.mappingFile)
4747
if err != nil {
4848
return nil, fmt.Errorf("reading mapping file %s: %v", meta.mappingFile, err)

internal/meta/meta_query.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type MetaQuery struct {
2222
}
2323

2424
func NewMetaQuery(cfg config.Config) (*MetaQuery, error) {
25-
log.Printf("[INFO] New query meta")
25+
log.Info("New query meta")
2626
baseMeta, err := NewBaseMeta(cfg.CommonConfig)
2727
if err != nil {
2828
return nil, err
@@ -49,26 +49,26 @@ func (meta MetaQuery) ScopeName() string {
4949
}
5050

5151
func (meta *MetaQuery) ListResource(ctx context.Context) (ImportList, error) {
52-
log.Printf("[DEBUG] Query resource set")
52+
log.Debug("Query resource set")
5353
rset, err := meta.queryResourceSet(ctx, meta.argPredicate, meta.recursiveQuery)
5454
if err != nil {
5555
return nil, err
5656
}
5757
var rl []resourceset.TFResource
5858
if meta.useAzAPI() {
59-
log.Printf("[DEBUG] Azure Resource set map to TF resource set")
59+
log.Debug("Azure Resource set map to TF resource set")
6060
rl = rset.ToTFAzAPIResources()
6161
} else {
62-
log.Printf("[DEBUG] Populate resource set")
62+
log.Debug("Populate resource set")
6363
if err := rset.PopulateResource(); err != nil {
6464
return nil, fmt.Errorf("tweaking single resources in the azure resource set: %v", err)
6565
}
66-
log.Printf("[DEBUG] Reduce resource set")
66+
log.Debug("Reduce resource set")
6767
if err := rset.ReduceResource(); err != nil {
6868
return nil, fmt.Errorf("tweaking across resources in the azure resource set: %v", err)
6969
}
7070

71-
log.Printf("[DEBUG] Azure Resource set map to TF resource set")
71+
log.Debug("Azure Resource set map to TF resource set")
7272
rl = rset.ToTFAzureRMResources(meta.parallelism, meta.azureSDKCred, meta.azureSDKClientOpt)
7373
}
7474

internal/meta/meta_res.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type MetaResource struct {
2020
}
2121

2222
func NewMetaResource(cfg config.Config) (*MetaResource, error) {
23-
log.Printf("[INFO] New resource meta")
23+
log.Info("New resource meta")
2424
baseMeta, err := NewBaseMeta(cfg.CommonConfig)
2525
if err != nil {
2626
return nil, err
@@ -51,7 +51,7 @@ func (meta *MetaResource) ListResource(_ context.Context) (ImportList, error) {
5151
},
5252
},
5353
}
54-
log.Printf("[DEBUG] Azure Resource set map to TF resource set")
54+
log.Debug("Azure Resource set map to TF resource set")
5555

5656
var rl []resourceset.TFResource
5757
if meta.useAzAPI() {

internal/meta/meta_rg.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type MetaResourceGroup struct {
2121
}
2222

2323
func NewMetaResourceGroup(cfg config.Config) (*MetaResourceGroup, error) {
24-
log.Printf("[INFO] New resource group meta")
24+
log.Info("New resource group meta")
2525
baseMeta, err := NewBaseMeta(cfg.CommonConfig)
2626
if err != nil {
2727
return nil, err
@@ -42,7 +42,7 @@ func (meta MetaResourceGroup) ScopeName() string {
4242
}
4343

4444
func (meta *MetaResourceGroup) ListResource(ctx context.Context) (ImportList, error) {
45-
log.Printf("[DEBUG] Query resource set")
45+
log.Debug("Query resource set")
4646
rset, err := meta.queryResourceSet(ctx, meta.resourceGroup)
4747
if err != nil {
4848
return nil, err
@@ -52,17 +52,16 @@ func (meta *MetaResourceGroup) ListResource(ctx context.Context) (ImportList, er
5252
if meta.useAzAPI() {
5353
rl = rset.ToTFAzAPIResources()
5454
} else {
55-
56-
log.Printf("[DEBUG] Populate resource set")
55+
log.Debug("Populate resource set")
5756
if err := rset.PopulateResource(); err != nil {
5857
return nil, fmt.Errorf("tweaking single resources in the azure resource set: %v", err)
5958
}
60-
log.Printf("[DEBUG] Reduce resource set")
59+
log.Debug("Reduce resource set")
6160
if err := rset.ReduceResource(); err != nil {
6261
return nil, fmt.Errorf("tweaking across resources in the azure resource set: %v", err)
6362
}
6463

65-
log.Printf("[DEBUG] Azure Resource set map to TF resource set")
64+
log.Debug("Azure Resource set map to TF resource set")
6665
rl = rset.ToTFAzureRMResources(meta.parallelism, meta.azureSDKCred, meta.azureSDKClientOpt)
6766
}
6867

internal/resourceset/azure_resource_set.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func (rset AzureResourceSet) ToTFAzureRMResources(parallelism int, cred azcore.T
4242
wp.Run(func(v interface{}) error {
4343
res := v.(result)
4444
if res.err != nil {
45-
log.Printf("[WARN] Failed to query resource type for %s: %v\n", res.resid, res.err)
45+
log.Warn("Failed to query resource type", "id", res.resid, "error", res.err)
4646
// Still put this unresolved resource in the resource set, so that users can later specify the expected TF resource type.
4747
tfresources = append(tfresources, TFResource{
4848
AzureId: res.resid,
@@ -52,7 +52,7 @@ func (rset AzureResourceSet) ToTFAzureRMResources(parallelism int, cred azcore.T
5252
} else {
5353
if !res.exact {
5454
// It is not possible to return multiple result when API is used.
55-
log.Printf("[WARN] No query result for resource type and TF id for %s\n", res.resid)
55+
log.Warn("No query result for resource type and TF id", "id", res.resid)
5656
// Still put this unresolved resource in the resource set, so that users can later specify the expected TF resource type.
5757
tfresources = append(tfresources, TFResource{
5858
AzureId: res.resid,

internal/ui/ui.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func (m model) Init() tea.Cmd {
118118

119119
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
120120
if _, ok := msg.(spinner.TickMsg); !ok {
121-
log.Printf("[DEBUG] UI update. STATUS: %s | MSG: %#v\n", m.status, msg)
121+
log.Trace("UI update", "status", m.status, "msg", fmt.Sprintf("%#v", msg))
122122
}
123123

124124
switch msg := msg.(type) {

0 commit comments

Comments
 (0)