Start building sysrepo-ietf-alarms

The project also requires date library[1] but it was not running
correctly on our ARM. I had to patch the library with the workaround
from [2], hence the buildroot update.

[1] https://github.com/HowardHinnant/date
[2] https://github.com/HowardHinnant/date/issues/252

Change-Id: Ie82b8c9ea50b0198b024256ff81d67ba7344c190
diff --git a/.gitmodules b/.gitmodules
index 7a7d552..744946f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -19,3 +19,6 @@
 [submodule "submodules/rousette"]
 	path = submodules/rousette
 	url = ../rousette
+[submodule "submodules/sysrepo-ietf-alarms"]
+	path = submodules/sysrepo-ietf-alarms
+	url = ../sysrepo-ietf-alarms
diff --git a/.zuul.yaml b/.zuul.yaml
index da25c73..c33b12b 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -18,6 +18,7 @@
       - CzechLight/libyang-cpp
       - CzechLight/sysrepo-cpp
       - CzechLight/libnetconf2-cpp
+      - CzechLight/sysrepo-ietf-alarms
       - github/CESNET/libyang
       - github/sysrepo/sysrepo
       - github/CESNET/libnetconf2
diff --git a/ci/build.sh b/ci/build.sh
index 6d0be8a..35d3981 100755
--- a/ci/build.sh
+++ b/ci/build.sh
@@ -36,7 +36,7 @@
 echo BR2_PRIMARY_SITE=\"https://object-store.cloud.muni.cz/swift/v1/ci-artifacts-public/mirror/buildroot\" >> .config
 
 if [[ ${TRIGGERED_VIA_DEP} == 1 ]]; then
-    for PROJECT in cla-sysrepo netconf-cli gammarus velia rousette; do
+    for PROJECT in cla-sysrepo netconf-cli gammarus velia rousette sysrepo-ietf-alarms; do
         # If there's a change for ${PROJECT} queued ahead, ensure it gets used.
         # This means that if our submodules still pin, say, `cla-sysrepo` to some ancient version and we're testing a `netconf-cli` change,
         # then we will keep using that ancient `cla-sysrepo`. Hopefully this reduces the number of false alerts.
diff --git a/configs/czechlight_clearfog_defconfig b/configs/czechlight_clearfog_defconfig
index 7397582..654a5cc 100644
--- a/configs/czechlight_clearfog_defconfig
+++ b/configs/czechlight_clearfog_defconfig
@@ -117,3 +117,4 @@
 BR2_PACKAGE_VELIA=y
 BR2_PACKAGE_RESET_SYSREPO=y
 BR2_PACKAGE_ROUSETTE=y
+BR2_PACKAGE_SYSREPO_IETF_ALARMS=y
diff --git a/dev-setup-git.sh b/dev-setup-git.sh
index 580dbda..6792070 100755
--- a/dev-setup-git.sh
+++ b/dev-setup-git.sh
@@ -25,6 +25,7 @@
 GAMMARUS_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/gammarus
 VELIA_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/velia
 ROUSETTE_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/rousette
+SYSREPO_IETF_ALARMS_OVERRIDE_SRCDIR = ${CZECHLIGHT_BR2_EXT_LOC}/submodules/sysrepo-ietf-alarms
 
 define CZECHLIGHT_GIT_FIX_GITDIR
 	echo "gitdir: \$\$(git rev-parse --resolve-git-dir \$(SRCDIR)/.git)" > \$(@D)/.git
@@ -34,6 +35,7 @@
 GAMMARUS_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
 VELIA_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
 ROUSETTE_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
+SYSREPO_IETF_ALARMS_POST_RSYNC_HOOKS += CZECHLIGHT_GIT_FIX_GITDIR
 
 EOF
 
