Skip to content
This repository was archived by the owner on Jul 16, 2025. It is now read-only.

Commit f18623f

Browse files
authored
allow kubernetes_patch_networkpolicy to separately enable/disable (#171)
ingress/egress
1 parent 03486e6 commit f18623f

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

docs/libraries.rst

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,14 @@ Patch an existing Kubernetes network policy.
437437
- ``string``
438438
-
439439
- The target network policy to patch
440-
* - ``network_enabled``
440+
* - ``ingress_enabled``
441441
- ``bool``
442442
-
443-
- Should the network be enabled
443+
- Should ingress (i.e., incoming) network traffic be enabled
444+
* - ``egress_enabled``
445+
- ``bool``
446+
-
447+
- Should egress (i.e., outgoing) network traffic be enabled
444448
* - ``match_label``
445449
- ``key_value``
446450
-

libs/scenario_execution_kubernetes/scenario_execution_kubernetes/kubernetes_patch_network_policy.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ class KubernetesPatchNetworkPolicyState(Enum):
2929

3030
class KubernetesPatchNetworkPolicy(BaseAction):
3131

32-
def __init__(self, namespace: str, target: str, network_enabled: bool, match_label: tuple, within_cluster: bool):
32+
def __init__(self, namespace: str, target: str, ingress_enabled: bool, egress_enabled: bool, match_label: tuple, within_cluster: bool):
3333
super().__init__()
3434
self.namespace = namespace
3535
self.target = target
36-
self.network_enabled = network_enabled
36+
self.ingress_enabled = ingress_enabled
37+
self.egress_enabled = egress_enabled
3738
self.within_cluster = within_cluster
3839
if not isinstance(match_label, dict) or not "key" in match_label or not "value" in match_label:
3940
raise ValueError("match_label expected to be key-value pair.")
@@ -53,7 +54,7 @@ def setup(self, **kwargs):
5354
def update(self) -> py_trees.common.Status: # pylint: disable=too-many-return-statements
5455
if self.current_state == KubernetesPatchNetworkPolicyState.IDLE:
5556
self.current_request = self.network_client.patch_namespaced_network_policy(self.target, body=self.get_network_policy(
56-
policy_name=self.target, enable=self.network_enabled, match_label=self.match_label), namespace=self.namespace, async_req=True)
57+
policy_name=self.target, enable_ingress=self.ingress_enabled, enable_egress=self.egress_enabled, match_label=self.match_label), namespace=self.namespace, async_req=True)
5758
self.current_state = KubernetesPatchNetworkPolicyState.REQUEST_SENT
5859
self.feedback_message = f"Requested patching '{self.target}' in namespace '{self.namespace}'" # pylint: disable= attribute-defined-outside-init
5960
return py_trees.common.Status.RUNNING
@@ -76,14 +77,16 @@ def update(self) -> py_trees.common.Status: # pylint: disable=too-many-return-s
7677
return py_trees.common.Status.FAILURE
7778
return py_trees.common.Status.FAILURE
7879

79-
def get_network_policy(self, policy_name, match_label, enable):
80+
def get_network_policy(self, policy_name, match_label, enable_ingress, enable_egress):
8081
body = client.V1NetworkPolicy()
8182
body.metadata = client.V1ObjectMeta(name=f"{policy_name}")
8283
body.spec = client.V1NetworkPolicySpec(pod_selector=client.V1LabelSelector(match_labels={match_label["key"]: match_label["value"]}))
83-
if enable:
84-
body.spec.egress = [client.V1NetworkPolicyEgressRule()]
84+
if enable_ingress:
8585
body.spec.ingress = [client.V1NetworkPolicyIngressRule()]
8686
else:
87-
body.spec.egress = []
8887
body.spec.ingress = []
88+
if enable_egress:
89+
body.spec.egress = [client.V1NetworkPolicyEgressRule()]
90+
else:
91+
body.spec.egress = []
8992
return body

libs/scenario_execution_kubernetes/scenario_execution_kubernetes/lib_osc/kubernetes.osc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ action kubernetes_delete inherits kubernetes_base_action:
3636
action kubernetes_patch_network_policy inherits kubernetes_base_action:
3737
# patch an existing network policy
3838
target: string # network-policy to patch
39-
network_enabled: bool # should the network be enabled?
39+
ingress_enabled: bool # should incoming network traffic be enabled?
40+
egress_enabled: bool # should outgoing network traffic be enabled?
4041
match_label: key_value
4142

4243
action kubernetes_patch_pod inherits kubernetes_base_action:

libs/scenario_execution_kubernetes/scenarios/test_kubernetes_create_delete.osc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ scenario test_kubernetes_create_from_yaml:
88
kubernetes_create_from_yaml(yaml_file: "test.yaml")
99
kubernetes_wait_for_pod_status(target: "test", status: kubernetes_pod_status!running)
1010
#kubernetes_wait_for_network_policy_status("test-network-policy", kubernetes_network_policy_status!added)
11-
kubernetes_patch_network_policy(target: "test-network-policy", network_enabled: false, match_label: key_value("app", "foo"))
12-
kubernetes_patch_network_policy(target: "test-network-policy", network_enabled: true, match_label: key_value("app", "foo"))
11+
kubernetes_patch_network_policy(target: "test-network-policy", ingress_enabled: false, egress_enabled: false, match_label: key_value("app", "foo"))
12+
kubernetes_patch_network_policy(target: "test-network-policy", ingress_enabled: true, egress_enabled: true, match_label: key_value("app", "foo"))
1313
kubernetes_delete(target: "test", element_type: kubernetes_element_type!pod)

0 commit comments

Comments
 (0)