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 }