github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/vm/disk/disk.go (about)

     1  package disk
     2  
     3  import (
     4  	"errors"
     5  	"io"
     6  
     7  	"golang.org/x/xerrors"
     8  
     9  	"github.com/devseccon/trivy/pkg/fanal/vm"
    10  )
    11  
    12  var (
    13  	vmDisks = []Disk{
    14  		VMDK{},
    15  	}
    16  )
    17  
    18  // Disk defines virtual machine disk images like VMDK, VDI and VHD.
    19  type Disk interface {
    20  	NewReader(io.ReadSeeker, vm.Cache[string, []byte]) (*io.SectionReader, error)
    21  }
    22  
    23  func New(rs io.ReadSeeker, cache vm.Cache[string, []byte]) (*io.SectionReader, error) {
    24  
    25  	for _, vmdisk := range vmDisks {
    26  		var vreader, err = vmdisk.NewReader(rs, cache)
    27  		if err != nil {
    28  			if errors.Is(err, vm.ErrInvalidSignature) {
    29  				continue
    30  			}
    31  			return nil, xerrors.Errorf("open virtual machine error: %w", err)
    32  		}
    33  
    34  		return vreader, nil
    35  	}
    36  	return nil, xerrors.New("virtual machine can not be detected")
    37  }