func zypperChanges()

in policies/zypper.go [68:115]


func zypperChanges(ctx context.Context, zypperInstalled, zypperRemoved, zypperUpdated []*agentendpointpb.Package) error {
	var err error
	var errs []string

	var installed []*packages.PkgInfo
	if len(zypperInstalled) > 0 || len(zypperUpdated) > 0 || len(zypperRemoved) > 0 {
		installed, err = packages.InstalledRPMPackages(ctx)
		if err != nil {
			return err
		}
	}

	var updates []*packages.PkgInfo
	if len(zypperUpdated) > 0 {
		updates, err = packages.ZypperUpdates(ctx)
		if err != nil {
			return err
		}
	}

	changes := getNecessaryChanges(installed, updates, zypperInstalled, zypperRemoved, zypperUpdated)

	if changes.packagesToInstall != nil {
		clog.Infof(ctx, "Installing packages %s", changes.packagesToInstall)
		if err := packages.InstallZypperPackages(ctx, changes.packagesToInstall); err != nil {
			errs = append(errs, fmt.Sprintf("error installing zypper packages: %v", err))
		}
	}

	if changes.packagesToUpgrade != nil {
		clog.Infof(ctx, "Upgrading packages %s", changes.packagesToUpgrade)
		if err := packages.InstallZypperPackages(ctx, changes.packagesToUpgrade); err != nil {
			errs = append(errs, fmt.Sprintf("error upgrading zypper packages: %v", err))
		}
	}

	if changes.packagesToRemove != nil {
		clog.Infof(ctx, "Removing packages %s", changes.packagesToRemove)
		if err := packages.RemoveZypperPackages(ctx, changes.packagesToRemove); err != nil {
			errs = append(errs, fmt.Sprintf("error removing zypper packages: %v", err))
		}
	}

	if errs == nil {
		return nil
	}
	return errors.New(strings.Join(errs, ",\n"))
}