Commit 44cffecf authored by Raphael Defosseux's avatar Raphael Defosseux

Merge branch 'jinja2-config' into 'develop'

Jinja2 template for configuration files

See merge request oai/cn5g/oai-cn5g-amf!172
parents 4c73a0c2 4dde84f6
# prompt has been removed for easier Ctrl+C Ctrl+V #!/bin/sh
# please update the following information according to your configuration ################################################################################
# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
INSTANCE=1 # contributor license agreements. See the NOTICE file distributed with
PREFIX='/usr/local/etc/oai' # this work for additional information regarding copyright ownership.
sudo mkdir -m 0777 -p $PREFIX # The OpenAirInterface Software Alliance licenses this file to You under
cp ../../etc/amf.conf $PREFIX # the OAI Public License, Version 1.1 (the "License"); you may not use this file
# except in compliance with the License.
declare -A AMF_CONF # You may obtain a copy of the License at
#
AMF_CONF[@INSTANCE@]=$INSTANCE # http://www.openairinterface.org/?page_id=698
AMF_CONF[@PREFIX@]=$PREFIX #
AMF_CONF[@PID_DIRECTORY@]='/var/run' # Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
AMF_CONF[@MCC@]='208' # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AMF_CONF[@MNC@]='95' # See the License for the specific language governing permissions and
AMF_CONF[@REGION_ID@]='128' # limitations under the License.
AMF_CONF[@AMF_SET_ID@]='1' #-------------------------------------------------------------------------------
# For more information about the OpenAirInterface (OAI) Software Alliance:
AMF_CONF[@SERVED_GUAMI_MCC_0@]='208' # contact@openairinterface.org
AMF_CONF[@SERVED_GUAMI_MNC_0@]='95' ################################################################################
AMF_CONF[@SERVED_GUAMI_REGION_ID_0@]='128'
AMF_CONF[@SERVED_GUAMI_AMF_SET_ID_0@]='1' ## Sample values for configuration
AMF_CONF[@SERVED_GUAMI_MCC_1@]='460' export INSTANCE=0
AMF_CONF[@SERVED_GUAMI_MNC_1@]='11' export PID_DIRECTORY=/var/run
AMF_CONF[@SERVED_GUAMI_REGION_ID_1@]='10' export MCC=208
AMF_CONF[@SERVED_GUAMI_AMF_SET_ID_1@]='1' export MNC=95
export REGION_ID=128
AMF_CONF[@PLMN_SUPPORT_MCC@]='208' export AMF_SET_ID=1
AMF_CONF[@PLMN_SUPPORT_MNC@]='95' export SERVED_GUAMI_MCC_0=208
AMF_CONF[@PLMN_SUPPORT_TAC@]='0xa000' export SERVED_GUAMI_MNC_0=95
AMF_CONF[@SST_0@]='128' export SERVED_GUAMI_REGION_ID_0=128
AMF_CONF[@SD_0@]='128' export SERVED_GUAMI_AMF_SET_ID_0=1
AMF_CONF[@SST_1@]='1' export PLMN_SUPPORT_MCC=208
AMF_CONF[@SD_1@]='1' export PLMN_SUPPORT_MNC=95
export PLMN_SUPPORT_TAC=0xa000
AMF_CONF[@AMF_INTERFACE_NAME_FOR_NGAP@]='eth0' export SST_0=1
AMF_CONF[@AMF_INTERFACE_NAME_FOR_N11@]='eth0' export SD_0=0xFFFFFF
export SST_1=1
AMF_CONF[@EXTERNAL_AUSF@]='no' export SD_1=1
AMF_CONF[@EXTERNAL_UDM@]='no' export AMF_INTERFACE_NAME_FOR_NGAP=eth0
AMF_CONF[@EXTERNAL_NRF@]='no' export AMF_INTERFACE_NAME_FOR_N11=eth0
AMF_CONF[@EXTERNAL_NSSF@]='no' export SMF_INSTANCE_ID_0=1
AMF_CONF[@USE_FQDN_DNS@]='no' export SMF_FQDN_0=localhost
AMF_CONF[@USE_HTTP2@]='no' export SMF_IPV4_ADDR_0=127.0.0.1
export SMF_HTTP_VERSION_0=v1
AMF_CONF[@NF_REGISTRATION@]='no' export SELECTED_0=true
AMF_CONF[@SMF_SELECTION@]='no' export MYSQL_SERVER=127.0.0.1
export MYSQL_USER=root
AMF_CONF[@SMF_INSTANCE_ID_0@]='1' export MYSQL_PASS=linux
AMF_CONF[@SMF_IPV4_ADDR_0@]='192.168.22.208' export MYSQL_DB=oai_db
AMF_CONF[@SMF_HTTP_VERSION_0@]='v1' export NRF_IPV4_ADDRESS=127.0.0.1
AMF_CONF[@SMF_FQDN_0@]='oai-smf' export NRF_PORT=80
AMF_CONF[@SMF_INSTANCE_ID_1@]='2' export EXTERNAL_NRF=no
AMF_CONF[@SMF_IPV4_ADDR_1@]='192.168.22.207' export NF_REGISTRATION=yes
AMF_CONF[@SMF_HTTP_VERSION_1@]='v1' export SMF_SELECTION=yes
AMF_CONF[@SMF_FQDN_1@]='oai-smf2' export USE_FQDN_DNS=yes
export EXTERNAL_AUSF=yes
AMF_CONF[@NRF_IPV4_ADDRESS@]='192.168.22.195' export EXTERNAL_UDM=no
AMF_CONF[@NRF_PORT@]='80' export EXTERNAL_NSSF=no
AMF_CONF[@NRF_API_VERSION@]='v1' export USE_HTTP2=no
AMF_CONF[@NRF_FQDN@]='oai-nrf' export NRF_API_VERSION=v1
export NRF_FQDN=localhost
AMF_CONF[@AUSF_IPV4_ADDRESS@]='192.168.22.199' export AUSF_IPV4_ADDRESS=127.0.0.1
AMF_CONF[@AUSF_PORT@]='80' export AUSF_PORT=80
AMF_CONF[@AUSF_API_VERSION@]='v1' export AUSF_API_VERSION=v1
AMF_CONF[@AUSF_FQDN@]='oai-ausf' export AUSF_FQDN=localhost
export UDM_IPV4_ADDRESS=127.0.0.1
AMF_CONF[@NSSF_IPV4_ADDRESS@]='192.168.22.214' export UDM_PORT=80
AMF_CONF[@NSSF_PORT@]='80' export UDM_API_VERSION=v2
AMF_CONF[@NSSF_API_VERSION@]='v1' export UDM_FQDN=localhost
AMF_CONF[@NSSF_FQDN@]='oai-nssf'
../../scripts/entrypoint.py
AMF_CONF[@UDM_IPV4_ADDRESS@]='192.168.22.209' \ No newline at end of file
AMF_CONF[@UDM_PORT@]='80'
AMF_CONF[@UDM_API_VERSION@]='v1'
AMF_CONF[@UDM_FQDN@]='oai-udm'
AMF_CONF[@NRF_SELECTION@]='no'
AMF_CONF[@INT_ALGO_LIST@]='[ "NIA0" , "NIA1" , "NIA2" ]'
AMF_CONF[@CIPH_ALGO_LIST@]='[ "NEA0" , "NEA1" , "NEA2" ]'
AMF_CONF[@MYSQL_SERVER@]='127.0.0.1'
AMF_CONF[@MYSQL_USER@]='root'
AMF_CONF[@MYSQL_PASS@]='linux'
AMF_CONF[@MYSQL_DB@]='oai_db'
for K in "${!AMF_CONF[@]}"; do
egrep -lRZ "$K" $PREFIX | xargs -0 -l sed -i -e "s|$K|${AMF_CONF[$K]}|g"
ret=$?;[[ ret -ne 0 ]] && echo "Tried to replace $K with ${AMF_CONF[$K]}"
done
...@@ -64,6 +64,8 @@ RUN apt-get update && \ ...@@ -64,6 +64,8 @@ RUN apt-get update && \
openssl \ openssl \
libbrotli1 \ libbrotli1 \
netbase \ netbase \
python3\
python3-jinja2\
# Ubuntu 18 --> libasan4 # Ubuntu 18 --> libasan4
# Ubuntu 20 --> libasan5 # Ubuntu 20 --> libasan5
# Ubuntu 22 --> libasan6 # Ubuntu 22 --> libasan6
...@@ -94,7 +96,7 @@ RUN apt-get update && \ ...@@ -94,7 +96,7 @@ RUN apt-get update && \
WORKDIR /openair-amf/bin WORKDIR /openair-amf/bin
COPY --from=oai-amf-builder \ COPY --from=oai-amf-builder \
/openair-amf/build/amf/build/oai_amf \ /openair-amf/build/amf/build/oai_amf \
/openair-amf/scripts/entrypoint.sh \ /openair-amf/scripts/entrypoint.py \
/openair-amf/scripts/healthcheck.sh \ /openair-amf/scripts/healthcheck.sh \
./ ./
...@@ -127,5 +129,5 @@ HEALTHCHECK --interval=10s \ ...@@ -127,5 +129,5 @@ HEALTHCHECK --interval=10s \
--retries=6 \ --retries=6 \
CMD /openair-amf/bin/healthcheck.sh CMD /openair-amf/bin/healthcheck.sh
ENTRYPOINT ["/bin/bash","/openair-amf/bin/entrypoint.sh"] ENTRYPOINT ["python3", "/openair-amf/bin/entrypoint.py"]
CMD ["/openair-amf/bin/oai_amf", "-c", "/openair-amf/etc/amf.conf", "-o"] CMD ["/openair-amf/bin/oai_amf", "-c", "/openair-amf/etc/amf.conf", "-o"]
...@@ -81,7 +81,7 @@ def perform_flattening(tag): ...@@ -81,7 +81,7 @@ def perform_flattening(tag):
cmd += ' --change "EXPOSE 38412/sctp" ' cmd += ' --change "EXPOSE 38412/sctp" '
cmd += ' --change "HEALTHCHECK --interval=10s --timeout=15s --retries=6 CMD /openair-amf/bin/healthcheck.sh" ' cmd += ' --change "HEALTHCHECK --interval=10s --timeout=15s --retries=6 CMD /openair-amf/bin/healthcheck.sh" '
cmd += ' --change "CMD [\\"/openair-amf/bin/oai_amf\\", \\"-c\\", \\"/openair-amf/etc/amf.conf\\", \\"-o\\"]" ' cmd += ' --change "CMD [\\"/openair-amf/bin/oai_amf\\", \\"-c\\", \\"/openair-amf/etc/amf.conf\\", \\"-o\\"]" '
cmd += ' --change "ENTRYPOINT [\\"/bin/bash\\", \\"/openair-amf/bin/entrypoint.sh\\"]" ' cmd += ' --change "ENTRYPOINT [\\"python3\\", \\"/openair-amf/bin/entrypoint.py\\"]" '
cmd += ' - ' + image_prefix + tag cmd += ' - ' + image_prefix + tag
print (cmd) print (cmd)
subprocess.check_output(cmd, shell=True, universal_newlines=True) subprocess.check_output(cmd, shell=True, universal_newlines=True)
......
...@@ -107,6 +107,8 @@ RUN rm -f /etc/rhsm-host && \ ...@@ -107,6 +107,8 @@ RUN rm -f /etc/rhsm-host && \
boost \ boost \
libevent \ libevent \
findutils \ findutils \
python3\
python3-jinja2\
mysql-libs \ mysql-libs \
libconfig && \ libconfig && \
microdnf clean all -y && \ microdnf clean all -y && \
...@@ -119,7 +121,7 @@ RUN rm -f /etc/rhsm-host && \ ...@@ -119,7 +121,7 @@ RUN rm -f /etc/rhsm-host && \
WORKDIR /openair-amf/bin WORKDIR /openair-amf/bin
COPY --from=oai-amf-builder \ COPY --from=oai-amf-builder \
/openair-amf/build/amf/build/oai_amf \ /openair-amf/build/amf/build/oai_amf \
/openair-amf/scripts/entrypoint.sh \ /openair-amf/scripts/entrypoint.py \
/openair-amf/scripts/healthcheck.sh \ /openair-amf/scripts/healthcheck.sh \
./ ./
...@@ -146,5 +148,5 @@ HEALTHCHECK --interval=10s \ ...@@ -146,5 +148,5 @@ HEALTHCHECK --interval=10s \
--retries=6 \ --retries=6 \
CMD /openair-amf/bin/healthcheck.sh CMD /openair-amf/bin/healthcheck.sh
ENTRYPOINT ["/openair-amf/bin/entrypoint.sh"] ENTRYPOINT ["python3", "/openair-amf/bin/entrypoint.py"]
CMD ["/openair-amf/bin/oai_amf", "-c", "/openair-amf/etc/amf.conf", "-o"] CMD ["/openair-amf/bin/oai_amf", "-c", "/openair-amf/etc/amf.conf", "-o"]
...@@ -85,6 +85,8 @@ RUN apt-get update && \ ...@@ -85,6 +85,8 @@ RUN apt-get update && \
openssl \ openssl \
libbrotli1 \ libbrotli1 \
netbase \ netbase \
python3\
python3-jinja2\
# Ubuntu 18 --> libasan4 # Ubuntu 18 --> libasan4
# Ubuntu 20 --> libasan5 # Ubuntu 20 --> libasan5
# Ubuntu 22 --> libasan6 # Ubuntu 22 --> libasan6
...@@ -115,7 +117,7 @@ RUN apt-get update && \ ...@@ -115,7 +117,7 @@ RUN apt-get update && \
WORKDIR /openair-amf/bin WORKDIR /openair-amf/bin
COPY --from=oai-amf-builder \ COPY --from=oai-amf-builder \
/openair-amf/build/amf/build/oai_amf \ /openair-amf/build/amf/build/oai_amf \
/openair-amf/scripts/entrypoint.sh \ /openair-amf/scripts/entrypoint.py \
/openair-amf/scripts/healthcheck.sh \ /openair-amf/scripts/healthcheck.sh \
./ ./
...@@ -148,5 +150,5 @@ HEALTHCHECK --interval=10s \ ...@@ -148,5 +150,5 @@ HEALTHCHECK --interval=10s \
--retries=6 \ --retries=6 \
CMD /openair-amf/bin/healthcheck.sh CMD /openair-amf/bin/healthcheck.sh
ENTRYPOINT ["/bin/bash","/openair-amf/bin/entrypoint.sh"] ENTRYPOINT ["python3", "/openair-amf/bin/entrypoint.py"]
CMD ["/openair-amf/bin/oai_amf", "-c", "/openair-amf/etc/amf.conf", "-o"] CMD ["/openair-amf/bin/oai_amf", "-c", "/openair-amf/etc/amf.conf", "-o"]
...@@ -19,130 +19,132 @@ ...@@ -19,130 +19,132 @@
# contact@openairinterface.org # contact@openairinterface.org
################################################################################ ################################################################################
AMF = #### This file is a jinja2 template all the values between double curly brace will be replaced with environment variables
AMF =
{ {
INSTANCE_ID = @INSTANCE@; # 0 is the default INSTANCE_ID = {{ env["INSTANCE"] if "INSTANCE" in env.keys() else 0 }} ; # 0 is the default
PID_DIRECTORY = "@PID_DIRECTORY@"; # /var/run is the default PID_DIRECTORY = "{{ env["PID_DIRECTORY"] if "PID_DIRECTORY" in env.keys() else '/var/run' }}"; # /var/run is the default
AMF_NAME = "OAI-AMF"; AMF_NAME = "OAI-AMF";
RELATIVE_CAPACITY = 30; RELATIVE_CAPACITY = 30;
# Display statistics about whole system (in seconds) # Display statistics about whole system (in seconds)
STATISTICS_TIMER_INTERVAL = 20; STATISTICS_TIMER_INTERVAL = 20;
CORE_CONFIGURATION: CORE_CONFIGURATION:
{ {
EMERGENCY_SUPPORT = "false"; EMERGENCY_SUPPORT = "false";
}; };
GUAMI: GUAMI:
{ {
MCC = "@MCC@"; MNC = "@MNC@"; RegionID = "@REGION_ID@"; AMFSetID = "@AMF_SET_ID@"; AMFPointer = "1" MCC = "{{ env["MCC"] }}"; MNC = "{{ env["MNC"] }}"; RegionID = "{{ env["REGION_ID"] }}"; AMFSetID = "{{ env["AMF_SET_ID"] }}"; AMFPointer = "1"
} }
SERVED_GUAMI_LIST = ( SERVED_GUAMI_LIST = (
{MCC = "@SERVED_GUAMI_MCC_0@"; MNC = "@SERVED_GUAMI_MNC_0@"; RegionID = "@SERVED_GUAMI_REGION_ID_0@"; AMFSetID = "@SERVED_GUAMI_AMF_SET_ID_0@"; AMFPointer = "0"}, #48bits <MCC><MNC><RegionID><AMFSetID><AMFPointer> {MCC = "{{ env["SERVED_GUAMI_MCC_0"] }}"; MNC = "{{ env["SERVED_GUAMI_MNC_0"] }}"; RegionID = "{{ env["SERVED_GUAMI_REGION_ID_0"] }}"; AMFSetID = "{{ env["SERVED_GUAMI_AMF_SET_ID_0"] }}"; AMFPointer = "0"},
{MCC = "@SERVED_GUAMI_MCC_1@"; MNC = "@SERVED_GUAMI_MNC_1@"; RegionID = "@SERVED_GUAMI_REGION_ID_1@"; AMFSetID = "@SERVED_GUAMI_AMF_SET_ID_1@"; AMFPointer = "1"} #48bits <MCC><MNC><RegionID><AMFSetID><AMFPointer> #48bits <MCC><MNC><RegionID><AMFSetID><AMFPointer>
{MCC = "{{ env["SERVED_GUAMI_MCC_1"] }}"; MNC = "{{ env["SERVED_GUAMI_MNC_1"] }}"; RegionID = "{{ env["SERVED_GUAMI_REGION_ID_1"] }}"; AMFSetID = "{{ env["SERVED_GUAMI_AMF_SET_ID_1"] }}"; AMFPointer = "1"}
#48bits <MCC><MNC><RegionID><AMFSetID><AMFPointer>
); );
PLMN_SUPPORT_LIST = ( PLMN_SUPPORT_LIST = ({
{ MCC = "{{ env["PLMN_SUPPORT_MCC"] }}"; MNC = "{{ env["PLMN_SUPPORT_MNC"] }}"; TAC = {{ env["PLMN_SUPPORT_TAC"] }};
MCC = "@PLMN_SUPPORT_MCC@"; MNC = "@PLMN_SUPPORT_MNC@"; TAC = @PLMN_SUPPORT_TAC@;
SLICE_SUPPORT_LIST = ( SLICE_SUPPORT_LIST = (
{SST = @SST_0@; SD = "@SD_0@"}, {SST = {{ env["SST_0"] }}; SD = "{{ env["SD_0"] if "SD_0" in env.keys() else '0xFFFFFF' }}"}
{SST = @SST_1@; SD = "@SD_1@"}, {% if "SST_1" in env.keys() %},{SST = {{ env["SST_1"] }};SD = "{{ env["SD_1"] if "SD_1" in env.keys() else '0xFFFFFF' }}"}{% endif %}
{SST = @SST_2@; SD = "@SD_2@"} {% if "SST_2" in env.keys() %},{SST = {{ env["SST_2"] }};SD = "{{ env["SD_2"] if "SD_2" in env.keys() else '0xFFFFFF' }}"}{% endif %}
) )
} });
);
INTERFACES: INTERFACES:
{ {
# AMF binded interface for N1/N2 interface (NGAP) # AMF binded interface for N1/N2 interface (NGAP)
NGAP_AMF: NGAP_AMF:
{ {
INTERFACE_NAME = "@AMF_INTERFACE_NAME_FOR_NGAP@"; INTERFACE_NAME = "{{ env["AMF_INTERFACE_NAME_FOR_NGAP"] }}";
IPV4_ADDRESS = "read"; IPV4_ADDRESS = "read";
PORT = 38412; PORT = 38412;
PPID = 60; PPID = 60;
}; };
# AMF binded interface for SBI (N11 (SMF)/N12 (AUSF), etc.) # AMF binded interface for SBI (N11 (SMF)/N12 (AUSF), etc.)
SBI: SBI:
{ {
INTERFACE_NAME = "@AMF_INTERFACE_NAME_FOR_N11@"; INTERFACE_NAME = "{{ env["AMF_INTERFACE_NAME_FOR_N11"] }}";
IPV4_ADDRESS = "read"; IPV4_ADDRESS = "read";
PORT = 80; PORT = 80;
API_VERSION = "v1"; API_VERSION = "v1";
HTTP2_PORT = 8080; HTTP2_PORT = 8080;
SMF_INSTANCES_POOL = ( SMF_INSTANCES_POOL = (
{SMF_INSTANCE_ID = @SMF_INSTANCE_ID_0@; IPV4_ADDRESS = "@SMF_IPV4_ADDR_0@"; PORT = "80"; HTTP2_PORT = 8080, VERSION = "@SMF_HTTP_VERSION_0@"; FQDN = "@SMF_FQDN_0@", SELECTED = "true"}, {SMF_INSTANCE_ID = 1; IPV4_ADDRESS = "{{ env["SMF_IPV4_ADDR_0"] if "SMF_IPV4_ADDR_0" in env.keys() else '0.0.0.0' }}"; PORT = "80"; HTTP2_PORT = 8080, VERSION = "{{ env["SMF_HTTP_VERSION"] if "SMF_HTTP_VERSION" in env.keys() else 'v1' }}"; FQDN = "{{ env["SMF_FQDN_0"] if "SMF_FQDN_0" in env.keys() else 'localhost' }}", SELECTED = "{{ env["SELECTED_0"] }}"}
{SMF_INSTANCE_ID = @SMF_INSTANCE_ID_1@; IPV4_ADDRESS = "@SMF_IPV4_ADDR_1@"; PORT = "80"; HTTP2_PORT = 8080, VERSION = "@SMF_HTTP_VERSION_1@"; FQDN = "@SMF_FQDN_1@", SELECTED = "false"}
); );
}; };
NRF : NRF :
{ {
IPV4_ADDRESS = "@NRF_IPV4_ADDRESS@"; IPV4_ADDRESS = "{{ env["NRF_IPV4_ADDRESS"] if "NRF_IPV4_ADDRESS" in env.keys() else '0.0.0.0' }}";
PORT = @NRF_PORT@; # Default: 80 PORT = {{ env["NRF_PORT"] if "NRF_PORT" in env.keys() else 80 }}; # Default: 80
API_VERSION = "@NRF_API_VERSION@"; API_VERSION = "{{ env["NRF_API_VERSION"] if "NRF_API_VERSION" in env.keys() else 'v1' }}";
FQDN = "@NRF_FQDN@" FQDN = "{{ env["NRF_FQDN"] if "NRF_FQDN" in env.keys() else 'localhost' }}"
}; };
AUSF : AUSF :
{ {
IPV4_ADDRESS = "@AUSF_IPV4_ADDRESS@"; IPV4_ADDRESS = "{{ env["AUSF_IPV4_ADDRESS"] if "AUSF_IPV4_ADDRESS" in env.keys() else '0.0.0.0' }}";
PORT = @AUSF_PORT@; # Default: 80 PORT = {{ env["AUSF_PORT"] if "AUSF_PORT" in env.keys() else 80 }}; # Default: 80
API_VERSION = "@AUSF_API_VERSION@"; API_VERSION = "{{ env["AUSF_API_VERSION"] if "AUSF_API_VERSION" in env.keys() else 'v1' }}";
FQDN = "@AUSF_FQDN@" FQDN = "{{ env["AUSF_FQDN"] if "AUSF_FQDN" in env.keys() else 'localhost' }}"
}; };
UDM : UDM :
{ {
IPV4_ADDRESS = "@UDM_IPV4_ADDRESS@"; IPV4_ADDRESS = "{{ env["UDM_IPV4_ADDRESS"] if "UDM_IPV4_ADDRESS" in env.keys() else '0.0.0.0' }}";
PORT = @UDM_PORT@; # Default: 80 PORT = {{ env["UDM_PORT"] if "UDM_PORT" in env.keys() else 80 }}; # Default: 80
API_VERSION = "v2"; API_VERSION = "{{ env["UDM_API_VERSION"] if "UDM_API_VERSION" in env.keys() else 'v2' }}";
FQDN = "@UDM_FQDN@"; FQDN = "{{ env["UDM_FQDN"] if "UDM_FQDN" in env.keys() else 'localhost' }}"
}; };
NSSF : NSSF :
{ {
IPV4_ADDRESS = "@NSSF_IPV4_ADDRESS@"; IPV4_ADDRESS = "{{ env["NSSF_HOST"] if "NSSF_HOST" in env.keys() else '0.0.0.0' }}";
PORT = @NSSF_PORT@; # Default: 80 PORT = {{ env["NSSF_PORT"] if "NSSF_PORT" in env.keys() else 80 }}; # Default: 80
API_VERSION = "@NSSF_API_VERSION@"; API_VERSION = "{{ env["NSSF_API_VERSION"] if "NSSF_API_VERSION" in env.keys() else 'v2' }}";
FQDN = "@NSSF_FQDN@" FQDN = "{{ env["NSSF_FQDN"] if "NSSF_FQDN" in env.keys() else 'oai-nssf' }}"
}; };
};
SUPPORT_FEATURES: };
SUPPORT_FEATURES:
{ {
# STRING, {"yes", "no"}, # STRING, {"yes", "no"},
NF_REGISTRATION = "@NF_REGISTRATION@"; # Set to yes if AMF resgisters to an NRF NF_REGISTRATION = "{{ env["NF_REGISTRATION"] if "NF_REGISTRATION" in env.keys() else 'no' }}"; # Set to yes if AMF registers to an NRF
NRF_SELECTION = "@NRF_SELECTION@"; # Set to yes to enable NRF discovery and selection NRF_SELECTION = "{{ env["NRF_SELECTION"] if "NRF_SELECTION" in env.keys() else 'no' }}"; # Set to yes to enable NRF discovery and selection
EXTERNAL_NRF = "@EXTERNAL_NRF@"; # Set to yes if AMF works with an external NRF EXTERNAL_NRF = "{{ env["EXTERNAL_NRF"] if "EXTERNAL_NRF" in env.keys() else 'no' }}"; # Set to yes if AMF works with an external NRF
SMF_SELECTION = "@SMF_SELECTION@"; # Set to yes to enable SMF discovery and selection SMF_SELECTION = "{{ env["SMF_SELECTION"] if "SMF_SELECTION" in env.keys() else 'no' }}"; # Set to yes to enable SMF discovery and selection
EXTERNAL_AUSF = "@EXTERNAL_AUSF@"; # Set to yes if AMF works with an external AUSF EXTERNAL_AUSF = "{{ env["EXTERNAL_AUSF"] if "EXTERNAL_AUSF" in env.keys() else 'no' }}"; # Set to yes if AMF works with an external AUSF
EXTERNAL_UDM = "@EXTERNAL_UDM@"; # Set to yes if AMF works with an external UDM EXTERNAL_UDM = "{{ env["EXTERNAL_UDM"] if "EXTERNAL_UDM" in env.keys() else 'no' }}"; # Set to yes if AMF works with an external UDM
EXTERNAL_NSSF = "@EXTERNAL_NSSF@"; # Set to yes if AMF works with an external NSSF EXTERNAL_NSSF = "{{ env["EXTERNAL_NSSF"] if "EXTERNAL_NSSF" in env.keys() else 'no' }}"; # Set to yes if AMF works with an external NSSF
USE_FQDN_DNS = "@USE_FQDN_DNS@"; # Set to yes if AMF relies on a DNS to resolve NRF/SMF/UDM/AUSF's FQDN USE_FQDN_DNS = "{{ env["USE_FQDN_DNS"] if "USE_FQDN_DNS" in env.keys() else 'no' }}"; # Set to yes if AMF relies on a DNS to resolve NRF/SMF/UDM/AUSF's FQDN
USE_HTTP2 = "@USE_HTTP2@"; # Set to yes to enable HTTP2 for AMF server USE_HTTP2 = "{{ env["USE_HTTP2"] if "USE_HTTP2" in env.keys() else 'no' }}"; # Set to yes to enable HTTP2 for AMF server
} }
AUTHENTICATION: AUTHENTICATION:
{ {
## MySQL mandatory options ## MySQL mandatory options
MYSQL_server = "@MYSQL_SERVER@"; # MySQL Server address MYSQL_server = "{{ env["MYSQL_SERVER"] if "MYSQL_SERVER" in env.keys() else 'mysql' }}"; # MySQL Server address
MYSQL_user = "@MYSQL_USER@"; # Database server login MYSQL_user = "{{ env["MYSQL_USER"] if "MYSQL_USER" in env.keys() else 'test' }}"; # Database server login
MYSQL_pass = "@MYSQL_PASS@"; # Database server password MYSQL_pass = "{{ env["MYSQL_PASS"] if "MYSQL_PASS" in env.keys() else 'test' }}"; # Database server password
MYSQL_db = "@MYSQL_DB@"; # Your database name MYSQL_db = "{{ env["MYSQL_DB"] if "MYSQL_DB" in env.keys() else 'oai_db' }}"; # Your database name
RANDOM = "true"; RANDOM = "true";
}; };
NAS: NAS:
{ {
ORDERED_SUPPORTED_INTEGRITY_ALGORITHM_LIST = @INT_ALGO_LIST@; #Default [ "NIA0" , "NIA1" , "NIA2" ]; ORDERED_SUPPORTED_INTEGRITY_ALGORITHM_LIST = {{ env["INT_ALGO_LIST"] if "INT_ALGO_LIST" in env.keys() else [ "NIA0" , "NIA1" , "NIA2" ] | tojson }} ;
ORDERED_SUPPORTED_CIPHERING_ALGORITHM_LIST = @CIPH_ALGO_LIST@; #Default [ "NEA0" , "NEA1" , "NEA2" ]; ORDERED_SUPPORTED_CIPHERING_ALGORITHM_LIST = {{ env["CIPH_ALGO_LIST"] if "CIPH_ALGO_LIST" in env.keys() else [ "NEA0" , "NEA1" , "NEA2" ] | tojson }} ;
}; };
}; };
...@@ -151,4 +153,4 @@ MODULES = ...@@ -151,4 +153,4 @@ MODULES =
NGAP_MESSAGE = ( NGAP_MESSAGE = (
{MSG_NAME = "NGSetupRequest"; ProcedureCode = 21; TypeOfMessage = "initialMessage"} {MSG_NAME = "NGSetupRequest"; ProcedureCode = 21; TypeOfMessage = "initialMessage"}
); );
}; };
\ No newline at end of file
#!/usr/bin/env python3
################################################################################
# Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The OpenAirInterface Software Alliance licenses this file to You under
# the OAI Public License, Version 1.1 (the "License"); you may not use this file
# except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.openairinterface.org/?page_id=698
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#-------------------------------------------------------------------------------
# For more information about the OpenAirInterface (OAI) Software Alliance:
# contact@openairinterface.org
################################################################################
from jinja2 import Environment, FileSystemLoader
import socket
import os
import sys
CONFIG_FILE = str(os.getenv('CONFIG_FILE','/openair-amf/etc/amf.conf'))
MOUNT_CONFIG = str(os.getenv('MOUNT_CONFIG','no')).lower()
def resolve(hostname):
try:
return socket.gethostbyname(hostname)
except socket.error:
print(f"Not able to resolve {hostname}")
def render(filepath,funcs,values):
env = Environment(loader=FileSystemLoader(os.path.dirname(filepath)))
jinja_template = env.get_template(os.path.basename(filepath))
jinja_template.globals.update(funcs)
template_string = jinja_template.render(env=values)
return template_string
env_variables = dict()
#list of all the environment variables
for name, value in os.environ.items():
env_variables.update({name:value})
if MOUNT_CONFIG != "yes":
output = render(CONFIG_FILE,{"resolve":resolve},env_variables)
with open(CONFIG_FILE, "w") as fh:
fh.write(output)
print(f"Configuration file {CONFIG_FILE} is ready")
if len(sys.argv) == 1:
sys.exit(0)
os.execvp(sys.argv[1], sys.argv[1:]) #important for running the network function it works like exec $@
else:
print("Configuration file is mounted to the network function")
\ No newline at end of file
#!/bin/bash
set -euo pipefail
CONFIG_DIR="/openair-amf/etc"
# Default values
EXTERNAL_NRF=${EXTERNAL_NRF:-no}
EXTERNAL_NSSF=${EXTERNAL_NSSF:-no}
EXTERNAL_AUSF=${EXTERNAL_AUSF:-no}
EXTERNAL_UDM=${EXTERNAL_UDM:-no}
UDM_IPV4_ADDRESS=${UDM_IPV4_ADDRESS:-0.0.0.0}
UDM_PORT=${UDM_PORT:-80}
UDM_API_VERSION=${UDM_API_VERSION:-v2}
UDM_FQDN=${UDM_FQDN:-oai-udm}
EXTERNAL_NRF=${EXTERNAL_NRF:-no}
NRF_SELECTION=${NRF_SELECTION:-no}
EXTERNAL_NSSF=${EXTERNAL_NSSF:-no}
NSSF_IPV4_ADDRESS=${NSSF_IPV4_ADDRESS:-0.0.0.0}
NSSF_PORT=${NSSF_PORT:-80}
NSSF_API_VERSION=${NSSF_API_VERSION:-v2}
NSSF_FQDN=${NSSF_FQDN:-oai-nssf}
INT_ALGO_LIST=${INT_ALGO_LIST:-'[ "NIA0" , "NIA1" , "NIA2" ]'}
CIPH_ALGO_LIST=${CIPH_ALGO_LIST:-'[ "NEA0" , "NEA1" , "NEA2" ]'}
USE_HTTP2=${USE_HTTP2:-no}
SST_0=${SST_0:-128}
SD_0=${SD_0:-128}
SST_1=${SST_1:-1}
SD_1=${SD_1:-0xFFFFFF}
SST_2=${SST_2:-130}
SD_2=${SD_2:-130}
OPERATOR_KEY=${OPERATOR_KEY:-'63bfa50ee6523365ff14c1f45f88737d'}
if [[ ${USE_FQDN_DNS} == "yes" ]];then
NSSF_IPV4_ADDR=${NSSF_IPV4_ADDR_0:-0.0.0.0}
SMF_IPV4_ADDR_0=${SMF_IPV4_ADDR_0:-0.0.0.0}
SMF_IPV4_ADDR_1=${SMF_IPV4_ADDR_1:-0.0.0.0}
NRF_IPV4_ADDRESS=${NRF_IPV4_ADDRESS:-0.0.0.0}
AUSF_IPV4_ADDRESS=${AUSF_IPV4_ADDRESS:-0.0.0.0}
UDM_IPV4_ADDRESS=${UDM_IPV4_ADDRESS:-0.0.0.0}
fi
for c in ${CONFIG_DIR}/*.conf; do
# grep variable names (format: ${VAR}) from template to be rendered
if ! grep -oP '@[a-zA-Z0-9_]+@' ${c}; then
echo "Configuration is already set"
exec "$@"
fi
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs)
echo "Now setting these variables '${VARS}'"
# create sed expressions for substituting each occurrence of ${VAR}
# with the value of the environment variable "VAR"
EXPRESSIONS=""
for v in ${VARS}; do
NEW_VAR=`echo $v | sed -e "s#@##g"`
if [[ -z ${!NEW_VAR+x} ]]; then
echo "Error: Environment variable '${NEW_VAR}' is not set." \
"Config file '$(basename $c)' requires all of $VARS."
exit 1
fi
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
done
EXPRESSIONS="${EXPRESSIONS#';'}"
# render template and inline replace config file
sed -i "${EXPRESSIONS}" ${c}
done
echo "Done setting the configuration"
exec "$@"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment