Skip to content

Commit 0de0f25

Browse files
committed
moving fixutres
Signed-off-by: entlein <einentlein@gmail.com>
1 parent 7fed68e commit 0de0f25

11 files changed

Lines changed: 1279 additions & 642 deletions

File tree

pkg/apis/softwarecomposition/network_types.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,6 @@ const (
1818
CommunicationTypeEgress CommunicationType = "external"
1919
)
2020

21-
// NetworkNeighborhood is an in-process, non-CRD intermediate used only to feed
22-
// the GeneratedNetworkPolicy generation. It is projected from ContainerProfile
23-
// data at request time and is never stored or served as an API object.
24-
type NetworkNeighborhood struct {
25-
metav1.TypeMeta
26-
metav1.ObjectMeta
27-
28-
Spec NetworkNeighborhoodSpec
29-
}
30-
31-
type NetworkNeighborhoodSpec struct {
32-
metav1.LabelSelector // The labels which are inside spec.selector in the parent workload.
33-
Containers []NetworkNeighborhoodContainer
34-
InitContainers []NetworkNeighborhoodContainer
35-
EphemeralContainers []NetworkNeighborhoodContainer
36-
}
37-
38-
type NetworkNeighborhoodContainer struct {
39-
Name string
40-
Ingress []NetworkNeighbor
41-
Egress []NetworkNeighbor
42-
}
43-
4421
// NetworkNeighbor represents a single network communication made by this resource.
4522
type NetworkNeighbor struct {
4623
Identifier string

pkg/apis/softwarecomposition/networkpolicy/v2/networkpolicy.go

Lines changed: 32 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -21,33 +21,33 @@ import (
2121
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2222
)
2323

24-
func GenerateNetworkPolicy(nn *softwarecomposition.NetworkNeighborhood, knownServers softwarecomposition.IKnownServersFinder, timeProvider metav1.Time) (softwarecomposition.GeneratedNetworkPolicy, error) {
25-
if !IsAvailable(nn) {
26-
return softwarecomposition.GeneratedNetworkPolicy{}, fmt.Errorf("nn %s/%s status annotation is not ready nor completed", nn.Namespace, nn.Name)
24+
func GenerateNetworkPolicy(cp *softwarecomposition.ContainerProfile, knownServers softwarecomposition.IKnownServersFinder, timeProvider metav1.Time) (softwarecomposition.GeneratedNetworkPolicy, error) {
25+
if !IsAvailable(cp) {
26+
return softwarecomposition.GeneratedNetworkPolicy{}, fmt.Errorf("container profile %s/%s status annotation is not ready nor completed", cp.Namespace, cp.Name)
2727
}
2828

2929
// get name from labels and clean labels
30-
kind, ok := nn.Labels[helpersv1.RelatedKindMetadataKey]
30+
kind, ok := cp.Labels[helpersv1.RelatedKindMetadataKey]
3131
if !ok {
32-
return softwarecomposition.GeneratedNetworkPolicy{}, fmt.Errorf("nn %s/%s does not have a kind label", nn.Namespace, nn.Name)
32+
return softwarecomposition.GeneratedNetworkPolicy{}, fmt.Errorf("container profile %s/%s does not have a kind label", cp.Namespace, cp.Name)
3333
}
34-
name, ok := nn.Labels[helpersv1.RelatedNameMetadataKey]
34+
name, ok := cp.Labels[helpersv1.RelatedNameMetadataKey]
3535
if !ok {
36-
logger.L().Debug("nn does not have a workload-name label, falling back to nn.Name", helpers.String("name", nn.Name), helpers.String("namespace", nn.Namespace))
37-
name = nn.Name
36+
logger.L().Debug("container profile does not have a workload-name label, falling back to cp.Name", helpers.String("name", cp.Name), helpers.String("namespace", cp.Namespace))
37+
name = cp.Name
3838
}
39-
delete(nn.Labels, helpersv1.TemplateHashKey)
39+
delete(cp.Labels, helpersv1.TemplateHashKey)
4040

4141
networkPolicy := softwarecomposition.NetworkPolicy{
4242
Kind: "NetworkPolicy",
4343
APIVersion: "networking.k8s.io/v1",
4444
ObjectMeta: metav1.ObjectMeta{
4545
Name: fmt.Sprintf("%s-%s", strings.ToLower(kind), name),
46-
Namespace: nn.Namespace,
46+
Namespace: cp.Namespace,
4747
Annotations: map[string]string{
4848
"generated-by": "kubescape",
4949
},
50-
Labels: nn.Labels,
50+
Labels: cp.Labels,
5151
},
5252
Spec: softwarecomposition.NetworkPolicySpec{
5353
PodSelector: metav1.LabelSelector{},
@@ -58,12 +58,12 @@ func GenerateNetworkPolicy(nn *softwarecomposition.NetworkNeighborhood, knownSer
5858
},
5959
}
6060

61-
if nn.Spec.MatchLabels != nil {
62-
networkPolicy.Spec.PodSelector.MatchLabels = nn.Spec.MatchLabels
61+
if cp.Spec.MatchLabels != nil {
62+
networkPolicy.Spec.PodSelector.MatchLabels = cp.Spec.MatchLabels
6363
}
6464

65-
if nn.Spec.MatchExpressions != nil {
66-
networkPolicy.Spec.PodSelector.MatchExpressions = nn.Spec.MatchExpressions
65+
if cp.Spec.MatchExpressions != nil {
66+
networkPolicy.Spec.PodSelector.MatchExpressions = cp.Spec.MatchExpressions
6767
}
6868

6969
generatedNetworkPolicy := softwarecomposition.GeneratedNetworkPolicy{
@@ -72,17 +72,17 @@ func GenerateNetworkPolicy(nn *softwarecomposition.NetworkNeighborhood, knownSer
7272
APIVersion: "spdx.softwarecomposition.kubescape.io/v1beta1",
7373
},
7474
ObjectMeta: metav1.ObjectMeta{
75-
Name: nn.Name,
76-
Namespace: nn.Namespace,
77-
Labels: nn.Labels,
75+
Name: cp.Name,
76+
Namespace: cp.Namespace,
77+
Labels: cp.Labels,
7878
CreationTimestamp: timeProvider,
7979
},
8080
PoliciesRef: []softwarecomposition.PolicyRef{},
8181
}
8282

8383
ingressHash := make(map[string]bool)
8484
ingressPolicyRefsHash := make(map[string]bool)
85-
for _, neighbor := range listIngressNetworkNeighbors(nn) {
85+
for _, neighbor := range listIngressNetworkNeighbors(cp) {
8686

8787
rule, policyRefs := generateIngressRule(neighbor, knownServers)
8888

@@ -104,7 +104,7 @@ func GenerateNetworkPolicy(nn *softwarecomposition.NetworkNeighborhood, knownSer
104104

105105
egressHash := make(map[string]bool)
106106
egressPolicyRefsHash := make(map[string]bool)
107-
for _, neighbor := range listEgressNetworkNeighbors(nn) {
107+
for _, neighbor := range listEgressNetworkNeighbors(cp) {
108108

109109
rule, policyRefs := generateEgressRule(neighbor, knownServers)
110110

@@ -132,34 +132,17 @@ func GenerateNetworkPolicy(nn *softwarecomposition.NetworkNeighborhood, knownSer
132132
return generatedNetworkPolicy, nil
133133
}
134134

135-
func listIngressNetworkNeighbors(nn *softwarecomposition.NetworkNeighborhood) []softwarecomposition.NetworkNeighbor {
136-
var neighbors []softwarecomposition.NetworkNeighbor
137-
for i := range nn.Spec.Containers {
138-
neighbors = append(neighbors, nn.Spec.Containers[i].Ingress...)
139-
}
140-
for i := range nn.Spec.InitContainers {
141-
neighbors = append(neighbors, nn.Spec.InitContainers[i].Ingress...)
142-
}
143-
for i := range nn.Spec.EphemeralContainers {
144-
neighbors = append(neighbors, nn.Spec.EphemeralContainers[i].Ingress...)
145-
}
146-
return neighbors
147-
135+
// listIngressNetworkNeighbors returns the ingress neighbors for the container
136+
// profile. A ContainerProfile describes a single container, so its Spec.Ingress
137+
// is the exact equivalent of the previously-flattened per-container ingress list.
138+
func listIngressNetworkNeighbors(cp *softwarecomposition.ContainerProfile) []softwarecomposition.NetworkNeighbor {
139+
return cp.Spec.Ingress
148140
}
149141

150-
func listEgressNetworkNeighbors(nn *softwarecomposition.NetworkNeighborhood) []softwarecomposition.NetworkNeighbor {
151-
var neighbors []softwarecomposition.NetworkNeighbor
152-
for i := range nn.Spec.Containers {
153-
neighbors = append(neighbors, nn.Spec.Containers[i].Egress...)
154-
}
155-
for i := range nn.Spec.InitContainers {
156-
neighbors = append(neighbors, nn.Spec.InitContainers[i].Egress...)
157-
}
158-
for i := range nn.Spec.EphemeralContainers {
159-
neighbors = append(neighbors, nn.Spec.EphemeralContainers[i].Egress...)
160-
}
161-
return neighbors
162-
142+
// listEgressNetworkNeighbors returns the egress neighbors for the container
143+
// profile. See listIngressNetworkNeighbors for the single-container rationale.
144+
func listEgressNetworkNeighbors(cp *softwarecomposition.ContainerProfile) []softwarecomposition.NetworkNeighbor {
145+
return cp.Spec.Egress
163146
}
164147

165148
// containsIPBlockPeer reports whether peers already contains an entry with the given CIDR.
@@ -609,11 +592,11 @@ func removeLabels(labels map[string]string) {
609592
}
610593
}
611594

612-
func IsAvailable(nn *softwarecomposition.NetworkNeighborhood) bool {
613-
if nn.GetAnnotations()[helpersv1.ManagedByMetadataKey] == helpersv1.ManagedByUserValue {
595+
func IsAvailable(cp *softwarecomposition.ContainerProfile) bool {
596+
if cp.GetAnnotations()[helpersv1.ManagedByMetadataKey] == helpersv1.ManagedByUserValue {
614597
return true
615598
}
616-
switch nn.GetAnnotations()[helpersv1.StatusMetadataKey] {
599+
switch cp.GetAnnotations()[helpersv1.StatusMetadataKey] {
617600
case helpersv1.Learning, helpersv1.Completed:
618601
return true
619602
default:

0 commit comments

Comments
 (0)