func mergeConfigs()

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
}