#!/bin/sh # # A script to maintain a local working copy of an oxidized configuration # repository and mail out diffs for configuration changes # # Copyright 2016 Nick Hilliard , All Rights Reserved # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # 20170615 - Andre Sencioles # Removed requirement for Git working directory # Check job status # # 20200926 - Nick Hilliard # sends email # add command-line options to stop blank emails from being sent # more sanity-checking # # usage: add the following hook to the oxidized config file: # # -- # hooks: # email_output: # type: exec # events: [post_store, node_fail] # cmd: '/home/oxidized/extra/oxidized-report-git-commits -s "Oxidized updates for ${OX_NODE_NAME}" -r update-recipient@example.com' # async: true # timeout: 120 # -- # # Options: # -r email_recipient - send email to specified recipient # -s email_subject - specify the email subject line # -f - don't send email if git fails to find commit # trap '/bin/rm -f "$tmpfile"' EXIT tmpfile=$(mktemp) || exit 1 subject="Oxidized updates for ${OX_NODE_NAME}" scriptname=`basename $0` usage() { echo "Usage: ${scriptname} [-f] [ -s email_subject ] [ -r email_recipient ]" exit 1 } email_on_gitfail=1 while getopts "fs:r:" opt; do case $opt in s) subject=$OPTARG ;; r) recipient=$OPTARG ;; f) email_on_gitfail=0 ;; *) usage ;; esac done if [ "${OX_EVENT}" = "node_fail" ]; then echo "${scriptname}: ${OX_NODE_NAME}": 'Job failed' exit 64 fi if [ -z "${OX_REPO_COMMITREF}" ]; then echo "${scriptname}: "'$OX_REPO_COMMITREF not set' exit 64 fi if [ -z "${OX_REPO_NAME}" ]; then echo "${scriptname}: "'$OX_REPO_NAME not set' exit 64 fi cat > ${tmpfile} < /dev/null 2>&1 gitret=$? if [ ${gitret} -eq 0 ]; then git --bare --git-dir="${OX_REPO_NAME}" show --pretty='' --no-color "${OX_REPO_COMMITREF}" >> ${tmpfile} 2>&1 else echo "${scriptname}: commit ${OX_REPO_COMMITREF} does not exist" >> ${tmpfile} fi if [ ! -z "${recipient}" -a \( ${gitret} -eq 0 -o ${email_on_gitfail} -eq 1 \) ]; then cat ${tmpfile} | mail -s "${subject}" "${recipient}" else cat ${tmpfile} fi