diff --git a/debian/ngcp-ngcpcfg.install b/debian/ngcp-ngcpcfg.install index 968f2ee5..2701eb6b 100644 --- a/debian/ngcp-ngcpcfg.install +++ b/debian/ngcp-ngcpcfg.install @@ -12,6 +12,7 @@ lib/* usr/lib/ngcp-ngcpcfg/ sbin/ngcp-network usr/sbin/ sbin/ngcp-sync-constants usr/sbin/ sbin/ngcpcfg usr/sbin/ +scripts/apply usr/share/ngcp-ngcpcfg/scripts/ scripts/build usr/share/ngcp-ngcpcfg/scripts/ scripts/check usr/share/ngcp-ngcpcfg/scripts/ scripts/commit usr/share/ngcp-ngcpcfg/scripts/ diff --git a/docs/ngcpcfg.txt b/docs/ngcpcfg.txt index 25b34363..ba3f218b 100644 --- a/docs/ngcpcfg.txt +++ b/docs/ngcpcfg.txt @@ -21,8 +21,8 @@ tl;dr? - ngcpcfg for the impatient ---------------------------------- The main system configuration is done in the file _/etc/ngcp-config/config.yml_. -After modifying the file execute 'ngcpcfg apply' to build the accordingly -configurations file. +After modifying the file execute 'ngcpcfg apply ""' to build +the according configuration files. Taxonomy -------- @@ -203,11 +203,14 @@ Display ngcpcfg version and exit. Actions ------- - **apply**:: + **apply** []:: Executes the _check_, _build_, _services_ and _commit_ commands in a batch (assuming each command worked as expected). This option serves as a shortcut for -the most commonly executed commands. +the most commonly executed commands. If there are any outstanding changes that +need to be committed, then the commit message needs to be provided. This is +meant so the configuration change history (accessible e.g. via 'ngcpcfg log') +provides useful information. **check** [|]:: diff --git a/sbin/ngcpcfg b/sbin/ngcpcfg index 0139c49d..6c74ae15 100755 --- a/sbin/ngcpcfg +++ b/sbin/ngcpcfg @@ -98,6 +98,11 @@ show() { "${SCRIPTS}"/show $* } +apply() { + log_debug "${SCRIPTS}/apply $*" + "${SCRIPTS}"/apply $* +} + usage() { # make sure to output errors on stderr [ "${1:-}" = "1" ] && exec >&2 @@ -156,7 +161,7 @@ case ${1:-} in pull) shift ; pull "$*" ;; services) shift ; services "$*" ;; status) shift ; status "$*" ;; - apply) shift ; check && build && services && commit "$*" && etckeeper ;; + apply) shift ; apply "$*" ;; encrypt) shift ; encrypt "$*" ;; decrypt) shift ; decrypt "$*" ;; diff) shift ; diff "$*" ;; diff --git a/scripts/apply b/scripts/apply new file mode 100755 index 00000000..aa1b986e --- /dev/null +++ b/scripts/apply @@ -0,0 +1,43 @@ +#!/bin/bash +# Purpose: shortcut for check, build, services, commit + etckeeper in one run +################################################################################ + +set -e +set -u +set -o pipefail + +# support testsuite +FUNCTIONS="${FUNCTIONS:-/usr/share/ngcp-ngcpcfg/functions/}" +HELPER="${HELPER:-/usr/share/ngcp-ngcpcfg/helper/}" +SCRIPTS="${SCRIPTS:-/usr/share/ngcp-ngcpcfg/scripts/}" + +if ! [ -r "${FUNCTIONS}"/main ] ; then + printf "Error: %s/main could not be read. Exiting.\n" "${FUNCTIONS}">&2 + exit 1 +fi + +timestamp_replacementchars='' +. "${FUNCTIONS}"/main + +# based on check_local_state() from scripts/status +check_for_outstanding_commits() { + log_debug "cd $NGCPCTL_MAIN" + cd "$NGCPCTL_MAIN" + + log_debug "git status | grep -q 'working directory clean'" + if git status | grep -q 'working directory clean' ; then + return 1 # nothing to commit + else + return 0 # outstanding commits + fi +} + +if check_for_outstanding_commits && [ -z "${1:-}" ] ; then + log_error "Uncommitted configuration files found." + log_info "Please provide commit message, like: $PN apply 'summary of your changes'" + exit 1 +fi + +"${SCRIPTS}"/check && "${SCRIPTS}"/build && "${SCRIPTS}"/services && "${SCRIPTS}"/commit "$*" && "${SCRIPTS}"/etckeeper + +## END OF FILE #################################################################