Add glance client

* python-glanceclient overrides the old client shipped with glance in /usr/local/bin
* start adding exercises

Change-Id: I460ed5749bca69425f23d328c0537c2ef91f84a4
diff --git a/exercises/boot_from_volume.sh b/exercises/boot_from_volume.sh
index c707b47..6a0937a 100755
--- a/exercises/boot_from_volume.sh
+++ b/exercises/boot_from_volume.sh
@@ -51,7 +51,7 @@
 # =================
 
 # Grab the id of the image to launch
-IMAGE=`glance -f index | egrep $DEFAULT_IMAGE_NAME | head -1 | cut -d" " -f1`
+IMAGE=`glance image-list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1`
 die_if_not_set IMAGE "Failure getting image"
 
 # Instance and volume names
diff --git a/exercises/client-args.sh b/exercises/client-args.sh
index 66fddcf..1d7d5b6 100755
--- a/exercises/client-args.sh
+++ b/exercises/client-args.sh
@@ -46,7 +46,9 @@
 
 # Common authentication args
 TENANT_ARG="--os_tenant_name=$x_TENANT_NAME"
+TENANT_ARG_DASH="--os-tenant-name=$x_TENANT_NAME"
 ARGS="--os_username=$x_USERNAME --os_password=$x_PASSWORD --os_auth_url=$x_AUTH_URL"
+ARGS_DASH="--os-username=$x_USERNAME --os-password=$x_PASSWORD --os-auth-url=$x_AUTH_URL"
 
 # Set global return
 RETURN=0
@@ -94,7 +96,7 @@
         STATUS_GLANCE="Skipped"
     else
         echo -e "\nTest Glance"
-        if glance $TENANT_ARG $ARGS index; then
+        if glance $TENANT_ARG_DASH $ARGS_DASH image-list; then
             STATUS_GLANCE="Succeeded"
         else
             STATUS_GLANCE="Failed"
diff --git a/exercises/client-env.sh b/exercises/client-env.sh
index af2c4c2..10871a6 100755
--- a/exercises/client-env.sh
+++ b/exercises/client-env.sh
@@ -107,7 +107,7 @@
         STATUS_GLANCE="Skipped"
     else
         echo -e "\nTest Glance"
-        if glance index; then
+        if glance image-list; then
             STATUS_GLANCE="Succeeded"
         else
             STATUS_GLANCE="Failed"
diff --git a/exercises/floating_ips.sh b/exercises/floating_ips.sh
index 9974b4b..dd40aa0 100755
--- a/exercises/floating_ips.sh
+++ b/exercises/floating_ips.sh
@@ -63,10 +63,10 @@
 nova image-list
 
 # But we recommend using glance directly
-glance -f index
+glance image-list
 
 # Grab the id of the image to launch
-IMAGE=`glance -f index | egrep $DEFAULT_IMAGE_NAME | head -1 | cut -d" " -f1`
+IMAGE=$(glance image-list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1)
 
 # Security Groups
 # ---------------
diff --git a/exercises/volumes.sh b/exercises/volumes.sh
index 1abbecc..b62427f 100755
--- a/exercises/volumes.sh
+++ b/exercises/volumes.sh
@@ -53,10 +53,10 @@
 nova image-list
 
 # But we recommend using glance directly
-glance -f index
+glance image-list
 
 # Grab the id of the image to launch
-IMAGE=`glance -f index | egrep $DEFAULT_IMAGE_NAME | head -1 | cut -d" " -f1`
+IMAGE=$(glance image-list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1)
 
 # determinine instance type
 # -------------------------
diff --git a/files/default_catalog.templates b/files/default_catalog.templates
index 31618ab..66052b6 100644
--- a/files/default_catalog.templates
+++ b/files/default_catalog.templates
@@ -30,7 +30,7 @@
 catalog.RegionOne.s3.name = S3 Service
 
 
-catalog.RegionOne.image.publicURL = http://%SERVICE_HOST%:9292/v1
-catalog.RegionOne.image.adminURL = http://%SERVICE_HOST%:9292/v1
-catalog.RegionOne.image.internalURL = http://%SERVICE_HOST%:9292/v1
+catalog.RegionOne.image.publicURL = http://%SERVICE_HOST%:9292
+catalog.RegionOne.image.adminURL = http://%SERVICE_HOST%:9292
+catalog.RegionOne.image.internalURL = http://%SERVICE_HOST%:9292
 catalog.RegionOne.image.name = Image Service
diff --git a/stack.sh b/stack.sh
index 8fa3902..1b69475 100755
--- a/stack.sh
+++ b/stack.sh
@@ -201,6 +201,7 @@
 NOVA_DIR=$DEST/nova
 HORIZON_DIR=$DEST/horizon
 GLANCE_DIR=$DEST/glance
