go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/_motor/discovery/vcd/resolver.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package vcd
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  
    10  	"go.mondoo.com/cnquery/motor/asset"
    11  	"go.mondoo.com/cnquery/motor/discovery/common"
    12  	"go.mondoo.com/cnquery/motor/providers"
    13  	"go.mondoo.com/cnquery/motor/providers/resolver"
    14  	vcd_provider "go.mondoo.com/cnquery/motor/providers/vcd"
    15  	"go.mondoo.com/cnquery/motor/vault"
    16  )
    17  
    18  type Resolver struct{}
    19  
    20  func (k *Resolver) Name() string {
    21  	return "VMware Cloud Director 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, cc *providers.Config, credsResolver vault.Resolver, sfn common.QuerySecretFn, userIdDetectors ...providers.PlatformIdDetector) ([]*asset.Asset, error) {
    29  	resolved := []*asset.Asset{}
    30  
    31  	m, err := resolver.NewMotorConnection(ctx, cc, credsResolver)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	defer m.Close()
    36  
    37  	provider, ok := m.Provider.(*vcd_provider.Provider)
    38  	if !ok {
    39  		return nil, errors.New("could not create VMware Cloud Director provider")
    40  	}
    41  
    42  	identifier, err := provider.Identifier()
    43  	if err != nil {
    44  		return nil, err
    45  	}
    46  
    47  	// detect platform info for the asset
    48  	pf, err := m.Platform()
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  
    53  	if cc.IncludesOneOfDiscoveryTarget(common.DiscoveryAuto, common.DiscoveryAll) {
    54  		resolved = append(resolved, &asset.Asset{
    55  			PlatformIds: []string{identifier},
    56  			Name:        "VMware Cloud Director",
    57  			Platform:    pf,
    58  			Connections: []*providers.Config{cc}, // pass-in the current config
    59  			Labels:      map[string]string{},
    60  		})
    61  	}
    62  
    63  	return resolved, nil
    64  }