internal/meta/meta_map.go (66 lines of code) (raw):

package meta import ( "context" "encoding/json" "fmt" "os" "sort" "github.com/Azure/aztfexport/pkg/config" "github.com/Azure/aztfexport/internal/resmap" "github.com/Azure/aztfexport/internal/tfaddr" "github.com/magodo/armid" ) type MetaMap struct { baseMeta mappingFile string } func NewMetaMap(cfg config.Config) (*MetaMap, error) { cfg.Logger.Info("New map meta") baseMeta, err := NewBaseMeta(cfg.CommonConfig) if err != nil { return nil, err } meta := &MetaMap{ baseMeta: *baseMeta, mappingFile: cfg.MappingFile, } return meta, nil } func (meta MetaMap) ScopeName() string { return meta.mappingFile } func (meta *MetaMap) ListResource(_ context.Context) (ImportList, error) { var m resmap.ResourceMapping meta.Logger().Debug("Read resource set from mapping file") b, err := os.ReadFile(meta.mappingFile) if err != nil { return nil, fmt.Errorf("reading mapping file %s: %v", meta.mappingFile, err) } if err := json.Unmarshal(b, &m); err != nil { return nil, fmt.Errorf("unmarshalling the mapping file: %v", err) } var l ImportList for id, res := range m { azureId, err := armid.ParseResourceId(id) if err != nil { return nil, fmt.Errorf("parsing resource id %q: %v", id, err) } tfAddr := tfaddr.TFAddr{ Type: res.ResourceType, Name: res.ResourceName, } item := ImportItem{ AzureResourceID: azureId, TFResourceId: res.ResourceId, TFAddrCache: tfAddr, TFAddr: tfAddr, Recommendations: []string{res.ResourceType}, } l = append(l, item) } l = meta.excludeImportList(l) sort.Slice(l, func(i, j int) bool { return l[i].AzureResourceID.String() < l[j].AzureResourceID.String() }) return l, nil }