diff --git a/package/Config.in b/package/Config.in
index 0ef80ea..a494e28 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -8,3 +8,4 @@
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/grub2-tools/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/reset-sysrepo/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/rousette/Config.in"
+source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/sysrepo-ietf-alarms/Config.in"
diff --git a/package/czechlight-cfg-fs/czechlight-install-yang.sh b/package/czechlight-cfg-fs/czechlight-install-yang.sh
index 9c072d4..edfd6b1 100755
--- a/package/czechlight-cfg-fs/czechlight-install-yang.sh
+++ b/package/czechlight-cfg-fs/czechlight-install-yang.sh
@@ -9,6 +9,7 @@
 
 CLA_YANG="${CLA_YANG:-/usr/share/cla-sysrepo/yang}"
 VELIA_YANG="${VELIA_YANG:-/usr/share/velia/yang}"
+ALARMS_YANG="${ALARMS_YANG:-/usr/share/sysrepo-ietf-alarms/yang}"
 PROC_CMDLINE="${PROC_CMDLINE:-/proc/cmdline}"
 
 for ARG in $(cat "$PROC_CMDLINE"); do
@@ -73,6 +74,9 @@
     sysrepoctl --search-dirs ${CLA_YANG} --install ${CLA_YANG}/czechlight-calibration-device@2019-06-25.yang --permissions 0660
 fi
 
+sysrepoctl --search-dirs ${ALARMS_YANG} --install ${ALARMS_YANG}/ietf-alarms@2019-09-11.yang --permissions 0660 --enable-feature alarm-shelving --enable-feature alarm-summary
+sysrepoctl --search-dirs ${ALARMS_YANG} --install ${ALARMS_YANG}/sysrepo-ietf-alarms@2022-02-17.yang --permissions 0660
+
 sysrepoctl --search-dirs ${VELIA_YANG} --install ${VELIA_YANG}/ietf-system@2014-08-06.yang --permissions 0660
 
 sysrepoctl --search-dirs ${VELIA_YANG} --install ${VELIA_YANG}/czechlight-lldp@2020-11-04.yang --permissions 0660
diff --git a/package/czechlight-cfg-fs/czechlight-migrate.sh b/package/czechlight-cfg-fs/czechlight-migrate.sh
index bb95783..2046010 100755
--- a/package/czechlight-cfg-fs/czechlight-migrate.sh
+++ b/package/czechlight-cfg-fs/czechlight-migrate.sh
@@ -11,6 +11,7 @@
 
 export CLA_YANG="${CLA_YANG:-/usr/share/cla-sysrepo/yang}"
 export VELIA_YANG="${VELIA_YANG:-/usr/share/velia/yang}"
+export ALARMS_YANG="${ALARMS_YANG:-/usr/share/sysrepo-ietf-alarms/yang}"
 
 # load migrations and perform a sanity check (filename's numerical prefix corresponds to the order in the MIGRATIONS array)
 source $MIGRATIONS
