diff --git a/.gitignore b/.gitignore index b25c15b..1a782cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *~ +dist/ diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..7ea5dad --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,71 @@ +clone: + git: + image: woodpeckerci/plugin-git + tags: true + +pipeline: + test-pylint: + group: test + image: debian + commands: + - DEBIAN_FRONTEND=noninteractive apt-get -qq update < /dev/null > /dev/null + - DEBIAN_FRONTEND=noninteractive apt-get -qq -y install --no-install-recommends python3-ldap pylint3 < /dev/null > /dev/null + - pylint3 gitdch + + test-flake8: + group: test + image: pipelinecomponents/flake8 + commands: + - flake8 gitdch + + build: + image: brenard/debian-python-deb + when: + event: tag + commands: + - echo "$GPG_KEY"|base64 -d|gpg --import + - ./build.sh --quiet + secrets: [ maintainer_name, maintainer_email, gpg_key, debian_codename ] + + publish-dryrun: + group: publish + image: alpine + when: + event: tag + commands: + - ls dist/* dist/check-syncrepl-extended-*/check_syncrepl_extended + + publish-gitea: + group: publish + image: plugins/gitea-release + when: + event: tag + settings: + api_key: + from_secret: gitea_token + base_url: https://gitea.zionetrix.net + files: + - dist/check-syncrepl-extended-*/check_syncrepl_extended + - dist/*.deb + checksum: + - md5 + - sha512 + + publish-apt: + group: publish + image: brenard/curl + when: + event: tag + commands: + - curl -u $APT_CREDS -X POST -F file=@$( ls dist/check-syncrepl-extended_*_all.deb ) $APT_API_URL/files/gitdch + - curl -u $APT_CREDS -X POST -F file=@$( ls dist/check-syncrepl-extended_*.buildinfo ) $APT_API_URL/files/gitdch + - curl -u $APT_CREDS -X POST -F file=@$( ls dist/check-syncrepl-extended_*.changes ) $APT_API_URL/files/gitdch + - curl -u $APT_CREDS -X POST -F file=@$( ls dist/check-syncrepl-extended_*.dsc ) $APT_API_URL/files/gitdch + - curl -u $APT_CREDS -X POST -F file=@$( ls dist/check-syncrepl-extended_*.tar.gz ) $APT_API_URL/files/gitdch + - curl -u $APT_CREDS -X POST $APT_API_URL/repos/$APT_REPO_NAME/include/gitdch + - APT_SNAP_NAME=$(date +%s)_$APT_REPO_NAME + - > + curl -u $APT_CREDS -X POST -H 'Content-Type: application/json' --data "{\"Name\":\"$APT_SNAP_NAME\"}" $APT_API_URL/repos/$APT_REPO_NAME/snapshots + - > + curl -u $APT_CREDS -X PUT -H 'Content-Type: application/json' --data "{\"Snapshots\": [{\"Component\": \"main\", \"Name\": \"$APT_SNAP_NAME\"}]}" $APT_API_URL/publish/:./$APT_REPO_NAME + secrets: [ apt_api_url, apt_creds, apt_repo_name ] diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..74f8dc3 --- /dev/null +++ b/build.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +QUIET_ARG="" +[ "$1" == "--quiet" ] && QUIET_ARG="--quiet" + +# Enter source directory +cd $( dirname $0 ) + +echo "Clean previous build..." +rm -fr dist + +echo "Detect version using git describe..." +VERSION="$( git describe --tags|sed 's/^[^0-9]*//' )" + +echo "Create building environemt..." +BDIR=dist/check-syncrepl-extended-$VERSION +mkdir -p $BDIR +[ -z "$QUIET_ARG" ] && RSYNC_ARG="-v" || RSYNC_ARG="" +rsync -a $RSYNC_ARG debian/ $BDIR/debian/ +cp check_syncrepl_extended $BDIR/ + +echo "Set VERSION=$VERSION in gitdch using sed..." +sed -i "s/^VERSION *=.*$/VERSION = '$VERSION'/" $BDIR/check_syncrepl_extended + +if [ -z "$DEBIAN_CODENAME" ] +then + echo "Retreive debian codename using lsb_release..." + DEBIAN_CODENAME=$( lsb_release -c -s ) +else + echo "Use debian codename from environment ($DEBIAN_CODENAME)" +fi + +echo "Generate debian changelog using gitdch..." +GITDCH_ARGS=('--verbose') +[ -n "$QUIET_ARG" ] && GITDCH_ARGS=('--warning') +if [ -n "$MAINTAINER_NAME" ] +then + echo "Use maintainer name from environment ($MAINTAINER_NAME)" + GITDCH_ARGS+=("--maintainer-name" "${MAINTAINER_NAME}") +fi +if [ -n "$MAINTAINER_EMAIL" ] +then + echo "Use maintainer email from environment ($MAINTAINER_EMAIL)" + GITDCH_ARGS+=("--maintainer-email" "$MAINTAINER_EMAIL") +fi +gitdch \ + --package-name check-syncrepl-extended \ + --version "${VERSION}" \ + --code-name $DEBIAN_CODENAME \ + --output $BDIR/debian/changelog \ + "${GITDCH_ARGS[@]}" + +if [ -n "$MAINTAINER_NAME" -a -n "$MAINTAINER_EMAIL" ] +then + echo "Set Maintainer field in debian control file ($MAINTAINER_NAME <$MAINTAINER_EMAIL>)..." + sed -i "s/^Maintainer: .*$/Maintainer: $MAINTAINER_NAME <$MAINTAINER_EMAIL>/" $BDIR/debian/control +fi + +echo "Build debian package..." +cd $BDIR +dpkg-buildpackage diff --git a/check_syncrepl_extended b/check_syncrepl_extended index c9ef07a..d6361b4 100755 --- a/check_syncrepl_extended +++ b/check_syncrepl_extended @@ -45,6 +45,7 @@ from ldap import LDAPError # pylint: disable=no-name-in-module from ldap.controls import SimplePagedResultsControl from ldap import modlist +VERSION = '0.0' TOUCH_VALUE = '%%TOUCH%%' parser = argparse.ArgumentParser( @@ -52,8 +53,9 @@ parser = argparse.ArgumentParser( "Script to check LDAP syncrepl replication state between " "two servers."), epilog=( - "Author: Benjamin Renard , " - "Source: https://gogs.zionetrix.net/bn8/check_syncrepl_extended") + 'Author: Benjamin Renard , ' + f'Version: {VERSION}, ' + 'Source: https://gogs.zionetrix.net/bn8/check_syncrepl_extended') ) parser.add_argument( diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..b4de394 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +11 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..1948328 --- /dev/null +++ b/debian/control @@ -0,0 +1,30 @@ +Source: check-syncrepl-extended +Section: admin +Priority: optional +Maintainer: Debian Zionetrix - check-syncrepl-extended +Build-Depends: debhelper (>> 11.0.0) +Standards-Version: 3.9.6 + +Package: check-syncrepl-extended +Architecture: all +Depends: ${misc:Depends}, python3, python3-ldap +Description: Check LDAP syncrepl replication state between two servers + This script check LDAP syncrepl replication state between two servers. One + server is consider as provider and the other as consumer. + This script can check replication state with two method : + - by the fisrt, entryCSN of all entries of LDAP directory will be compare + between two servers + - by the second, all values of all atributes of all entries will be compare + between two servers. + In all case, contextCSN of servers will be compare and entries not present in + consumer or in provider will be notice. You can decide to disable contextCSN + verification by using argument --no-check-contextCSN. + This script is also able to "touch" LDAP object on provider to force + synchronisation of this object. This mechanism consist to add '%%TOUCH%%' + value to an attribute of this object and remove it just after. The touched + attribute is specify by parameter --touch. Of course, couple of DN and + password provided, must have write right on this attribute. + If your prefer, you can use --replace-touch parameter to replace value of + touched attribute instead of adding the touched value. Use-ful in case of + single-value attribute. + To use this script as an Icinga (or Nagios) plugin, use -n argument diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..20f99f7 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,20 @@ +This package was written by Benjamin Renard . + +Copyright (C) 2022 Benjamin Renard + +check-syncrepl-extended is licensed under the GNU general public license, version 3. + +check-syncrepl-extended is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2, or (at your option) any later version. + +check-syncrepl-extended is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +check-syncrepl-extended; see the file COPYING. If not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +On Debian systems, a copy of the GNU General Public License is available in +/usr/share/common-licenses/GPL-3 as part of the base-files package. diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..b073cdc --- /dev/null +++ b/debian/dirs @@ -0,0 +1 @@ +usr/lib/nagios/plugins diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..e24f25e --- /dev/null +++ b/debian/install @@ -0,0 +1 @@ +check_syncrepl_extended usr/lib/nagios/plugins diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..7451f59 --- /dev/null +++ b/debian/rules @@ -0,0 +1,4 @@ +#!/usr/bin/make -f +#export DH_VERBOSE=1 +%: + dh $@ diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..d3827e7 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +1.0