policy-generator/cmd/policygen/netpol_generator.go

61 lines
1.3 KiB
Go

package main
import (
"fmt"
"io"
"log"
"os"
)
type NetworkPolicyGenerrator struct {
config *Config
policyTemplates *PolicyTemplates
}
func (g NetworkPolicyGenerrator) GenerateNamespace(writer io.Writer, namespace *Namespace) error {
fmt.Fprintf(os.Stderr, "Namespace %s\n", namespace.Name)
templates := g.policyTemplates.NamespaceTemplates("netpol", namespace.Capabilities)
log.Printf("Got %d templates", len(templates))
for _, template := range templates {
err := template.Execute(writer, &namespace)
if err != nil {
return fmt.Errorf("Error using template %s: %w", template.Name(), err)
}
}
return nil
}
func (g NetworkPolicyGenerrator) GenerateCommunicationRule(
writer io.Writer,
app *Application,
ingress *Ingress,
egress *Egress) error {
if len(ingress.Applications)+
len(ingress.Networks)+
len(egress.Applications)+
len(egress.Networks) > 0 {
// non-trivial regular network policy
tmpl := g.policyTemplates.ApplicationTemplate("netpol")
log.Printf("Found template %v for pod %s", tmpl, app.Name)
if tmpl != nil {
err := tmpl.Execute(writer, map[string]any{
"app": app,
"ingress": ingress,
"egress": egress,
"labels": map[string]string{
"policy-generator": "1",
},
})
if err != nil {
return err
}
}
}
return nil
}