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 +