+GLANCECLIENT_DIR=$DEST/python-glanceclient
 KEYSTONE_DIR=$DEST/keystone
 NOVACLIENT_DIR=$DEST/python-novaclient
 KEYSTONECLIENT_DIR=$DEST/python-keystoneclient
@@ -643,6 +644,7 @@
 # python client library to nova that horizon (and others) use
 git_clone $KEYSTONECLIENT_REPO $KEYSTONECLIENT_DIR $KEYSTONECLIENT_BRANCH
 git_clone $NOVACLIENT_REPO $NOVACLIENT_DIR $NOVACLIENT_BRANCH
+git_clone $GLANCECLIENT_REPO $GLANCECLIENT_DIR $GLANCECLIENT_BRANCH
 
 # glance, swift middleware and nova api needs keystone middleware
 if is_service_enabled key g-api n-api swift; then
@@ -715,6 +717,9 @@
     cd $MELANGECLIENT_DIR; sudo python setup.py develop
 fi
 
+# Do this _after_ glance is installed to override the old binary
+cd $GLANCECLIENT_DIR; sudo python setup.py develop
+
 
 # Syslog
 # ------
@@ -1854,21 +1859,19 @@
         esac
 
         if [ "$CONTAINER_FORMAT" = "bare" ]; then
-            glance add --silent-upload -A $TOKEN name="$IMAGE_NAME" is_public=true container_format=$CONTAINER_FORMAT disk_format=$DISK_FORMAT < <(zcat --force "${IMAGE}")
+            glance --os-auth-token $TOKEN --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME" --public --container-format=$CONTAINER_FORMAT --disk-format $DISK_FORMAT < <(zcat --force "${IMAGE}")
         else
             # Use glance client to add the kernel the root filesystem.
             # We parse the results of the first upload to get the glance ID of the
             # kernel for use when uploading the root filesystem.
             KERNEL_ID=""; RAMDISK_ID="";
             if [ -n "$KERNEL" ]; then
-                RVAL=`glance add --silent-upload -A $TOKEN name="$IMAGE_NAME-kernel" is_public=true container_format=aki disk_format=aki < "$KERNEL"`
-                KERNEL_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "`
+                KERNEL_ID=$(glance --os-auth-token $TOKEN --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME-kernel" --public --container-format aki --disk-format aki < "$KERNEL" | grep ' id ' | get_field 2)
             fi
             if [ -n "$RAMDISK" ]; then
-                RVAL=`glance add --silent-upload -A $TOKEN name="$IMAGE_NAME-ramdisk" is_public=true container_format=ari disk_format=ari < "$RAMDISK"`
-                RAMDISK_ID=`echo $RVAL | cut -d":" -f2 | tr -d " "`
+                RAMDISK_ID=$(glance --os-auth-token $TOKEN --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME-ramdisk" --public --container-format ari --disk-format ari < "$RAMDISK" | grep ' id ' | get_field 2)
             fi
-            glance add -A $TOKEN name="${IMAGE_NAME%.img}" is_public=true container_format=ami disk_format=ami ${KERNEL_ID:+kernel_id=$KERNEL_ID} ${RAMDISK_ID:+ramdisk_id=$RAMDISK_ID} < <(zcat --force "${IMAGE}")
+            glance --os-auth-token $TOKEN --os-image-url http://$GLANCE_HOSTPORT image-create --name "${IMAGE_NAME%.img}" --public --container-format ami --disk-format ami ${KERNEL_ID:+--property kernel_id=$KERNEL_ID} ${RAMDISK_ID:+--property ramdisk_id=$RAMDISK_ID} < "${IMAGE}"
         fi
     done
 fi
diff --git a/stackrc b/stackrc
index d0fa1c2..3ad46cc 100644
--- a/stackrc
+++ b/stackrc
@@ -17,14 +17,14 @@
 SWIFT_REPO=https://github.com/openstack/swift.git
 SWIFT_BRANCH=master
 
-# swift and keystone integration
-SWIFT_KEYSTONE_REPO=https://github.com/cloudbuilders/swift-keystone2.git
-SWIFT_KEYSTONE_BRANCH=master
-
 # image catalog service
 GLANCE_REPO=https://github.com/openstack/glance.git
 GLANCE_BRANCH=master
 
+# python glance client library
+GLANCECLIENT_REPO=https://github.com/openstack/python-glanceclient
+GLANCECLIENT_BRANCH=master
+
 # unified auth system (manages accounts/tokens)
 KEYSTONE_REPO=https://github.com/openstack/keystone.git
 KEYSTONE_BRANCH=master