[lxc-devel] [PATCH 3/4] download: Support listing available images
Stéphane Graber
stgraber at ubuntu.com
Tue Jan 14 20:04:52 UTC 2014
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
templates/lxc-download.in | 60 ++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 54 insertions(+), 6 deletions(-)
diff --git a/templates/lxc-download.in b/templates/lxc-download.in
index 2298a9b..70a2389 100644
--- a/templates/lxc-download.in
+++ b/templates/lxc-download.in
@@ -41,6 +41,7 @@ DOWNLOAD_URL=
DOWNLOAD_SHOW_HTTP_WARNING="true"
DOWNLOAD_SHOW_GPG_WARNING="true"
DOWNLOAD_COMPAT_LEVEL=1
+DOWNLOAD_LIST_IMAGES="false"
LXC_NAME=
LXC_PATH=
@@ -148,9 +149,10 @@ Required arguments:
[ -d | --dist <distribution> ]: The name of the distribution
[ -r | --release <release> ]: Release name/version
[ -a | --arch <architecture> ]: Architecture of the container
-[ -h | --help ]: This help message
Optional arguments:
+[ -h | --help ]: This help message
+[ -l | --list ]: List all available images
[ --variant <variant> ]: Variant of the image (default: "default")
[ --server <server> ]: Image server (default: "images.linuxcontainers.org")
[ --keyid <keyid> ]: GPG keyid (default: 0x...)
@@ -167,8 +169,8 @@ EOF
return 0
}
-options=$(getopt -o d:r:a:h -l dist:,release:,arch:,help,variant:,server:,\
-keyid:,no-validate,flush-cache,name:,path:,rootfs:,mapped-uid: -- "$@")
+options=$(getopt -o d:r:a:hl -l dist:,release:,arch:,help,list,variant:,\
+server:,keyid:,no-validate,flush-cache,name:,path:,rootfs:,mapped-uid: -- "$@")
if [ $? -ne 0 ]; then
usage
@@ -178,7 +180,8 @@ eval set -- "$options"
while :; do
case "$1" in
- -h|--help) usage $0 && exit 0;;
+ -h|--help) usage && exit 1;;
+ -l|--list) DOWNLOAD_LIST_IMAGES="true"; shift 1;;
-d|--dist) DOWNLOAD_DIST=$2; shift 2;;
-r|--release) DOWNLOAD_RELEASE=$2; shift 2;;
-a|--arch) DOWNLOAD_ARCH=$2; shift 2;;
@@ -226,8 +229,8 @@ if [ "$(in_userns)" = "yes" ]; then
DOWNLOAD_MODE="user"
fi
-if [ -z "$DOWNLOAD_DIST" ] || [ -z "$DOWNLOAD_RELEASE" ] || \
- [ -z "$DOWNLOAD_ARCH" ]; then
+if ([ -z "$DOWNLOAD_DIST" ] || [ -z "$DOWNLOAD_RELEASE" ] || \
+ [ -z "$DOWNLOAD_ARCH" ]) && [ "$DOWNLOAD_LIST_IMAGES" = "false" ]; then
echo "ERROR: Missing required argument" 1>&2
usage
exit 1
@@ -237,6 +240,51 @@ fi
trap cleanup EXIT HUP INT TERM
DOWNLOAD_TEMP=$(mktemp -d)
+# Simply list images
+if [ "$DOWNLOAD_LIST_IMAGES" = "true" ]; then
+ # Initialize GPG
+ gpg_setup
+
+ # Grab the index
+ DOWNLOAD_INDEX_PATH=/meta/1.0/index-${DOWNLOAD_MODE}
+
+ echo "Downloading the image index"
+ if ! download_file ${DOWNLOAD_INDEX_PATH}.${DOWNLOAD_COMPAT_LEVEL} \
+ ${DOWNLOAD_TEMP}/index noexit ||
+ ! download_sig ${DOWNLOAD_INDEX_PATH}.${DOWNLOAD_COMPAT_LEVEL}.asc \
+ ${DOWNLOAD_TEMP}/index.asc noexit; then
+ download_file ${DOWNLOAD_INDEX_PATH} ${DOWNLOAD_TEMP}/index normal
+ download_sig ${DOWNLOAD_INDEX_PATH}.asc \
+ ${DOWNLOAD_TEMP}/index.asc normal
+ fi
+
+ gpg_validate ${DOWNLOAD_TEMP}/index.asc
+
+ # Parse it
+ echo ""
+ echo "---"
+ echo "DIST\tRELEASE\tARCH\tVARIANT\tBUILD"
+ echo "---"
+ while read line; do
+ # Basic CSV parser
+ OLD_IFS=$IFS
+ IFS=";"
+ set -- $line
+ IFS=$OLD_IFS
+
+ [ -n "$DOWNLOAD_DIST" ] && [ "$1" != "$DOWNLOAD_DIST" ] && continue
+ [ -n "$DOWNLOAD_RELEASE" ] && [ "$2" != "$DOWNLOAD_RELEASE" ] && continue
+ [ -n "$DOWNLOAD_ARCH" ] && [ "$3" != "$DOWNLOAD_ARCH" ] && continue
+ [ -n "$DOWNLOAD_VARIANT" ] && [ "$4" != "$DOWNLOAD_VARIANT" ] && continue
+ [ -z "$5" ] || [ -z "$6" ] && continue
+
+ echo "$1\t$2\t$3\t$4\t$5"
+ done < ${DOWNLOAD_TEMP}/index
+ echo "---"
+
+ exit 1
+fi
+
# Setup the cache
if [ "$DOWNLOAD_MODE" = "system" ]; then
LXC_CACHE_BASE="$LOCALSTATEDIR/cache/"
--
1.8.5.2
More information about the lxc-devel
mailing list