New Aptly scripts
Change-Id: I628a9341da02c28f33a84fc5b1da3cbbd7e72ea4
diff --git a/aptly/files/aptly_mirror_update.sh b/aptly/files/aptly_mirror_update.sh
index e61e7a4..3deb8ac 100755
--- a/aptly/files/aptly_mirror_update.sh
+++ b/aptly/files/aptly_mirror_update.sh
@@ -1,71 +1,90 @@
#!/bin/bash
-
+try=0
+retval=666
SCRIPT=$(basename $0)
MAXTRIES=3
VERBOSE=0
SNAPSHOT=0
+MIRROR=""
log_info() {
- logger -p user.info -t ${SCRIPT} "$*"
- [ $VERBOSE -eq 1 ] && echo "[INFO] $*"
+ logger -p user.info -t ${SCRIPT} "$*"
+ [ $VERBOSE -eq 1 ] && echo "[INFO] $*"
}
log_error() {
- logger -p user.error -t ${SCRIPT} "$*"
- echo "[ERROR] $*" >&2
+ logger -p user.error -t ${SCRIPT} "$*"
+ echo "[ERROR] $*" >&2
}
-if [[ "$*" == *--verbose* || "$*" == *-v* ]]; then
- VERBOSE=1
-fi
+update_mirror() {
+ if [[ "$1" == "" ]]; then
+ log_error "Mirror has to be specified."
+ exit 3
+ fi
+ while [[ $retval -ne 0 && $try -lt $MAXTRIES ]]; do
+ log_info "Starting update of mirror ${1}"
+ if [[ $VERBOSE -eq 0 ]]; then
+ out=$(aptly mirror update -force=true ${1} >/dev/null 2>&1)
+ else
+ aptly mirror update -force=true ${1}
+ fi
-if [[ "$*" == *--snapshot* || "$*" == *-s* ]]; then
- SNAPSHOT=1
-fi
+ retval=$?
-MIRRORS=$(aptly mirror list --raw 2>&1)
-if [[ $? -ne 0 ]]; then
- log_error "$MIRRORS"
- exit 1
-fi
+ if [[ $retval -ne 0 ]]; then
+ try=$[ $try + 1 ]
+ log_error "Failed to update mirror ${1}, try=${try}"
+ [ ! -z "$out" ] && log_error "${out}"
+ else
+ log_info "Synced mirror ${1}"
+ if [[ $SNAPSHOT -eq 1 ]]; then
+ snapshot_name="${1}-$(date +%s)"
+ if [[ $VERBOSE -eq 0 ]]; then
+ out=$(aptly snapshot create ${snapshot_name} from mirror ${1} >/dev/null 2>&1)
+ else
+ aptly snapshot create ${snapshot_name} from mirror ${1}
+ fi
-for mirror in $MIRRORS; do
- try=0
- retval=666
+ retval=$?
+ if [[ $retval -ne 0 ]]; then
+ log_error "Failed to create snapshot ${snapshot_name} from mirror ${1}"
+ [ ! -z "$out" ] && log_error "$out"
+ else
+ log_info "Created snapshot ${snapshot_name} from mirror ${1}"
+ fi
+ fi
+ break
+ fi
+ done
+ try=0
+ retval=666
+}
- while [[ $retval -ne 0 && $try -lt $MAXTRIES ]]; do
- log_info "Starting update of mirror ${mirror}"
- if [[ $VERBOSE -eq 0 ]]; then
- out=$(aptly mirror update -force=true ${mirror} >/dev/null 2>&1)
- else
- aptly mirror update -force=true ${mirror}
- fi
-
- retval=$?
-
- if [[ $retval -ne 0 ]]; then
- try=$[ $try + 1 ]
- log_error "Failed to update mirror ${mirror}, try=${try}"
- [ ! -z "$out" ] && log_error "${out}"
- else
- log_info "Synced mirror ${mirror}"
- if [[ $SNAPSHOT -eq 1 ]]; then
- snapshot_name="${mirror}-$(date +%s)"
- if [[ $VERBOSE -eq 0 ]]; then
- out=$(aptly snapshot create ${snapshot_name} from mirror ${mirror} >/dev/null 2>&1)
- else
- aptly snapshot create ${snapshot_name} from mirror ${mirror}
- fi
-
- retval=$?
- if [[ $retval -ne 0 ]]; then
- log_error "Failed to create snapshot ${snapshot_name} from mirror ${mirror}"
- [ ! -z "$out" ] && log_error "$out"
- else
- log_info "Created snapshot ${snapshot_name} from mirror ${mirror}"
- fi
- fi
- break
- fi
- done
+while getopts "m:s?v?" option
+do
+ case "${option}"
+ in
+ m|\?) MIRROR=${OPTARG};;
+ s|\?) SNAPSHOT=1;;
+ v|\?) VERBOSE=1;;
+ esac
done
+
+if [[ "$MIRROR" != "" ]]; then
+ MIRROR_DETAIL=$(aptly mirror show ${MIRROR})
+ if [[ $? -ne 0 ]]; then
+ log_error "$MIRROR_DETAIL"
+ exit 1
+ fi
+ update_mirror "${MIRROR}"
+else
+ MIRRORS=$(aptly mirror list --raw 2>&1)
+ if [[ $? -ne 0 ]]; then
+ log_error "$MIRRORS"
+ exit 1
+ fi
+ for mirror in $MIRRORS; do
+ update_mirror "${mirror}"
+ done
+fi
diff --git a/aptly/files/aptly_publish_update.sh b/aptly/files/aptly_publish_update.sh
new file mode 100644
index 0000000..cbc8ca5
--- /dev/null
+++ b/aptly/files/aptly_publish_update.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+CLEANUP=0
+VERBOSE=0
+START_API=0
+RECREATE=0
+FORCE_OVERWRITE=0
+PUBLISHER_OPTIONS=""
+
+log_info() {
+ logger -p user.info -t ${SCRIPT} "$*"
+ [ $VERBOSE -eq 1 ] && echo "[INFO] $*"
+}
+
+log_error() {
+ logger -p user.error -t ${SCRIPT} "$*"
+ echo "[ERROR] $*" >&2
+}
+
+at_exit() {
+ pgrep -f "aptly api serve" | xargs kill -15
+}
+trap at_exit EXIT
+
+while getopts "a?c?f?r?v?" option
+do
+ case "${option}"
+ in
+ a|\?) START_API=1;;
+ c|\?) CLEANUP=1;;
+ f|\?) FORCE_OVERWRITE=1;;
+ r|\?) RECREATE=1;;
+ v|\?) VERBOSE=1;;
+ esac
+done
+
+if [[ $START_API -eq 1 ]]; then
+ nohup aptly api serve --no-lock > /dev/null 2>&1 </dev/null &
+fi
+if [[ $RECREATE -eq 1 ]]; then
+ PUBLISHER_OPTIONS+=" --recreate"
+fi
+if [[ $FORCE_OVERWRITE -eq 1 ]]; then
+ PUBLISHER_OPTIONS+=" --force-overwrite"
+fi
+
+aptly-publisher --timeout=1200 publish -v -c /etc/aptly-publisher.yaml --url http://127.0.0.1:8080 --architectures amd64 $PUBLISHER_OPTIONS
+
+if [[ $? -ne 0 ]]; then
+ echo "Aptly Publisher failed."
+ exit 1
+fi
+
+if [[ $CLEANUP -eq 1 ]]; then
+ SNAPSHOT_LIST="$(aptly snapshot list --raw)"
+ if [[ "$SNAPSHOT_LIST" != "" ]]; then
+ log_info "Deleting unpublished snapshots"
+ echo $SNAPSHOT_LIST | grep -E '*' | xargs -n 1 aptly snapshot drop
+ fi
+ log_info "Cleaning Aptly DB"
+ aptly db cleanup
+fi
+exit 0
\ No newline at end of file
diff --git a/aptly/publisher.sls b/aptly/publisher.sls
index 0ddb9ee..21f32c2 100644
--- a/aptly/publisher.sls
+++ b/aptly/publisher.sls
@@ -51,6 +51,14 @@
{%- endif %}
+aptly_publish_script:
+ file.managed:
+ - name: /usr/local/bin/aptly_publish_update.sh
+ - source: salt://aptly/files/aptly_publish_update.sh
+ - user: root
+ - group: root
+ - mode: 755
+
publisher_yaml:
file.managed:
- name: /etc/aptly-publisher.yaml