[lxc-devel] [PATCH 3/4] download: Support listing available images

Serge Hallyn serge.hallyn at ubuntu.com
Tue Jan 14 20:32:50 UTC 2014


Quoting Stéphane Graber (stgraber at ubuntu.com):
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

(Didn't test, but looks ok)

Acked-by: Serge E. Hallyn <serge.hallyn 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
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list