From 5c21c181b1483de86f96d3fab314bda0b2f2b492 Mon Sep 17 00:00:00 2001 From: "Zhang Rong(Jon)" Date: Fri, 19 Apr 2024 10:49:54 +0800 Subject: [PATCH] Fix the IPv6 does not work This commit fix the hard code for IPv4, it doesn't support IPv6 Test Plan: PASS - Start the O2 API with IPv6, it works PASS - Start the O2 API with IPv4, it works PASS - Connect with IPv4 O-Cloud environment PASS - Connect with IPv6 O-Cloud environment Issue-ID: INF-455 Change-Id: I99d37846377d56d580f9553855349051ceeccf53 Signed-off-by: Zhang Rong(Jon) --- charts/resources/scripts/init/o2api_start.sh | 5 +++-- o2common/config/config.py | 14 +++++++++++++- tests/o2app-api-entry2.sh | 4 ++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/charts/resources/scripts/init/o2api_start.sh b/charts/resources/scripts/init/o2api_start.sh index 243d86c..4581db5 100644 --- a/charts/resources/scripts/init/o2api_start.sh +++ b/charts/resources/scripts/init/o2api_start.sh @@ -1,4 +1,4 @@ -# Copyright (C) 2021-2022 Wind River Systems, Inc. +# Copyright (C) 2021-2024 Wind River Systems, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,6 +14,7 @@ #!/bin/bash -gunicorn -b 0.0.0.0:80 o2app.entrypoints.flask_application:app --certfile /configs/server.crt --keyfile /configs/server.key +# The gunicorn start with [::] to listen on both IPv4 and IPv6 +gunicorn -b [::]:80 o2app.entrypoints.flask_application:app --certfile /configs/server.crt --keyfile /configs/server.key sleep infinity diff --git a/o2common/config/config.py b/o2common/config/config.py index c93d388..d045315 100644 --- a/o2common/config/config.py +++ b/o2common/config/config.py @@ -1,4 +1,4 @@ -# Copyright (C) 2021-2022 Wind River Systems, Inc. +# Copyright (C) 2021-2024 Wind River Systems, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,6 +14,7 @@ import os import sys +import ipaddress from urllib.parse import urlparse from o2common import config @@ -117,6 +118,15 @@ def get_stx_client_args(): return client_args +def is_ipv6(address): + try: + # Try to convert the address and check the IP version + ip = ipaddress.ip_address(address) + return ip.version == 6 + except ValueError: + return False + + def get_stx_access_info(region_name="RegionOne", subcloud_hostname: str = "", sub_is_https: bool = False): # authurl = os.environ.get("STX_AUTH_URL", "http://192.168.204.1:5000/v3") @@ -140,6 +150,8 @@ def get_stx_access_info(region_name="RegionOne", subcloud_hostname: str = "", for key, val in client_args.items(): os_client_args['os_{key}'.format(key=key)] = val if "" != subcloud_hostname: + if is_ipv6(subcloud_hostname): + subcloud_hostname = "[" + subcloud_hostname + "]" orig_auth_url = urlparse(_DEFAULT_STX_URL) new_auth_url = orig_auth_url._replace( netloc=orig_auth_url.netloc.replace( diff --git a/tests/o2app-api-entry2.sh b/tests/o2app-api-entry2.sh index f343f83..f9654c5 100644 --- a/tests/o2app-api-entry2.sh +++ b/tests/o2app-api-entry2.sh @@ -23,7 +23,7 @@ then cp /tests/my-root-ca-cert.pem /configs/my-root-ca-cert.pem cp /tests/my-server-cert.pem /configs/server.crt cp /tests/my-server-key.pem /configs/server.key -gunicorn -b 0.0.0.0:80 o2app.entrypoints.flask_application:app --certfile /configs/server.crt --keyfile /configs/server.key --log-level debug +gunicorn -b [::]:80 o2app.entrypoints.flask_application:app --certfile /configs/server.crt --keyfile /configs/server.key --log-level debug else -gunicorn -b 0.0.0.0:80 o2app.entrypoints.flask_application:app --log-level debug +gunicorn -b [::]:80 o2app.entrypoints.flask_application:app --log-level debug fi -- 2.16.6