in policies/local.go [95:147]
func mergeConfigs(local *localConfig, egp *agentendpointpb.EffectiveGuestPolicy) *agentendpointpb.EffectiveGuestPolicy {
if egp == nil {
egp = &agentendpointpb.EffectiveGuestPolicy{}
}
if local == nil {
return egp
}
// Ids that are in the maps below
repos := make(map[string]bool)
pkgs := make(map[string]bool)
recipes := make(map[string]bool)
for _, v := range egp.GetPackages() {
pkgs[v.Package.Name] = true
}
for _, v := range egp.GetPackageRepositories() {
if id := getID(v.GetPackageRepository()); id != "" {
repos[id] = true
}
}
for _, v := range egp.GetSoftwareRecipes() {
recipes[v.SoftwareRecipe.Name] = true
}
for _, v := range local.Packages {
if _, ok := pkgs[v.Name]; !ok {
sp := new(agentendpointpb.EffectiveGuestPolicy_SourcedPackage)
sp.Package = &v.Package
egp.Packages = append(egp.Packages, sp)
}
}
for _, v := range local.PackageRepositories {
id := getID(&v.PackageRepository)
if id != "" {
if _, ok := repos[id]; ok {
continue
}
}
sr := new(agentendpointpb.EffectiveGuestPolicy_SourcedPackageRepository)
sr.PackageRepository = &v.PackageRepository
egp.PackageRepositories = append(egp.PackageRepositories, sr)
}
for _, v := range local.SoftwareRecipes {
if _, ok := recipes[v.Name]; !ok {
sp := new(agentendpointpb.EffectiveGuestPolicy_SourcedSoftwareRecipe)
sp.SoftwareRecipe = proto.Clone(&v.SoftwareRecipe).(*agentendpointpb.SoftwareRecipe)
egp.SoftwareRecipes = append(egp.SoftwareRecipes, sp)
}
}
return egp
}