From 586c957b52beb30bc6c9cd38af2a41564f9efcbe Mon Sep 17 00:00:00 2001 From: Viacheslav Hletenko Date: Tue, 29 Aug 2023 16:06:30 +0000 Subject: [PATCH] T5261: Add AWS load-balancing tunnel handler Add AWS load-balancing tunnel handler https://aws.amazon.com/blogs/networking-and-content-delivery/how-to-integrate-linux-instances-with-aws-gateway-load-balancer/ set service aws glb script on-create '/config/scripts/tmp.sh' set service aws glb script on-destroy '/config/scripts/tmp.sh' set service aws glb status format 'simple' set service aws glb status port '8282' --- .../aws/override_aws_gwlbtun.conf.j2 | 10 +++ debian/control | 1 + interface-definitions/service-aws-glb.xml.in | 72 ++++++++++++++++++ src/conf_mode/service_aws_glb.py | 76 +++++++++++++++++++ src/systemd/aws-gwlbtun.service | 11 +++ 5 files changed, 170 insertions(+) create mode 100644 data/templates/aws/override_aws_gwlbtun.conf.j2 create mode 100644 interface-definitions/service-aws-glb.xml.in create mode 100755 src/conf_mode/service_aws_glb.py create mode 100644 src/systemd/aws-gwlbtun.service diff --git a/data/templates/aws/override_aws_gwlbtun.conf.j2 b/data/templates/aws/override_aws_gwlbtun.conf.j2 new file mode 100644 index 00000000000..65debe1f4f5 --- /dev/null +++ b/data/templates/aws/override_aws_gwlbtun.conf.j2 @@ -0,0 +1,10 @@ +[Unit] +StartLimitIntervalSec=0 +After=vyos-router.service + +[Service] +EnvironmentFile= +ExecStart=/usr/bin/gwlbtun {{ '-c ' ~ script.on_create if script.on_create is vyos_defined }} {{ '-r ' ~ script.on_destroy if script.on_destroy is vyos_defined }} {{ '-p ' ~ status.port if status.port is vyos_defined }} +CapabilityBoundingSet=CAP_NET_ADMIN +Restart=always +RestartSec=10 diff --git a/debian/control b/debian/control index ee45a5fe34c..73573395661 100644 --- a/debian/control +++ b/debian/control @@ -36,6 +36,7 @@ Depends: accel-ppp, auditd, avahi-daemon, + aws-gwlbtun, beep, bmon, bsdmainutils, diff --git a/interface-definitions/service-aws-glb.xml.in b/interface-definitions/service-aws-glb.xml.in new file mode 100644 index 00000000000..d63dc12857c --- /dev/null +++ b/interface-definitions/service-aws-glb.xml.in @@ -0,0 +1,72 @@ + + + + + + + Amazon Web Service + 1280 + + + + + Gateway load-balancer tunnel handler + + + + + Script executed on create or destroy tunnel + + + + + Script to run when interface is created + + + + + + + + Script to run when interface is destroyed + + + + + + + + + + Status + + + + + Statistic format + + simple full + + + simple + Simple format + + + full + Full format + + + (simple|full) + + + + #include + + + + + + + + + diff --git a/src/conf_mode/service_aws_glb.py b/src/conf_mode/service_aws_glb.py new file mode 100755 index 00000000000..d1ed5a07b8e --- /dev/null +++ b/src/conf_mode/service_aws_glb.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2023 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from sys import exit + +from vyos.config import Config +from vyos.template import render +from vyos.utils.process import call +from vyos import ConfigError +from vyos import airbag +airbag.enable() + +systemd_service = 'aws-gwlbtun.service' +systemd_override = '/run/systemd/system/aws-gwlbtun.service.d/10-override.conf' + + +def get_config(config=None): + if config: + conf = config + else: + conf = Config() + base = ['service', 'aws', 'glb'] + if not conf.exists(base): + return None + + glb = conf.get_config_dict(base, key_mangling=('-', '_'), + get_first_key=True, + no_tag_node_value_mangle=True) + + return glb + + +def verify(glb): + # bail out early - looks like removal from running config + if not glb: + return None + + +def generate(glb): + if not glb: + return None + + render(systemd_override, 'aws/override_aws_gwlbtun.conf.j2', glb) + + +def apply(glb): + call('systemctl daemon-reload') + if not glb: + call(f'systemctl stop {systemd_service}') + else: + call(f'systemctl restart {systemd_service}') + return None + + +if __name__ == '__main__': + try: + c = get_config() + verify(c) + generate(c) + apply(c) + except ConfigError as e: + print(e) + exit(1) diff --git a/src/systemd/aws-gwlbtun.service b/src/systemd/aws-gwlbtun.service new file mode 100644 index 00000000000..97d772dec2c --- /dev/null +++ b/src/systemd/aws-gwlbtun.service @@ -0,0 +1,11 @@ +[Unit] +Description=Description=AWS Gateway Load Balancer Tunnel Handler +Documentation=https://github.com/aws-samples/aws-gateway-load-balancer-tunnel-handler +After=network.target + +[Service] +ExecStart= +Restart=on-failure + +[Install] +WantedBy=multi-user.target