Skip to content

Instantly share code, notes, and snippets.

@zAbuQasem
Last active April 19, 2024 04:43
Show Gist options
  • Save zAbuQasem/0a8d62c604dd197e763a46225c964559 to your computer and use it in GitHub Desktop.
Save zAbuQasem/0a8d62c604dd197e763a46225c964559 to your computer and use it in GitHub Desktop.
Quickly Patch ingress-nginx to handle TCP traffic:
import argparse
import subprocess
import yaml
__author__ = "Zeyad AbuLaban"
BASE_YAML = """
spec:
template:
spec:
containers:
- name: controller
ports:
- containerPort: <CONTAINER_PORT>
hostPort: <HOST_PORT>
"""
def update_ports(container_port, host_port):
data = yaml.safe_load(BASE_YAML)
data['spec']['template']['spec']['containers'][0]['ports'][0]['containerPort'] = container_port
data['spec']['template']['spec']['containers'][0]['ports'][0]['hostPort'] = host_port
updated_yaml = yaml.dump(data, default_flow_style=False)
return updated_yaml
def apply_patch(updated_yaml, namespace):
cmd = f"kubectl patch deployment ingress-nginx-controller --patch '{updated_yaml}' -n {namespace}"
subprocess.run(cmd, shell=True)
def patch_configmap(namespace, service_port, service_name, service_namespace):
cmd = f"kubectl patch configmap tcp-services -n {namespace} --patch '{{\"data\":{{\"{service_port}\":\"{service_namespace}/{service_name}:{service_port}\"}}}}'"
subprocess.run(cmd, shell=True)
def main():
parser = argparse.ArgumentParser(description='Update containerPort and hostPort in YAML and apply patches using kubectl.')
parser.add_argument('-c', '--container-port', type=int, required=True, help='Container port number')
parser.add_argument('-p', '--host-port', type=int, required=True, help='Host port number')
parser.add_argument('-n', '--namespace', default='ingress-nginx', help='Namespace for deployment (default: ingress-nginx)')
parser.add_argument('-sp', '--service-port', type=str, required=True, help='Service port number')
parser.add_argument('-sn', '--service-name', required=True,type=str, help='Service name')
parser.add_argument('-sns', '--service-namespace', default='default',type=str, help='Namespace for service and ConfigMap patch (default: default)')
args = parser.parse_args()
updated_yaml = update_ports(args.container_port, args.host_port)
apply_patch(updated_yaml, args.namespace)
patch_configmap(args.namespace, args.service_port, args.service_name, args.service_namespace)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment