go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/_motor/discovery/gcp/instancesnapshot/resolver.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package instancesnapshot 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/gcpinstancesnapshot" 14 "go.mondoo.com/cnquery/motor/vault" 15 ) 16 17 type Resolver struct{} 18 19 func (r *Resolver) Name() string { 20 return "GCP Compute Instance Resolver" 21 } 22 23 func (r *Resolver) AvailableDiscoveryTargets() []string { 24 return []string{"auto"} 25 } 26 27 func (r *Resolver) Resolve(ctx context.Context, root *asset.Asset, pCfg *providers.Config, credsResolver vault.Resolver, sfn common.QuerySecretFn, userIdDetectors ...providers.PlatformIdDetector) ([]*asset.Asset, error) { 28 pCfg.Backend = providers.ProviderType_GCP_COMPUTE_INSTANCE_SNAPSHOT 29 30 // determine the platform mrn 31 sc, err := gcpinstancesnapshot.NewSnapshotCreator() 32 if err != nil { 33 return nil, err 34 } 35 36 target := gcpinstancesnapshot.ParseTarget(pCfg) 37 var assetInfo *asset.Asset 38 39 switch target.TargetType { 40 case "instance": 41 instanceInfo, err := sc.InstanceInfo(target.ProjectID, target.Zone, target.InstanceName) 42 if err != nil { 43 return nil, err 44 } 45 46 assetInfo = &asset.Asset{ 47 Name: instanceInfo.InstanceName, 48 Connections: []*providers.Config{pCfg}, 49 State: asset.State_STATE_ONLINE, 50 Labels: map[string]string{}, 51 PlatformIds: []string{instanceInfo.PlatformMrn}, 52 } 53 case "snapshot": 54 snapshotInfo, err := sc.SnapshotInfo(target.ProjectID, target.SnapshotName) 55 if err != nil { 56 return nil, err 57 } 58 59 assetInfo = &asset.Asset{ 60 Name: snapshotInfo.SnapshotName, 61 Connections: []*providers.Config{pCfg}, 62 State: asset.State_STATE_ONLINE, 63 Labels: map[string]string{}, 64 PlatformIds: []string{snapshotInfo.PlatformMrn}, 65 } 66 default: 67 return nil, errors.New("GCP compute discovery does not support asset type " + target.TargetType) 68 } 69 70 // If there's a root-provided name, use that to overwrite 71 if root.Name != "" { 72 assetInfo.Name = root.Name 73 } 74 75 return []*asset.Asset{assetInfo}, nil 76 }