go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/_motor/discovery/tar/tar.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package tar 5 6 import ( 7 "context" 8 9 "github.com/rs/zerolog/log" 10 "go.mondoo.com/cnquery/motor/asset" 11 "go.mondoo.com/cnquery/motor/discovery/common" 12 "go.mondoo.com/cnquery/motor/motorid" 13 "go.mondoo.com/cnquery/motor/providers" 14 "go.mondoo.com/cnquery/motor/providers/resolver" 15 "go.mondoo.com/cnquery/motor/vault" 16 ) 17 18 type Resolver struct{} 19 20 func (r *Resolver) Name() string { 21 return "Tar Resolver" 22 } 23 24 func (r *Resolver) AvailableDiscoveryTargets() []string { 25 return []string{common.DiscoveryAuto, common.DiscoveryAll} 26 } 27 28 func (r *Resolver) Resolve(ctx context.Context, root *asset.Asset, tc *providers.Config, credsResolver vault.Resolver, sfn common.QuerySecretFn, userIdDetectors ...providers.PlatformIdDetector) ([]*asset.Asset, error) { 29 assetObj := &asset.Asset{ 30 Name: root.Name, 31 Connections: []*providers.Config{tc}, 32 State: asset.State_STATE_ONLINE, 33 } 34 35 m, err := resolver.NewMotorConnection(ctx, tc, credsResolver) 36 if err != nil { 37 return nil, err 38 } 39 defer m.Close() 40 41 // determine platform information 42 p, err := m.Platform() 43 if err == nil { 44 assetObj.Platform = p 45 } 46 47 fingerprint, err := motorid.IdentifyPlatform(m.Provider, p, userIdDetectors) 48 if err != nil { 49 return nil, err 50 } 51 52 assetObj.PlatformIds = fingerprint.PlatformIDs 53 if assetObj.Name != "" { 54 assetObj.Name = fingerprint.Name 55 } 56 57 log.Debug().Strs("identifier", assetObj.PlatformIds).Msg("motor connection") 58 59 // use hostname as name if asset name was not explicitly provided 60 if assetObj.Name == "" && tc.Options["path"] != "" { 61 assetObj.Name = tc.Options["path"] 62 } 63 64 return []*asset.Asset{assetObj}, nil 65 }