github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/ociinstaller/db.go (about)

     1  package ociinstaller
     2  
     3  import (
     4  	"context"
     5  	"log"
     6  	"path/filepath"
     7  	"time"
     8  
     9  	"github.com/turbot/steampipe/pkg/constants"
    10  	versionfile "github.com/turbot/steampipe/pkg/ociinstaller/versionfile"
    11  )
    12  
    13  // InstallDB :: Install Postgres files fom OCI image
    14  func InstallDB(ctx context.Context, dblocation string) (string, error) {
    15  	tempDir := NewTempDir(dblocation)
    16  	defer func() {
    17  		if err := tempDir.Delete(); err != nil {
    18  			log.Printf("[TRACE] Failed to delete temp dir '%s' after installing db files: %s", tempDir, err)
    19  		}
    20  	}()
    21  
    22  	imageDownloader := NewOciDownloader()
    23  
    24  	// Download the blobs
    25  	image, err := imageDownloader.Download(ctx, NewSteampipeImageRef(constants.PostgresImageRef), ImageTypeDatabase, tempDir.Path)
    26  	if err != nil {
    27  		return "", err
    28  	}
    29  
    30  	// install the files
    31  	if err = installDbFiles(image, tempDir.Path, dblocation); err != nil {
    32  		return "", err
    33  	}
    34  
    35  	if err := updateVersionFileDB(image); err != nil {
    36  		return string(image.OCIDescriptor.Digest), err
    37  	}
    38  	return string(image.OCIDescriptor.Digest), nil
    39  }
    40  
    41  func updateVersionFileDB(image *SteampipeImage) error {
    42  	timeNow := versionfile.FormatTime(time.Now())
    43  	v, err := versionfile.LoadDatabaseVersionFile()
    44  	if err != nil {
    45  		return err
    46  	}
    47  	v.EmbeddedDB.Version = image.Config.Database.Version
    48  	v.EmbeddedDB.Name = "embeddedDB"
    49  	v.EmbeddedDB.ImageDigest = string(image.OCIDescriptor.Digest)
    50  	v.EmbeddedDB.InstalledFrom = image.ImageRef.requestedRef
    51  	v.EmbeddedDB.LastCheckedDate = timeNow
    52  	v.EmbeddedDB.InstallDate = timeNow
    53  	return v.Save()
    54  }
    55  
    56  func installDbFiles(image *SteampipeImage, tempDir string, dest string) error {
    57  	source := filepath.Join(tempDir, image.Database.ArchiveDir)
    58  	return moveFolderWithinPartition(source, dest)
    59  }