confd: refactor yang modules setup script for better modularity and maintainability

- Moved setup.sh and yang_modules files from infix/src/confd/scripts/ to infix/utils/ to streamline the repository structure
- Updated confd.mk to correctly reference the new location of the setup script
- Introduced yang_modules_<type>.inc file to list all YANG modules for improved clarity and maintainability
- Modified the new setup script to dynamically source module lists from yang_modules_<type>.inc
This commit is contained in:
Ahmed Karic
2024-06-18 18:54:18 +02:00
committed by Mattias Walström
parent 8baca7df03
commit 7d9257f5f6
4 changed files with 214 additions and 10 deletions
+25 -10
View File
@@ -4,7 +4,6 @@
#
################################################################################
CONFD_VERSION = 1.0
CONFD_SITE_METHOD = local
CONFD_SITE = $(BR2_EXTERNAL_INFIX_PATH)/src/confd
@@ -17,13 +16,13 @@ CONFD_AUTORECONF = YES
CONFD_SYSREPO_SHM_PREFIX = sr_buildroot$(subst /,_,$(CONFIG_DIR))_confd
define CONFD_CONF_ENV
CFLAGS="$(INFIX_CFLAGS)"
CFLAGS="$(INFIX_CFLAGS)"
endef
ifeq ($(BR2_PACKAGE_PODMAN),y)
CONFD_CONF_OPTS += --enable-containers
CONFD_CONF_OPTS += --enable-containers
else
CONFD_CONF_OPTS += --disable-containers
CONFD_CONF_OPTS += --disable-containers
endif
define CONFD_INSTALL_EXTRA
@@ -33,24 +32,40 @@ define CONFD_INSTALL_EXTRA
mkdir -p $(TARGET_DIR)/etc/avahi/services
cp $(CONFD_PKGDIR)/avahi.service $(TARGET_DIR)/etc/avahi/services/netconf.service
endef
define CONFD_INSTALL_YANG_MODULES
USE_CONTAINERS=$(BR2_PACKAGE_PODMAN) \
COMMON_SYSREPO_ENV = \
SYSREPO_SHM_PREFIX=$(CONFD_SYSREPO_SHM_PREFIX) \
SYSREPOCTL_EXECUTABLE="$(HOST_DIR)/bin/sysrepoctl" \
SYSREPOCFG_EXECUTABLE="$(HOST_DIR)/bin/sysrepocfg" \
SEARCH_PATH="$(TARGET_DIR)/usr/share/yang/modules/confd/" \
$(@D)/scripts/setup.sh
SEARCH_PATH="$(TARGET_DIR)/usr/share/yang/modules/confd/"
define CONFD_INSTALL_YANG_MODULES
$(COMMON_SYSREPO_ENV) \
$(BR2_EXTERNAL_INFIX_PATH)/utils/yang_modules_setup.sh $(CONFD_PKGDIR)/yang_modules_confd.inc
endef
ifeq ($(BR2_PACKAGE_PODMAN),y)
define CONFD_INSTALL_YANG_MODULES_CONTAINERS
$(COMMON_SYSREPO_ENV) \
$(BR2_EXTERNAL_INFIX_PATH)/utils/yang_modules_setup.sh $(CONFD_PKGDIR)/yang_modules_containers.inc
endef
endif
define CONFD_PERMISSIONS
/etc/sysrepo/data/ r 660 root wheel - - - - -
/etc/sysrepo/data d 770 root wheel - - - - -
/etc/sysrepo/data/ r 660 root wheel - - - - -
/etc/sysrepo/data d 770 root wheel - - - - -
endef
define CONFD_CLEANUP
rm -f /dev/shm/$(CONFD_SYSREPO_SHM_PREFIX)*
endef
CONFD_PRE_INSTALL_TARGET_HOOKS += CONFD_CLEANUP
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_EXTRA
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_YANG_MODULES
ifeq ($(BR2_PACKAGE_PODMAN),y)
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_YANG_MODULES_CONTAINERS
endif
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_CLEANUP
$(eval $(autotools-package))
+47
View File
@@ -0,0 +1,47 @@
MODULES=(
"ietf-system@2014-08-06.yang -e authentication -e local-users -e ntp -e ntp-udp-port -e timezone-name"
"iana-timezones@2013-11-19.yang"
"notifications@2008-07-14.yang"
"ietf-tcp-common@2019-07-02.yang -e keepalives-supported"
"ietf-interfaces@2018-02-20.yang -e if-mib"
"ietf-ip@2018-02-22.yang -e ipv6-privacy-autoconf"
"ietf-network-instance@2019-01-21.yang"
"ietf-netconf-monitoring@2010-10-04.yang"
"ietf-netconf-nmda@2019-01-07.yang -e origin -e with-defaults"
"ietf-subscribed-notifications@2019-09-09.yang -e encode-xml -e replay -e subtree -e xpath"
"ietf-yang-push@2019-09-09.yang -e on-change"
"ietf-routing@2018-03-13.yang"
"ietf-ipv6-unicast-routing@2018-03-13.yang"
"ietf-ipv4-unicast-routing@2018-03-13.yang"
"ietf-ospf@2022-10-19.yang -e bfd -e explicit-router-id"
"iana-if-type@2023-01-26.yang"
"iana-hardware@2018-03-13.yang"
"ietf-hardware@2018-03-13.yang -e hardware-state"
"infix-hardware@2024-04-25.yang"
"ieee802-dot1q-types@2022-10-29.yang"
"infix-ip@2023-09-14.yang"
"infix-if-type@2024-01-29.yang"
"infix-routing@2024-03-06.yang"
"ieee802-dot1ab-lldp@2022-03-15.yang"
"infix-lldp@2023-08-23.yang"
"infix-dhcp-client@2024-04-12.yang"
"infix-shell-type@2023-08-21.yang"
"infix-system@2024-04-12.yang"
"infix-services@2024-05-30.yang"
"ieee802-ethernet-interface@2019-06-21.yang"
"infix-ethernet-interface@2024-02-27.yang"
"infix-factory-default@2023-06-28.yang"
# from sysrepo
"sysrepo-plugind@2022-08-26.yang"
# from netopeer
"nc-notifications@2008-07-14.yang"
"ietf-crypto-types@2023-12-28.yang -e encrypted-private-keys"
"ietf-netconf-server@2023-12-28.yang -e ssh-listen -e tls-listen -e ssh-call-home -e tls-call-home"
"ietf-netconf-acm@2018-02-14.yang"
"ietf-netconf@2013-09-29.yang -e writable-running -e candidate -e rollback-on-error -e validate -e startup -e url -e xpath -e confirmed-commit"
"ietf-truststore@2023-12-28.yang -e central-truststore-supported -e certificates"
"ietf-keystore@2023-12-28.yang -e central-keystore-supported -e inline-definitions-supported -e asymmetric-keys -e symmetric-keys"
"ietf-ssh-server@2023-12-28.yang -e local-user-auth-password -e local-user-auth-publickey"
"ietf-tls-server@2023-12-28.yang -e server-ident-raw-public-key -e server-ident-x509-cert"
"ietf-restconf@2017-01-26.yang"
)
@@ -0,0 +1,4 @@
MODULES=(
"infix-interfaces@2024-01-15.yang -e vlan-filtering -e containers"
"infix-containers@2024-03-27.yang"
)
+138
View File
@@ -0,0 +1,138 @@
#!/usr/bin/env bash
set -x
# This is based on scripts/setup.sh from Netopeer2/libnetconf2
# env variables NP2_MODULE_DIR, NP2_MODULE_PERMS must be defined and NP2_MODULE_OWNER, NP2_MODULE_GROUP will be used if
# defined when executing this script!
#if [ -z "$NP2_MODULE_DIR" -o -z "$NP2_MODULE_PERMS" ]; then
# echo "Required environment variables not defined!"
# exit 1
#fi
# Source the provided file, which is expected to contain the list of YANG modules and their features.
# This file, specified by the first argument to the script ($1), is sourced to populate the MODULES
# array with the modules and their respective features to be processed by this script.
# The file typically includes definitions in the form of module@revision with optional features to enable,
# e.g., module@revision -e feature1 -e feature2.
source $1
# optional env variable override
if [ -n "$SYSREPOCTL_EXECUTABLE" ]; then
SYSREPOCTL="$SYSREPOCTL_EXECUTABLE"
# avoid problems with sudo PATH
elif [ `id -u` -eq 0 ] && [ -n "$USER" ] && [ `command -v su` ]; then
SYSREPOCTL=`command -v sysrepoctl -l $USER`
else
SYSREPOCTL=`command -v sysrepoctl`
fi
MODDIR=${SEARCH_PATH}
PERMS="660"
#OWNER=root
#GROUP=wheel
CMD_INSTALL=
# functions
INSTALL_MODULE_CMD() {
if [ -z "${CMD_INSTALL}" ]; then
CMD_INSTALL="'$SYSREPOCTL' -s $MODDIR -v2"
fi
CMD_INSTALL="$CMD_INSTALL -i $MODDIR/$1 -p '$PERMS'"
if [ ! -z "${OWNER}" ]; then
CMD_INSTALL="$CMD_INSTALL -o '$OWNER'"
fi
if [ ! -z "${GROUP}" ]; then
CMD_INSTALL="$CMD_INSTALL -g '$GROUP'"
fi
}
UPDATE_MODULE() {
CMD="'$SYSREPOCTL' -U $MODDIR/$1 -s '$MODDIR -v2"
eval $CMD
local rc=$?
if [ $rc -ne 0 ]; then
exit $rc
fi
}
CHANGE_PERMS() {
CMD="'$SYSREPOCTL' -c $1 -p '$PERMS' -v2"
if [ ! -z "${OWNER}" ]; then
CMD="$CMD -o '$OWNER'"
fi
if [ ! -z "${GROUP}" ]; then
CMD="$CMD -g '$GROUP'"
fi
eval $CMD
local rc=$?
if [ $rc -ne 0 ]; then
exit $rc
fi
}
ENABLE_FEATURE() {
"$SYSREPOCTL" -c $1 -e $2 -v2
local rc=$?
if [ $rc -ne 0 ]; then
exit $rc
fi
}
# get current modules
SCTL_MODULES=`$SYSREPOCTL -l`
for i in "${MODULES[@]}"; do
name=`echo "$i" | sed 's/\([^@]*\).*/\1/'`
SCTL_MODULE=`echo "$SCTL_MODULES" | grep "^$name \+|[^|]*| I"`
if [ -z "$SCTL_MODULE" ]; then
# prepare command to install module with all its features
INSTALL_MODULE_CMD "$i"
continue
fi
sctl_revision=`echo "$SCTL_MODULE" | sed 's/[^|]*| \([^ ]*\).*/\1/'`
revision=`echo "$i" | sed 's/[^@]*@\([^\.]*\).*/\1/'`
if [ "$sctl_revision" \< "$revision" ]; then
# update module without any features
file=`echo "$i" | cut -d' ' -f 1`
UPDATE_MODULE "$file"
fi
sctl_owner=`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{3\} \([^:]*\).*/\2/'`
sctl_group=`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{3\}[^:]*:\([^ ]*\).*/\2/'`
sctl_perms=`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{4\} \([^ ]*\).*/\2/'`
if [ "$sctl_perms" != "$PERMS" ]; then
# change permissions/owner
CHANGE_PERMS "$name"
fi
# parse sysrepoctl features and add extra space at the end for easier matching
sctl_features="`echo "$SCTL_MODULE" | sed 's/\([^|]*|\)\{6\}\(.*\)/\2/'` "
# parse features we want to enable
features=`echo "$i" | sed 's/[^ ]* \(.*\)/\1/'`
while [ "${features:0:3}" = "-e " ]; do
# skip "-e "
features=${features:3}
# parse feature
feature=`echo "$features" | sed 's/\([^[:space:]]*\).*/\1/'`
# enable feature if not already
sctl_feature=`echo "$sctl_features" | grep " ${feature} "`
if [ -z "$sctl_feature" ]; then
# enable feature
ENABLE_FEATURE $name $feature
fi
# next iteration, skip this feature
features=`echo "$features" | sed 's/[^[:space:]]* \(.*\)/\1/'`
done
done
# install all the new modules
if [ ! -z "${CMD_INSTALL}" ]; then
eval $CMD_INSTALL
rc=$?
if [ $rc -ne 0 ]; then
exit $rc
fi
fi