diff --git a/package/sysrepo-ietf-alarms/Config.in b/package/sysrepo-ietf-alarms/Config.in
new file mode 100644
index 0000000..0d87925
--- /dev/null
+++ b/package/sysrepo-ietf-alarms/Config.in
@@ -0,0 +1,12 @@
+config BR2_PACKAGE_SYSREPO_IETF_ALARMS
+	bool "velia"
+	select BR2_PACKAGE_DOCOPT_CPP
+	select BR2_PACKAGE_SPDLOG
+	select BR2_PACKAGE_SYSREPO
+	select BR2_PACKAGE_SYSREPO_CPP
+	select BR2_PACKAGE_CZECHLIGHT_CFG_FS
+	select BR2_PACKAGE_DATE
+	help
+	  Implementing the `ietf-alarms` YANG module for sysrepo.
+
+	  https://gerrit.cesnet.cz/q/project:CzechLight/sysrepo-ietf-alarms
diff --git a/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.hash b/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.hash
new file mode 100644
index 0000000..075e53a
--- /dev/null
+++ b/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.hash
@@ -0,0 +1 @@
+none xxx
diff --git a/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.mk b/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.mk
new file mode 100644
index 0000000..dab9957
--- /dev/null
+++ b/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.mk
@@ -0,0 +1,17 @@
+SYSREPO_IETF_ALARMS_VERSION = master
+SYSREPO_IETF_ALARMS_SITE = https://gerrit.cesnet.cz/CzechLight/sysrepo-ietf-alarms
+SYSREPO_IETF_ALARMS_SITE_METHOD = git
+SYSREPO_IETF_ALARMS_INSTALL_STAGING = NO
+SYSREPO_IETF_ALARMS_DEPENDENCIES = docopt-cpp spdlog date sysrepo sysrepo-cpp
+SYSREPO_IETF_ALARMS_LICENSE = Apache-2.0
+SYSREPO_IETF_ALARMS_LICENSE_FILES = LICENSE.md
+
+define SYSREPO_IETF_ALARMS_INSTALL_INIT_SYSTEMD
+	mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+	$(INSTALL) -D -m 0644 \
+		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.service \
+		$(TARGET_DIR)/usr/lib/systemd/system/
+	ln -sf ../sysrepo-ietf-alarms.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+endef
+
+$(eval $(cmake-package))
diff --git a/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.service b/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.service
new file mode 100644
index 0000000..0bb5884
--- /dev/null
+++ b/package/sysrepo-ietf-alarms/sysrepo-ietf-alarms.service
@@ -0,0 +1,25 @@
+[Unit]
+Description=IETF-alarms management via sysrepo
+After=syslog.target network.target cfg-restore-sysrepo.service czechlight-migrate.service nacm-restore.service
+Before=rauc-mark-good.service
+PartOf=netopeer2.service
+Requires=cfg-restore-sysrepo.service czechlight-migrate.service nacm-restore.service
+ConditionKernelCommandLine=czechlight
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/sysrepo-ietf-alarmsd
+Group=sysrepo
+PrivateTmp=yes
+PrivateDevices=no
+ProtectSystem=yes
+ProtectHome=yes
+Restart=always
+RestartSec=10s
+LogRateLimitIntervalSec=10
+LogRateLimitBurst=30000
+SyslogLevel=alert
+
+[Install]
+WantedBy=multi-user.target
+RequiredBy=velia-health.service
diff --git a/submodules/buildroot b/submodules/buildroot
index c189d19..8be83c1 160000
--- a/submodules/buildroot
+++ b/submodules/buildroot
@@ -1 +1 @@
-Subproject commit c189d19d56af5dca0a387ae78a40dc14698ef469
+Subproject commit 8be83c1c817c47e0a9c2192e2926a0a75fff1317
diff --git a/submodules/sysrepo-ietf-alarms b/submodules/sysrepo-ietf-alarms
new file mode 160000
index 0000000..2b99fa9
--- /dev/null
+++ b/submodules/sysrepo-ietf-alarms
@@ -0,0 +1 @@
+Subproject commit 2b99fa9e1762d3cda63f3b9e47be127ee7c93147
diff --git a/tests/czechlight-cfg-fs/migrations.py b/tests/czechlight-cfg-fs/migrations.py
index 87f4b4a..d243d06 100644
--- a/tests/czechlight-cfg-fs/migrations.py
+++ b/tests/czechlight-cfg-fs/migrations.py
@@ -21,6 +21,7 @@
 
 CLA_SYSREPO_PATH = BR2_ROOT / 'submodules/cla-sysrepo'
 VELIA_PATH = BR2_ROOT / 'submodules/velia'
+ALARMS_PATH = BR2_ROOT / 'submodules/sysrepo-ietf-alarms'
 NETOPEER2_PATH = BR2_ROOT / 'submodules/dependencies/Netopeer2'
 
 
@@ -68,6 +69,7 @@
         res['SYSREPO_REPOSITORY_PATH'] = self._running_directory / 'sysrepo_repository'
         res['CLA_YANG'] = CLA_SYSREPO_PATH / 'yang'
         res['VELIA_YANG'] = VELIA_PATH / 'yang'
+        res['ALARMS_YANG'] = ALARMS_PATH / 'yang'
         res['PROC_CMDLINE'] = self.proc_cmdline
         res['CFG_VERSION_FILE'] = self.version_file
         res['CFG_STARTUP_FILE'] = self.startup_file