mirror of
https://github.com/mag37/dockcheck.git
synced 2026-04-18 02:17:46 +00:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
331d2cc5a7 | ||
|
|
35f460ed61 | ||
|
|
aab63901d0 | ||
|
|
5e53fabbf6 | ||
|
|
8b3926fd5d | ||
|
|
049413cf5a | ||
|
|
b1b7f048a3 | ||
|
|
361e98c378 | ||
|
|
d1ad0c68f6 | ||
|
|
76697bc281 | ||
|
|
86649fb0fe | ||
|
|
80f7dd9b82 | ||
|
|
959f636152 | ||
|
|
d1bf9256fa | ||
|
|
5513e13109 | ||
|
|
f0b2f7eab7 | ||
|
|
44a90d5e62 | ||
|
|
c63643dde8 | ||
|
|
b2767864ab | ||
|
|
c09e813aad | ||
|
|
0b52dd50b6 | ||
|
|
b86df76fb6 | ||
|
|
b8450aa774 |
47
README.md
47
README.md
@@ -2,7 +2,6 @@
|
|||||||
<img src="extras/dockcheck_logo_by_booYah187.png" width="160" title="dockcheck">
|
<img src="extras/dockcheck_logo_by_booYah187.png" width="160" title="dockcheck">
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://img.shields.io/badge/coded%20by%20Human-100%25-yellow?style=flat-square" alt="No AI!">
|
|
||||||
<img src="https://img.shields.io/badge/bash-4.3-green?style=flat-square&logo=gnubash" alt="bash">
|
<img src="https://img.shields.io/badge/bash-4.3-green?style=flat-square&logo=gnubash" alt="bash">
|
||||||
<a href="https://www.gnu.org/licenses/gpl-3.0.html"><img src="https://img.shields.io/badge/license-GPLv3-red?style=flat-square" alt="GPLv3"></a>
|
<a href="https://www.gnu.org/licenses/gpl-3.0.html"><img src="https://img.shields.io/badge/license-GPLv3-red?style=flat-square" alt="GPLv3"></a>
|
||||||
<img src="https://img.shields.io/github/v/tag/mag37/dockcheck?style=flat-square&label=release" alt="release">
|
<img src="https://img.shields.io/github/v/tag/mag37/dockcheck?style=flat-square&label=release" alt="release">
|
||||||
@@ -11,29 +10,20 @@
|
|||||||
<a href="https://github.com/sponsors/mag37"><img src="https://img.shields.io/badge/-Sponsor-grey?style=flat-square&logo=github" alt="Github Sponsor"></a>
|
<a href="https://github.com/sponsors/mag37"><img src="https://img.shields.io/badge/-Sponsor-grey?style=flat-square&logo=github" alt="Github Sponsor"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 align="center">A script checking updates for docker images <b>without pulling</b><br>Then selectively auto-update containers.</h3>
|
<h3 align="center">CLI tool to automate docker image updates. <br>No <b>pre-pull</b>, selective, optional notifications and prune when done.</h3>
|
||||||
<h2 align="center">Now with a simple Apprise integration!</h2>
|
<h2 align="center">Now with simple notification integrations!</h2>
|
||||||
<h4 align="center">With features like excluding specific containers, filter by name, auto-prune dangling images and more.</h4>
|
<h4 align="center">With features like excluding specific containers, custom container labels, auto-prune when done and more.</h4>
|
||||||
|
|
||||||
___
|
___
|
||||||
## :bell: Changelog
|
## :bell: Changelog
|
||||||
|
|
||||||
|
- **v0.4.2**: Added timeout option to skip container if registry check takes too long (10s default).
|
||||||
|
- **v0.4.1**: Syntax and logic cleanups, bugfixes on multi compose and env-files.
|
||||||
- **v0.4.0**: Reworked selfupdate (auto git/curl/wget), general syntax cleanup, added -v for version.
|
- **v0.4.0**: Reworked selfupdate (auto git/curl/wget), general syntax cleanup, added -v for version.
|
||||||
- **v0.3.8**: Fixed `--env-file` logic to work with multiple env-files.
|
- **v0.3.8**: Fixed `--env-file` logic to work with multiple env-files.
|
||||||
- **v0.3.7**: Added support for [labels](#bookmark-labels), added the `-f` option (force restart stack).
|
- **v0.3.7**: Added support for [labels](#bookmark-labels), added the `-f` option (force restart stack).
|
||||||
- **v0.3.6**: Added pushbullet template.
|
- **v0.3.6**: Added pushbullet template.
|
||||||
- **v0.3.5**: Added a simple progress bar for the registry checkup.
|
- **v0.3.5**: Added a simple progress bar for the registry checkup.
|
||||||
- **v0.3.4**: Added ntfy.sh template and error message on registry fail.
|
|
||||||
- **v0.3.3**: Added Apprise template and the option `-i` inform - to send notifications.
|
|
||||||
- **v0.3.2**: Added a notify function to wrap a notify-script, currently DSM/Ssmtp + template script.
|
|
||||||
|
|
||||||
___
|
|
||||||
|
|
||||||
## :nut_and_bolt: Dependencies
|
|
||||||
- Running docker (duh) and compose, either standalone or plugin.
|
|
||||||
- [regclient/regctl](https://github.com/regclient/regclient) (Licensed under [Apache-2.0 License](http://www.apache.org/licenses/LICENSE-2.0))
|
|
||||||
- User will be prompted to download `regctl` if not in `PATH` or `PWD`.
|
|
||||||
- regctl requires `amd64/arm64` - see [workaround](#roller_coaster-workaround-for-non-amd64--arm64) if other architecture is used.
|
|
||||||
___
|
___
|
||||||
|
|
||||||
|
|
||||||
@@ -58,6 +48,7 @@ Options:"
|
|||||||
-p Auto-Prune dangling images after update.
|
-p Auto-Prune dangling images after update.
|
||||||
-r Allow updating images for docker run, wont update the container.
|
-r Allow updating images for docker run, wont update the container.
|
||||||
-s Include stopped containers in the check. (Logic: docker ps -a).
|
-s Include stopped containers in the check. (Logic: docker ps -a).
|
||||||
|
-t Set a timeout (in seconds) per container for registry checkups, 10 is default.
|
||||||
-v Prints current version.
|
-v Prints current version.
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -81,6 +72,28 @@ Enter number(s) separated by comma, [a] for all - [q] to quit:
|
|||||||
Then it proceedes to run `pull` and `up -d` on every container with updates.
|
Then it proceedes to run `pull` and `up -d` on every container with updates.
|
||||||
After the updates are complete, you'll get prompted if you'd like to prune dangling images.
|
After the updates are complete, you'll get prompted if you'd like to prune dangling images.
|
||||||
|
|
||||||
|
___
|
||||||
|
|
||||||
|
## :nut_and_bolt: Dependencies
|
||||||
|
- Running docker (duh) and compose, either standalone or plugin.
|
||||||
|
- [regclient/regctl](https://github.com/regclient/regclient) (Licensed under [Apache-2.0 License](http://www.apache.org/licenses/LICENSE-2.0))
|
||||||
|
- User will be prompted to download `regctl` if not in `PATH` or `PWD`.
|
||||||
|
- regctl requires `amd64/arm64` - see [workaround](#roller_coaster-workaround-for-non-amd64--arm64) if other architecture is used.
|
||||||
|
|
||||||
|
## :tent: Install Instructions
|
||||||
|
Download the script to a directory in **PATH**, I'd suggest using `~/.local/bin` as that's usually in **PATH**.
|
||||||
|
```sh
|
||||||
|
# basic example with curl:
|
||||||
|
curl -L https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh -o ~/.local/bin/dockcheck.sh
|
||||||
|
chmod +x ~/.local/bin/dockcheck.sh
|
||||||
|
|
||||||
|
# or oneliner with wget:
|
||||||
|
wget -O ~/.local/bin/dockcheck.sh "https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh" && chmod +x ~/.local/bin/dockcheck.sh
|
||||||
|
```
|
||||||
|
Then call the script anywhere with just `dockcheck.sh`.
|
||||||
|
Add preferred `notify.sh`-template to the same directory - this will not be touched by the scripts self-update function.
|
||||||
|
|
||||||
|
|
||||||
## :loudspeaker: Notifications
|
## :loudspeaker: Notifications
|
||||||
Trigger with the `-i` flag.
|
Trigger with the `-i` flag.
|
||||||
Run it scheduled with `-ni` to only get notified when there's updates available!
|
Run it scheduled with `-ni` to only get notified when there's updates available!
|
||||||
@@ -94,6 +107,8 @@ Current templates:
|
|||||||
- Read the [QuickStart](extras/apprise_quickstart.md)
|
- Read the [QuickStart](extras/apprise_quickstart.md)
|
||||||
- [ntfy.sh](https://ntfy.sh/) - HTTP-based pub-sub notifications.
|
- [ntfy.sh](https://ntfy.sh/) - HTTP-based pub-sub notifications.
|
||||||
- [Pushbullet](https://www.pushbullet.com/) - connecting different devices with cross-platform features.
|
- [Pushbullet](https://www.pushbullet.com/) - connecting different devices with cross-platform features.
|
||||||
|
- [Telegram](https://telegram.org/) - Telegram chat API.
|
||||||
|
- [Matrix-Synapse](https://github.com/element-hq/synapse) - [Matrix](https://matrix.org/), open, secure, decentralised communication.
|
||||||
|
|
||||||
Further additions are welcome - suggestions or PR!
|
Further additions are welcome - suggestions or PR!
|
||||||
<sub><sup>Initiated and first contributed by [yoyoma2](https://github.com/yoyoma2).</sup></sub>
|
<sub><sup>Initiated and first contributed by [yoyoma2](https://github.com/yoyoma2).</sup></sub>
|
||||||
@@ -128,7 +143,7 @@ chmod 755 regctl
|
|||||||
```
|
```
|
||||||
Test it with `./regctl --help` and then either add the file to the same path as *dockcheck.sh* or in your path (eg. `~/.local/bin/regctl`).
|
Test it with `./regctl --help` and then either add the file to the same path as *dockcheck.sh* or in your path (eg. `~/.local/bin/regctl`).
|
||||||
|
|
||||||
## :open_hands: Function to auth with docker hub before running
|
## :guardsman: Function to auth with docker hub before running
|
||||||
**Example** - Change names, paths, and remove cat+password flag if you rather get prompted:
|
**Example** - Change names, paths, and remove cat+password flag if you rather get prompted:
|
||||||
```sh
|
```sh
|
||||||
function dchk {
|
function dchk {
|
||||||
|
|||||||
58
dockcheck.sh
58
dockcheck.sh
@@ -1,13 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
VERSION="v0.4.0"
|
VERSION="v0.4.2"
|
||||||
### ChangeNotes: Reworked selfupdate (auto git/curl/wget), cleanups, -v for version.
|
### ChangeNotes: Added timeout option to skip container if registry check takes too long (10s default).
|
||||||
Github="https://github.com/mag37/dockcheck"
|
Github="https://github.com/mag37/dockcheck"
|
||||||
RawUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh"
|
RawUrl="https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh"
|
||||||
|
|
||||||
### Variables for self updating
|
### Variables for self updating
|
||||||
ScriptArgs=( "$@" )
|
ScriptArgs=( "$@" )
|
||||||
ScriptPath="$(readlink -f "$0")"
|
ScriptPath="$(readlink -f "$0")"
|
||||||
ScriptName="$(basename "$ScriptPath")"
|
|
||||||
ScriptWorkDir="$(dirname "$ScriptPath")"
|
ScriptWorkDir="$(dirname "$ScriptPath")"
|
||||||
|
|
||||||
### Check if there's a new release of the script:
|
### Check if there's a new release of the script:
|
||||||
@@ -33,6 +32,7 @@ Help() {
|
|||||||
echo "-p Auto-Prune dangling images after update."
|
echo "-p Auto-Prune dangling images after update."
|
||||||
echo "-r Allow updating images for docker run, wont update the container."
|
echo "-r Allow updating images for docker run, wont update the container."
|
||||||
echo "-s Include stopped containers in the check. (Logic: docker ps -a)."
|
echo "-s Include stopped containers in the check. (Logic: docker ps -a)."
|
||||||
|
echo "-t Set a timeout (in seconds) per container for registry checkups, 10 is default."
|
||||||
echo "-v Prints current version."
|
echo "-v Prints current version."
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ c_teal="\033[0;36m"
|
|||||||
c_reset="\033[0m"
|
c_reset="\033[0m"
|
||||||
|
|
||||||
Stopped=""
|
Stopped=""
|
||||||
while getopts "aynpfrhlisvme:d:" options; do
|
while getopts "aynpfrhlisvme:d:t:" options; do
|
||||||
case "${options}" in
|
case "${options}" in
|
||||||
a|y) AutoUp="yes" ;;
|
a|y) AutoUp="yes" ;;
|
||||||
n) AutoUp="no" ;;
|
n) AutoUp="no" ;;
|
||||||
@@ -57,6 +57,7 @@ while getopts "aynpfrhlisvme:d:" options; do
|
|||||||
e) Exclude=${OPTARG} ;;
|
e) Exclude=${OPTARG} ;;
|
||||||
m) declare c_{red,green,yellow,blue,teal,reset}="" ;;
|
m) declare c_{red,green,yellow,blue,teal,reset}="" ;;
|
||||||
s) Stopped="-a" ;;
|
s) Stopped="-a" ;;
|
||||||
|
t) Timeout="${OPTARG:-10}" ;;
|
||||||
v) printf "%s\n" "$VERSION" ; exit 0 ;;
|
v) printf "%s\n" "$VERSION" ; exit 0 ;;
|
||||||
d) DaysOld=${OPTARG}
|
d) DaysOld=${OPTARG}
|
||||||
if ! [[ $DaysOld =~ ^[0-9]+$ ]] ; then { printf "Days -d argument given (%s) is not a number.\n" "${DaysOld}" ; exit 2 ; } ; fi ;;
|
if ! [[ $DaysOld =~ ^[0-9]+$ ]] ; then { printf "Days -d argument given (%s) is not a number.\n" "${DaysOld}" ; exit 2 ; } ; fi ;;
|
||||||
@@ -78,13 +79,13 @@ self_update_curl() {
|
|||||||
exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments
|
exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments
|
||||||
exit 1 # exit the old instance
|
exit 1 # exit the old instance
|
||||||
else
|
else
|
||||||
printf "curl/wget not available - download the update manually: %s \n" "$RawUrl"
|
printf "curl/wget not available - download the update manually: %s \n" "$Github"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
self_update() {
|
self_update() {
|
||||||
cd "$ScriptWorkDir" || { printf "Path error, skipping update.\n" ; return ; }
|
cd "$ScriptWorkDir" || { printf "Path error, skipping update.\n" ; return ; }
|
||||||
if [[ $(builtin type -P git) ]] && [[ "$(git ls-remote --get-url)" =~ .*"mag37/dockcheck".* ]] ; then
|
if [[ $(builtin type -P git) ]] && [[ "$(git ls-remote --get-url 2>/dev/null)" =~ .*"mag37/dockcheck".* ]] ; then
|
||||||
printf "\n%s\n" "Pulling the latest version."
|
printf "\n%s\n" "Pulling the latest version."
|
||||||
git pull --force || { printf "Git error, manually pull/clone.\n" ; return ; }
|
git pull --force || { printf "Git error, manually pull/clone.\n" ; return ; }
|
||||||
printf "\n%s\n" "--- starting over with the updated version ---"
|
printf "\n%s\n" "--- starting over with the updated version ---"
|
||||||
@@ -224,7 +225,7 @@ for i in $(docker ps $Stopped --filter "name=$SearchName" --format '{{.Names}}')
|
|||||||
RepoUrl=$(docker inspect "$i" --format='{{.Config.Image}}')
|
RepoUrl=$(docker inspect "$i" --format='{{.Config.Image}}')
|
||||||
LocalHash=$(docker image inspect "$RepoUrl" --format '{{.RepoDigests}}')
|
LocalHash=$(docker image inspect "$RepoUrl" --format '{{.RepoDigests}}')
|
||||||
### Checking for errors while setting the variable:
|
### Checking for errors while setting the variable:
|
||||||
if RegHash=$($regbin image digest --list "$RepoUrl" 2>&1) ; then
|
if RegHash=$(timeout ${Timeout} $regbin image digest --list "$RepoUrl" 2>&1) ; then
|
||||||
if [[ "$LocalHash" = *"$RegHash"* ]] ; then
|
if [[ "$LocalHash" = *"$RegHash"* ]] ; then
|
||||||
NoUpdates+=("$i")
|
NoUpdates+=("$i")
|
||||||
else
|
else
|
||||||
@@ -241,11 +242,10 @@ for i in $(docker ps $Stopped --filter "name=$SearchName" --format '{{.Names}}')
|
|||||||
done
|
done
|
||||||
|
|
||||||
### Sort arrays alphabetically
|
### Sort arrays alphabetically
|
||||||
IFS=$'\n'
|
readarray -td '' NoUpdates < <(printf '%s\0' "${NoUpdates[@]}" | sort -z -n)
|
||||||
NoUpdates=($(sort <<<"${NoUpdates[*]}"))
|
readarray -td '' GotUpdates < <(printf '%s\0' "${GotUpdates[@]}" | sort -z -n)
|
||||||
GotUpdates=($(sort <<<"${GotUpdates[*]}"))
|
readarray -td '' GotErrors < <(printf '%s\0' "${GotErrors[@]}" | sort -z -n)
|
||||||
GotErrors=($(sort <<<"${GotErrors[*]}"))
|
|
||||||
unset IFS
|
|
||||||
### Define how many updates are available
|
### Define how many updates are available
|
||||||
UpdCount="${#GotUpdates[@]}"
|
UpdCount="${#GotUpdates[@]}"
|
||||||
|
|
||||||
@@ -257,7 +257,7 @@ fi
|
|||||||
if [[ -n ${GotErrors[*]} ]] ; then
|
if [[ -n ${GotErrors[*]} ]] ; then
|
||||||
printf "\n%bContainers with errors, wont get updated:%b\n" "$c_red" "$c_reset"
|
printf "\n%bContainers with errors, wont get updated:%b\n" "$c_red" "$c_reset"
|
||||||
printf "%s\n" "${GotErrors[@]}"
|
printf "%s\n" "${GotErrors[@]}"
|
||||||
printf "%binfo:%b 'unauthorized' often means not found in a public registry.%b\n" "$c_blue" "$c_reset"
|
printf "%binfo:%b 'unauthorized' often means not found in a public registry.\n" "$c_blue" "$c_reset"
|
||||||
fi
|
fi
|
||||||
if [[ -n ${GotUpdates[*]} ]] ; then
|
if [[ -n ${GotUpdates[*]} ]] ; then
|
||||||
printf "\n%bContainers with updates available:%b\n" "$c_yellow" "$c_reset"
|
printf "\n%bContainers with updates available:%b\n" "$c_yellow" "$c_reset"
|
||||||
@@ -297,37 +297,25 @@ if [ -n "$GotUpdates" ] ; then
|
|||||||
fi
|
fi
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
### Checking if "com.docker.compose.project.config_files" returns the full path to the config file or just the file name
|
|
||||||
if [[ $ContConfigFile = '/'* ]] ; then
|
|
||||||
ComposeFile="$ContConfigFile"
|
|
||||||
else
|
|
||||||
ComposeFile="$ContPath/$ContConfigFile"
|
|
||||||
fi
|
|
||||||
### cd to the compose-file directory to account for people who use relative volumes, eg - ${PWD}/data:data
|
### cd to the compose-file directory to account for people who use relative volumes, eg - ${PWD}/data:data
|
||||||
cd "$ContPath" || { echo "Path error - skipping $i" ; continue ; }
|
cd "$ContPath" || { echo "Path error - skipping $i" ; continue ; }
|
||||||
|
## Reformatting path + multi compose
|
||||||
|
if [[ $ContConfigFile = '/'* ]] ; then
|
||||||
|
CompleteConfs=$(for conf in ${ContConfigFile//,/ } ; do printf -- "-f %s " "$conf"; done)
|
||||||
|
else
|
||||||
|
CompleteConfs=$(for conf in ${ContConfigFile//,/ } ; do printf -- "-f %s/%s " "$ContPath" "$conf"; done)
|
||||||
|
fi
|
||||||
printf "\n%bNow updating (%s/%s): %b%s%b\n" "$c_teal" "$CurrentQue" "$NumberofUpdates" "$c_blue" "$i" "$c_reset"
|
printf "\n%bNow updating (%s/%s): %b%s%b\n" "$c_teal" "$CurrentQue" "$NumberofUpdates" "$c_blue" "$i" "$c_reset"
|
||||||
### Checking if Label Only -option is set, and if container got the label
|
### Checking if Label Only -option is set, and if container got the label
|
||||||
[[ "$OnlyLabel" == true ]] && { [[ "$ContUpdateLabel" != true ]] && { echo "No update label, skipping." ; continue ; } }
|
[[ "$OnlyLabel" == true ]] && { [[ "$ContUpdateLabel" != true ]] && { echo "No update label, skipping." ; continue ; } }
|
||||||
docker pull "$ContImage"
|
docker pull "$ContImage"
|
||||||
### Reformat for multi-compose:
|
### Check if the container got an environment file set and reformat it
|
||||||
IFS=',' read -r -a Confs <<< "$ComposeFile" ; unset IFS
|
if [ -n "$ContEnv" ]; then ContEnvs=$(for env in ${ContEnv//,/ } ; do printf -- "--env-file %s " "$env"; done) ; fi
|
||||||
for conf in "${Confs[@]}"; do CompleteConfs+="-f $conf " ; done
|
|
||||||
### Check if the container got an environment file set, use it if so:
|
|
||||||
if [ -n "$ContEnv" ]; then
|
|
||||||
### prepare env-files arguments
|
|
||||||
ContEnvs=$(for env in ${ContEnv//,/ } ; do printf -- "--env-file %s " "$env"; done)
|
|
||||||
### Check if the whole stack should be restarted
|
### Check if the whole stack should be restarted
|
||||||
if [[ "$ContRestartStack" == true ]] || [[ "$ForceRestartStacks" == true ]] ; then
|
if [[ "$ContRestartStack" == true ]] || [[ "$ForceRestartStacks" == true ]] ; then
|
||||||
$DockerBin ${CompleteConfs[@]} stop ; $DockerBin ${CompleteConfs[@]} ${ContEnvs} up -d
|
$DockerBin ${CompleteConfs} stop ; $DockerBin ${CompleteConfs} ${ContEnvs} up -d
|
||||||
else
|
else
|
||||||
$DockerBin ${CompleteConfs[@]} ${ContEnvs} up -d "$ContName" # unquoted array to allow split - rework?
|
$DockerBin ${CompleteConfs} ${ContEnvs} up -d ${ContName}
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [[ "$ContRestartStack" == true ]] || [[ "$ForceRestartStacks" == true ]] ; then
|
|
||||||
$DockerBin ${CompleteConfs[@]} stop ; $DockerBin ${CompleteConfs[@]} up -d
|
|
||||||
else
|
|
||||||
$DockerBin ${CompleteConfs[@]} up -d "$ContName"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
printf "\n%bAll done!%b\n" "$c_green" "$c_reset"
|
printf "\n%bAll done!%b\n" "$c_green" "$c_reset"
|
||||||
|
|||||||
28
notify_matrix.sh
Normal file
28
notify_matrix.sh
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
### DISCLAIMER: This is a third party addition to dockcheck - best effort testing.
|
||||||
|
#
|
||||||
|
# Copy/rename this file to notify.sh to enable the notification snippet.
|
||||||
|
# Required receiving services must already be set up.
|
||||||
|
# Modify to fit your setup - set MatrixServer, Room_id and AccessToken
|
||||||
|
|
||||||
|
send_notification() {
|
||||||
|
Updates=("$@")
|
||||||
|
UpdToString=$( printf "%s\n" "${Updates[@]}" )
|
||||||
|
FromHost=$(hostname)
|
||||||
|
|
||||||
|
# platform specific notification code would go here
|
||||||
|
printf "\nSending Matrix notification\n"
|
||||||
|
|
||||||
|
# Setting the MessageBody variable here.
|
||||||
|
MessageBody="🐋 Containers on $FromHost with updates available: \n$UpdToString"
|
||||||
|
|
||||||
|
# Modify to fit your setup:
|
||||||
|
AccessToken="Your Matrix token here"
|
||||||
|
Room_id="Enter Room_id here"
|
||||||
|
MatrixServer="Enter Your HomeServer URL"
|
||||||
|
MsgBody="{\"msgtype\":\"m.text\",\"body\":\"$MessageBody\"}"
|
||||||
|
|
||||||
|
# URL Example: https://matrix.org/_matrix/client/r0/rooms/!xxxxxx:example.com/send/m.room.message?access_token=xxxxxxxx
|
||||||
|
|
||||||
|
curl -sS -o /dev/null --fail -X POST "$MatrixServer/_matrix/client/r0/rooms/$Room_id/send/m.room.message?access_token=$AccessToken" -H 'Content-Type: application/json' -d "$MsgBody"
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,7 +19,8 @@ send_notification() {
|
|||||||
TelegramToken="Your Telegram token here"
|
TelegramToken="Your Telegram token here"
|
||||||
TelegramChatId="Your Telegram ChatId here"
|
TelegramChatId="Your Telegram ChatId here"
|
||||||
TelegramUrl="https://api.telegram.org/bot$TelegramToken"
|
TelegramUrl="https://api.telegram.org/bot$TelegramToken"
|
||||||
TelegramData="{\"chat_id\":\"$TelegramChatId\",\"text\":\"$MessageBody\",\"disable_notification\": false}"
|
TelegramTopicID=12345678 ## Set to 0 if not using specific topic within chat
|
||||||
|
TelegramData="{\"chat_id\":\"$TelegramChatId\",\"text\":\"$MessageBody\",\"message_thread_id\":\"$TelegramTopicID\",\"disable_notification\": false}"
|
||||||
|
|
||||||
curl -sS -o /dev/null --fail -X POST "$TelegramUrl/sendMessage" -H 'Content-Type: application/json' -d "$TelegramData"
|
curl -sS -o /dev/null --fail -X POST "$TelegramUrl/sendMessage" -H 'Content-Type: application/json' -d "$TelegramData"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user