github.com/jlmeeker/kismatic@v1.10.1-0.20180612190640-57f9005a1f1a/pkg/inspector/check/package_not_installed.go (about)

     1  package check
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  type PackageNotInstalledCheck struct {
     9  	PackageQuery               PackageQuery
    10  	AcceptablePackageVersion   string
    11  	PackageManager             PackageManager
    12  	InstallationDisabled       bool
    13  	DockerInstallationDisabled bool
    14  }
    15  
    16  // Check returns true if the specified package is not installed.
    17  // This will also return true if the version installed matches AcceptablePackageVersion.
    18  // When InstallationDisabled is true this check will always return true.
    19  func (c PackageNotInstalledCheck) Check() (bool, error) {
    20  	// don't check when installation is disabled
    21  	if c.InstallationDisabled {
    22  		return true, nil
    23  	}
    24  	// When docker installation is disabled do not check for any packages that contain "docker" in the name
    25  	// The package name could be different, we will only validate the docker executable is present
    26  	if c.DockerInstallationDisabled && strings.Contains(c.PackageQuery.Name, "docker") {
    27  		return true, nil
    28  	}
    29  	// check for the package with optional version is installed
    30  	installed, err := c.PackageManager.IsInstalled(c.PackageQuery)
    31  	if err != nil {
    32  		return false, fmt.Errorf("failed to determine if package is installed: %v", err)
    33  	}
    34  	// return true if nothing is installed
    35  	if !installed {
    36  		return true, nil
    37  	}
    38  	if c.AcceptablePackageVersion == "" {
    39  		return false, fmt.Errorf("uninstall package before retrying")
    40  	}
    41  	// check if the version installed is the acceptable version
    42  	acceptableVersionInstalled, err := c.PackageManager.IsInstalled(PackageQuery{Name: c.PackageQuery.Name, Version: c.AcceptablePackageVersion})
    43  	if err != nil {
    44  		return false, fmt.Errorf("failed to determine if package is installed: %v", err)
    45  	}
    46  	if acceptableVersionInstalled {
    47  		return true, nil
    48  	}
    49  	return false, nil
    50  }