in config/package_resource.go [343:398]
func populateInstalledCache(ctx context.Context, mp ManagedPackage) error {
var cache *packageCache
var refreshFunc func(context.Context) ([]*packages.PkgInfo, error)
var err error
switch {
case mp.Apt != nil:
cache = aptInstalled
refreshFunc = packages.InstalledDebPackages
case mp.Deb != nil:
cache = debInstalled
refreshFunc = packages.InstalledDebPackages
case mp.GooGet != nil:
cache = gooInstalled
refreshFunc = packages.InstalledGooGetPackages
case mp.MSI != nil:
// We just query per each MSI.
return nil
// TODO: implement yum functions
case mp.Yum != nil:
cache = yumInstalled
refreshFunc = packages.InstalledRPMPackages
// TODO: implement zypper functions
case mp.Zypper != nil:
cache = zypperInstalled
refreshFunc = packages.InstalledRPMPackages
case mp.RPM != nil:
cache = rpmInstalled
refreshFunc = packages.InstalledRPMPackages
default:
return fmt.Errorf("unknown or unpopulated ManagedPackage package type: %+v", mp)
}
// Cache already populated within the last 3 min.
if cache.cache != nil && cache.refreshed.After(time.Now().Add(-3*time.Minute)) {
return nil
}
pis, err := refreshFunc(ctx)
if err != nil {
return err
}
cache.cache = map[string]struct{}{}
for _, pkg := range pis {
cache.cache[pkg.Name] = struct{}{}
}
cache.refreshed = time.Now()
return nil
}