github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/packaging/dependency/mongo.go (about)

     1  // Copyright 2019 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package dependency
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/core/base"
    12  	"github.com/juju/juju/packaging"
    13  )
    14  
    15  type mongoDependency struct {
    16  	snapChannel string
    17  }
    18  
    19  // Mongo returns a dependency for installing mongo server using the specified
    20  // NUMA settings and snap channel preferences (applies to focal or later).
    21  func Mongo(snapChannel string) packaging.Dependency {
    22  	return mongoDependency{
    23  		snapChannel: snapChannel,
    24  	}
    25  }
    26  
    27  // PackageList implements packaging.Dependency.
    28  func (dep mongoDependency) PackageList(b base.Base) ([]packaging.Package, error) {
    29  	if b.OS != base.UbuntuOS {
    30  		return nil, errors.NotSupportedf("installing mongo on base %q", b)
    31  	}
    32  
    33  	var (
    34  		snapList []packaging.Package
    35  		pm       = packaging.AptPackageManager
    36  	)
    37  
    38  	if dep.snapChannel == "" {
    39  		return nil, errors.NotValidf("snap channel for mongo dependency")
    40  	}
    41  
    42  	snapList = append(
    43  		snapList,
    44  		packaging.Package{
    45  			Name:           "juju-db",
    46  			InstallOptions: fmt.Sprintf("--channel %s", dep.snapChannel),
    47  			PackageManager: packaging.SnapPackageManager,
    48  		},
    49  	)
    50  
    51  	return append(
    52  		packaging.MakePackageList(pm, ""),
    53  		snapList...,
    54  	), nil
    55  }