From 4a325af4e441acb0180f61ffa8d2d76e9142e6a2 Mon Sep 17 00:00:00 2001 From: Ahmed Karic Date: Fri, 23 Aug 2024 11:11:04 +0200 Subject: [PATCH] confd: generate test-config.cfg Currently, it's not possible to run infix tests from an external project (based on infix) due to an incompatibility between the configuration used in the tests (the default configuration within the image generated by the external project) and the infix base configuration expected by the test cases. Therefore, a simple configuration specifically for testing purposes needs to be generated within an image. This test-config should always be generated but only loaded when the device is in test mode. Part of issue #568 --- package/confd/tmpfiles.conf | 1 + src/confd/bin/.confdrc | 5 ++++ src/confd/bin/bootstrap | 26 +++++++++++++++---- src/confd/confdrc | 5 ++++ src/confd/configure.ac | 1 + src/confd/share/Makefile.am | 2 +- src/confd/share/README | 2 +- src/confd/share/test.d/10-infix-services.json | 11 ++++++++ src/confd/share/test.d/10-nacm.json | 1 + src/confd/share/test.d/10-netconf-server.json | 1 + src/confd/share/test.d/10-system.json | 14 ++++++++++ src/confd/share/test.d/Makefile.am | 4 +++ 12 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 src/confd/share/test.d/10-infix-services.json create mode 120000 src/confd/share/test.d/10-nacm.json create mode 120000 src/confd/share/test.d/10-netconf-server.json create mode 100644 src/confd/share/test.d/10-system.json create mode 100644 src/confd/share/test.d/Makefile.am diff --git a/package/confd/tmpfiles.conf b/package/confd/tmpfiles.conf index ef326eba..bd912740 100644 --- a/package/confd/tmpfiles.conf +++ b/package/confd/tmpfiles.conf @@ -1,3 +1,4 @@ d /run/confd/factory.d - - - d /run/confd/failure.d - - - +d /run/confd/test.d - - - d /run/resolvconf/interfaces - - - diff --git a/src/confd/bin/.confdrc b/src/confd/bin/.confdrc index 641f8b7f..5f269c13 100644 --- a/src/confd/bin/.confdrc +++ b/src/confd/bin/.confdrc @@ -12,15 +12,19 @@ RUN_PATH_=/tmp/confd/run FACTORY_DEFAULTS_D=../share/factory.d FAILURE_DEFAULTS_D=../share/failure.d +TEST_DEFAULTS_D=../share/test.d FACTORY_D=$RUN_PATH_/factory.d FAILURE_D=$RUN_PATH_/failure.d +TEST_D=$RUN_PATH_/test.d FACTORY_GEN=$RUN_PATH_/factory-config.gen FAILURE_GEN=$RUN_PATH_/failure-config.gen +TEST_GEN=$RUN_PATH_/test-config.gen FACTORY_CFG=$RUN_PATH_/factory-config.cfg FAILURE_CFG=$RUN_PATH_/failure-config.cfg +TEST_CFG=$RUN_PATH_/test-config.cfg STARTUP_CFG=$CFG_PATH_/startup-config.cfg # Uncomment this line in to create a bridge (br0) with all (classified @@ -32,6 +36,7 @@ STARTUP_CFG=$CFG_PATH_/startup-config.cfg # Default hostname in Fail Secure mode, plus last three octets in the base # MAC address, e.g. "failed-c0-ff-ee". FAIL_HOSTNAME="failed" +TEST_HOSTNAME="test" # Only needed for testing mkdir -p "$CFG_PATH_" "$RUN_PATH_" "$FACTORY_D" "$FAILURE_D" diff --git a/src/confd/bin/bootstrap b/src/confd/bin/bootstrap index 7ab39d04..1ae91f89 100755 --- a/src/confd/bin/bootstrap +++ b/src/confd/bin/bootstrap @@ -1,11 +1,11 @@ #!/bin/sh -# Bootstrap system factory-config, failure-config and sysrepo db. +# Bootstrap system factory-config, failure-config, test-config and sysrepo db. # ######################################################################## -# The system factory-config and failure-config are derived from default -# settings snippets, from /usr/share/confd/factory.d, and some generated -# snippets, e.g., hostname (based on base MAC address) and number of -# interfaces. +# The system factory-config, failure-config and test-config are derived +# from default settings snippets, from /usr/share/confd/factory.d, and +# some generated snippets, e.g., hostname (based on base MAC address) +# and number of interfaces. # # The resulting factory-config is used to create the syrepo db (below) # {factory} datastore. Hence, the factory-config file must match the @@ -127,11 +127,27 @@ failure() collate "$FAILURE_GEN" "$FAILURE_CFG" "$FAILURE_D" } +gen_test_cfg() +{ + # Fetch defaults, simplifies sort in collate() + cp "$TEST_DEFAULTS_D"/* "$TEST_D" + + gen-hostname "$TEST_HOSTNAME" >"$TEST_D/20-hostname.json" + gen-interfaces >"$TEST_D/20-interfaces.json" + gen-version >"$TEST_D/20-version.json" + + collate "$TEST_GEN" "$TEST_CFG" "$TEST_D" +} + # Both factory-config and failure-config are generated every boot # regardless if there is a static /etc/factory-config.cfg or not. factory "$FACTORY_GEN" failure "$FAILURE_GEN" +if [ -f "/mnt/aux/test-mode" ]; then + gen_test_cfg +fi + if [ -n "$TESTING" ]; then echo "Done." exit 0 diff --git a/src/confd/confdrc b/src/confd/confdrc index 12331bb9..41611a80 100644 --- a/src/confd/confdrc +++ b/src/confd/confdrc @@ -12,19 +12,23 @@ RUN_PATH_=/run/confd # Static defaults, base Infix and any br2-external derivative. FACTORY_DEFAULTS_D=/usr/share/confd/factory.d FAILURE_DEFAULTS_D=/usr/share/confd/failure.d +TEST_DEFAULTS_D=/usr/share/confd/test.d # Generated config snippets, e.g., hostname, password, and interfaces. FACTORY_D=$RUN_PATH_/factory.d FAILURE_D=$RUN_PATH_/failure.d +TEST_D=$RUN_PATH_/test.d # The default config snippets and generated snippets are collated into # RAM-only name-config.gen , which are candidates for name-config.cfg FACTORY_GEN=$RUN_PATH_/factory-config.gen FAILURE_GEN=$RUN_PATH_/failure-config.gen +TEST_GEN=$RUN_PATH_/test-config.gen # The resulting .cfg files can be peristent (factory-config) or not. FACTORY_CFG=$SYS_PATH_/factory-config.cfg FAILURE_CFG=$SYS_PATH_/failure-config.cfg +TEST_CFG=$SYS_PATH_/test-config.cfg STARTUP_CFG=$CFG_PATH_/startup-config.cfg # Uncomment this line in to create a bridge (br0) with all (classified @@ -36,6 +40,7 @@ STARTUP_CFG=$CFG_PATH_/startup-config.cfg # Default hostname in Fail Secure mode, plus last three octets in the base # MAC address, e.g. "failed-c0-ff-ee". FAIL_HOSTNAME="failed" +TEST_HOSTNAME="test" # Optional overrides by br2-external if [ -f /etc/confdrc.local ]; then diff --git a/src/confd/configure.ac b/src/confd/configure.ac index 366a0f58..51c56c38 100644 --- a/src/confd/configure.ac +++ b/src/confd/configure.ac @@ -11,6 +11,7 @@ AC_CONFIG_FILES([ share/Makefile share/factory.d/Makefile share/failure.d/Makefile + share/test.d/Makefile share/migrate/Makefile share/migrate/1.0/Makefile src/Makefile diff --git a/src/confd/share/Makefile.am b/src/confd/share/Makefile.am index 703415d6..0fa1bd95 100644 --- a/src/confd/share/Makefile.am +++ b/src/confd/share/Makefile.am @@ -1,2 +1,2 @@ -SUBDIRS = factory.d failure.d migrate +SUBDIRS = factory.d failure.d test.d migrate dist_pkgdata_DATA = README diff --git a/src/confd/share/README b/src/confd/share/README index c95b7e26..9878e187 100644 --- a/src/confd/share/README +++ b/src/confd/share/README @@ -1 +1 @@ -Templates for generating device-specific factory-config and failure-config. +Templates for generating device-specific factory-config, failure-config and test-config. diff --git a/src/confd/share/test.d/10-infix-services.json b/src/confd/share/test.d/10-infix-services.json new file mode 100644 index 00000000..37214924 --- /dev/null +++ b/src/confd/share/test.d/10-infix-services.json @@ -0,0 +1,11 @@ +{ + "infix-services:mdns": { + "enabled": true + }, + "infix-services:web": { + "enabled": true, + "restconf": { + "enabled": true + } + } +} diff --git a/src/confd/share/test.d/10-nacm.json b/src/confd/share/test.d/10-nacm.json new file mode 120000 index 00000000..e5cc66f1 --- /dev/null +++ b/src/confd/share/test.d/10-nacm.json @@ -0,0 +1 @@ +../factory.d/10-nacm.json \ No newline at end of file diff --git a/src/confd/share/test.d/10-netconf-server.json b/src/confd/share/test.d/10-netconf-server.json new file mode 120000 index 00000000..4253be80 --- /dev/null +++ b/src/confd/share/test.d/10-netconf-server.json @@ -0,0 +1 @@ +../factory.d/10-netconf-server.json \ No newline at end of file diff --git a/src/confd/share/test.d/10-system.json b/src/confd/share/test.d/10-system.json new file mode 100644 index 00000000..0ced8885 --- /dev/null +++ b/src/confd/share/test.d/10-system.json @@ -0,0 +1,14 @@ +{ + "ietf-system:system": { + "hostname": "test", + "authentication": { + "user": [ + { + "name": "admin", + "password": "$factory$", + "infix-system:shell": "bash" + } + ] + } + } +} diff --git a/src/confd/share/test.d/Makefile.am b/src/confd/share/test.d/Makefile.am new file mode 100644 index 00000000..d097a961 --- /dev/null +++ b/src/confd/share/test.d/Makefile.am @@ -0,0 +1,4 @@ +testdir = $(pkgdatadir)/test.d +dist_test_DATA = 10-nacm.json \ + 10-netconf-server.json 10-system.json +