func renderFlaggedNetworkPolicyTable()

in tools/azure-npm-to-cilium-validator/azure-npm-to-cilium-validator.go [238:307]


func renderFlaggedNetworkPolicyTable(
	ingressEndportNetworkPolicy,
	egressEndportNetworkPolicy,
	ingressPoliciesWithCIDR,
	egressPoliciesWithCIDR,
	ingressPoliciesWithNamedPort,
	egressPoliciesWithNamedPort,
	egressPolicies []string,
) {
	flaggedResourceTable := tablewriter.NewWriter(os.Stdout)
	flaggedResourceTable.SetHeader([]string{"Network Policy", "NetworkPolicy with endPort", "NetworkPolicy with CIDR", "NetworkPolicy with Named Port", "NetworkPolicy with Egress (Not Allow All Egress)"})
	flaggedResourceTable.SetRowLine(true)

	// Create a map to store the policies and their flags
	policyFlags := make(map[string][]string)

	// Helper function to add a flag to a policy
	addFlag := func(policy string, flag string) {
		if _, exists := policyFlags[policy]; !exists {
			policyFlags[policy] = []string{"✅", "✅", "✅", "✅"}
		}
		switch flag {
		case "ingressEndPort":
			policyFlags[policy][0] = "❌ (ingress)"
		case "egressEndPort":
			policyFlags[policy][0] = "❌ (egress)"
		case "ingressCIDR":
			policyFlags[policy][1] = "❌ (ingress)"
		case "egressCIDR":
			policyFlags[policy][1] = "❌ (egress)"
		case "ingressNamedPort":
			policyFlags[policy][2] = "❌ (ingress)"
		case "egressNamedPort":
			policyFlags[policy][2] = "❌ (egress)"
		case "Egress":
			policyFlags[policy][3] = "❌"
		}
	}

	// Add flags for each policy
	for _, policy := range ingressEndportNetworkPolicy {
		addFlag(policy, "ingressEndPort")
	}
	for _, policy := range egressEndportNetworkPolicy {
		addFlag(policy, "egressEndPort")
	}
	for _, policy := range ingressPoliciesWithCIDR {
		addFlag(policy, "ingressCIDR")
	}
	for _, policy := range egressPoliciesWithCIDR {
		addFlag(policy, "egressCIDR")
	}
	for _, policy := range ingressPoliciesWithNamedPort {
		addFlag(policy, "ingressNamedPort")
	}
	for _, policy := range egressPoliciesWithNamedPort {
		addFlag(policy, "egressNamedPort")
	}
	for _, policy := range egressPolicies {
		addFlag(policy, "Egress")
	}

	// Append the policies and their flags to the table
	for policy, flags := range policyFlags {
		flaggedResourceTable.Append([]string{policy, flags[0], flags[1], flags[2], flags[3]})
	}

	fmt.Println("\nFlagged Network Policies:")
	flaggedResourceTable.Render()
}