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  }