in policies/policies.go [81:212]
func setConfig(ctx context.Context, egp *agentendpointpb.EffectiveGuestPolicy) {
var aptRepos []*agentendpointpb.AptRepository
var yumRepos []*agentendpointpb.YumRepository
var zypperRepos []*agentendpointpb.ZypperRepository
var gooRepos []*agentendpointpb.GooRepository
for _, repo := range egp.GetPackageRepositories() {
if r := repo.GetPackageRepository().GetGoo(); r != nil {
gooRepos = append(gooRepos, r)
continue
}
if r := repo.GetPackageRepository().GetApt(); r != nil {
aptRepos = append(aptRepos, r)
continue
}
if r := repo.GetPackageRepository().GetYum(); r != nil {
yumRepos = append(yumRepos, r)
continue
}
if r := repo.GetPackageRepository().GetZypper(); r != nil {
zypperRepos = append(zypperRepos, r)
continue
}
}
var gooInstallPkgs, gooRemovePkgs, gooUpdatePkgs []*agentendpointpb.Package
var aptInstallPkgs, aptRemovePkgs, aptUpdatePkgs []*agentendpointpb.Package
var yumInstallPkgs, yumRemovePkgs, yumUpdatePkgs []*agentendpointpb.Package
var zypperInstallPkgs, zypperRemovePkgs, zypperUpdatePkgs []*agentendpointpb.Package
for _, pkg := range egp.GetPackages() {
switch pkg.GetPackage().GetManager() {
case agentendpointpb.Package_ANY, agentendpointpb.Package_MANAGER_UNSPECIFIED:
switch pkg.GetPackage().GetDesiredState() {
case agentendpointpb.DesiredState_INSTALLED, agentendpointpb.DesiredState_DESIRED_STATE_UNSPECIFIED:
gooInstallPkgs = append(gooInstallPkgs, pkg.GetPackage())
aptInstallPkgs = append(aptInstallPkgs, pkg.GetPackage())
yumInstallPkgs = append(yumInstallPkgs, pkg.GetPackage())
zypperInstallPkgs = append(zypperInstallPkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_REMOVED:
gooRemovePkgs = append(gooRemovePkgs, pkg.GetPackage())
aptRemovePkgs = append(aptRemovePkgs, pkg.GetPackage())
yumRemovePkgs = append(yumRemovePkgs, pkg.GetPackage())
zypperRemovePkgs = append(zypperRemovePkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_UPDATED:
gooUpdatePkgs = append(gooUpdatePkgs, pkg.GetPackage())
aptUpdatePkgs = append(aptUpdatePkgs, pkg.GetPackage())
yumUpdatePkgs = append(yumUpdatePkgs, pkg.GetPackage())
zypperUpdatePkgs = append(zypperUpdatePkgs, pkg.GetPackage())
}
case agentendpointpb.Package_GOO:
switch pkg.GetPackage().GetDesiredState() {
case agentendpointpb.DesiredState_INSTALLED, agentendpointpb.DesiredState_DESIRED_STATE_UNSPECIFIED:
gooInstallPkgs = append(gooInstallPkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_REMOVED:
gooRemovePkgs = append(gooRemovePkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_UPDATED:
gooUpdatePkgs = append(gooUpdatePkgs, pkg.GetPackage())
}
case agentendpointpb.Package_APT:
switch pkg.GetPackage().GetDesiredState() {
case agentendpointpb.DesiredState_INSTALLED, agentendpointpb.DesiredState_DESIRED_STATE_UNSPECIFIED:
aptInstallPkgs = append(aptInstallPkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_REMOVED:
aptRemovePkgs = append(aptRemovePkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_UPDATED:
aptUpdatePkgs = append(aptUpdatePkgs, pkg.GetPackage())
}
case agentendpointpb.Package_YUM:
switch pkg.GetPackage().GetDesiredState() {
case agentendpointpb.DesiredState_INSTALLED, agentendpointpb.DesiredState_DESIRED_STATE_UNSPECIFIED:
yumInstallPkgs = append(yumInstallPkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_REMOVED:
yumRemovePkgs = append(yumRemovePkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_UPDATED:
yumUpdatePkgs = append(yumUpdatePkgs, pkg.GetPackage())
}
case agentendpointpb.Package_ZYPPER:
switch pkg.GetPackage().GetDesiredState() {
case agentendpointpb.DesiredState_INSTALLED, agentendpointpb.DesiredState_DESIRED_STATE_UNSPECIFIED:
zypperInstallPkgs = append(zypperInstallPkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_REMOVED:
zypperRemovePkgs = append(zypperRemovePkgs, pkg.GetPackage())
case agentendpointpb.DesiredState_UPDATED:
zypperUpdatePkgs = append(zypperUpdatePkgs, pkg.GetPackage())
}
}
}
if packages.GooGetExists {
if err := googetRepositories(ctx, gooRepos, agentconfig.GooGetRepoFilePath()); err != nil {
clog.Errorf(ctx, "Error writing googet repo file: %v", err)
}
if err := retryutil.RetryFunc(ctx, 1*time.Minute, "Applying googet changes", func() error {
return googetChanges(ctx, gooInstallPkgs, gooRemovePkgs, gooUpdatePkgs)
}); err != nil {
clog.Errorf(ctx, "Error performing googet changes: %v", err)
}
}
if packages.AptExists {
if err := aptRepositories(ctx, aptRepos, agentconfig.AptRepoFilePath()); err != nil {
clog.Errorf(ctx, "Error writing apt repo file: %v", err)
}
if err := retryutil.RetryFunc(ctx, 1*time.Minute, "Applying apt changes", func() error {
return aptChanges(ctx, aptInstallPkgs, aptRemovePkgs, aptUpdatePkgs)
}); err != nil {
clog.Errorf(ctx, "Error performing apt changes: %v", err)
}
}
if packages.YumExists {
if err := yumRepositories(ctx, yumRepos, agentconfig.YumRepoFilePath()); err != nil {
clog.Errorf(ctx, "Error writing yum repo file: %v", err)
}
if err := retryutil.RetryFunc(ctx, 1*time.Minute, "Applying yum changes", func() error {
return yumChanges(ctx, yumInstallPkgs, yumRemovePkgs, yumUpdatePkgs)
}); err != nil {
clog.Errorf(ctx, "Error performing yum changes: %v", err)
}
}
if packages.ZypperExists {
if err := zypperRepositories(ctx, zypperRepos, agentconfig.ZypperRepoFilePath()); err != nil {
clog.Errorf(ctx, "Error writing zypper repo file: %v", err)
}
if err := retryutil.RetryFunc(ctx, 1*time.Minute, "Applying zypper changes.", func() error {
return zypperChanges(ctx, zypperInstallPkgs, zypperRemovePkgs, zypperUpdatePkgs)
}); err != nil {
clog.Errorf(ctx, "Error performing zypper changes: %v", err)
}
}
}