diff --git a/examples/update-demo/1-create-replication-controller.sh b/examples/update-demo/1-create-replication-controller.sh index 54ee0115213..450e57e1a0d 100755 --- a/examples/update-demo/1-create-replication-controller.sh +++ b/examples/update-demo/1-create-replication-controller.sh @@ -19,6 +19,9 @@ if [ -z "$DOCKER_HUB_USER" ] ; then exit 1 fi +export KUBE_REPO_ROOT=${KUBE_REPO_ROOT-$(dirname $0)/../..} +export KUBECFG=${KUBECFG-$KUBE_REPO_ROOT/cluster/kubecfg.sh} + set -x -../../cluster/kubecfg.sh -p 8080:80 run $DOCKER_HUB_USER/update-demo:nautilus 2 update-demo +$KUBECFG -p 8080:80 run $DOCKER_HUB_USER/update-demo:nautilus 2 update-demo diff --git a/examples/update-demo/2-scale.sh b/examples/update-demo/2-scale.sh index 8958871feca..f19e53bb57b 100755 --- a/examples/update-demo/2-scale.sh +++ b/examples/update-demo/2-scale.sh @@ -16,6 +16,9 @@ NEW_SIZE=${1:-4} +export KUBE_REPO_ROOT=${KUBE_REPO_ROOT-$(dirname $0)/../..} +export KUBECFG=${KUBECFG-$KUBE_REPO_ROOT/cluster/kubecfg.sh} + set -x -../../cluster/kubecfg.sh resize update-demo $NEW_SIZE +$KUBECFG resize update-demo $NEW_SIZE diff --git a/examples/update-demo/3-rolling-update.sh b/examples/update-demo/3-rolling-update.sh index f7222e72016..2aade212f0e 100755 --- a/examples/update-demo/3-rolling-update.sh +++ b/examples/update-demo/3-rolling-update.sh @@ -20,7 +20,10 @@ if [ -z "$DOCKER_HUB_USER" ] ; then fi NEW_IMAGE=${1:-kitten} +TIMING=${2:-10s} +export KUBE_REPO_ROOT=${KUBE_REPO_ROOT-$(dirname $0)/../..} +export KUBECFG=${KUBECFG-$KUBE_REPO_ROOT/cluster/kubecfg.sh} set -x -../../cluster/kubecfg.sh -image $DOCKER_HUB_USER/update-demo:$NEW_IMAGE -u 10s rollingupdate update-demo +$KUBECFG -image $DOCKER_HUB_USER/update-demo:$NEW_IMAGE -u $TIMING rollingupdate update-demo diff --git a/examples/update-demo/4-down.sh b/examples/update-demo/4-down.sh index cd565891df9..747aafa0d42 100755 --- a/examples/update-demo/4-down.sh +++ b/examples/update-demo/4-down.sh @@ -14,7 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +export KUBE_REPO_ROOT=${KUBE_REPO_ROOT-$(dirname $0)/../..} +export KUBECFG=${KUBECFG-$KUBE_REPO_ROOT/cluster/kubecfg.sh} + set -x -../../cluster/kubecfg.sh stop update-demo -../../cluster/kubecfg.sh rm update-demo +$KUBECFG stop update-demo +$KUBECFG rm update-demo diff --git a/hack/e2e-suite/update.sh b/hack/e2e-suite/update.sh index 9357c98f34c..02de149d2b7 100755 --- a/hack/e2e-suite/update.sh +++ b/hack/e2e-suite/update.sh @@ -16,65 +16,72 @@ # Launches an nginx container and verifies it can be reached. Assumes that # we're being called by hack/e2e-test.sh (we use some env vars it sets up). - -# Exit on error -set -e +set -o errexit +set -o nounset +set -o pipefail +set -x source "${KUBE_REPO_ROOT}/cluster/kube-env.sh" source "${KUBE_REPO_ROOT}/cluster/$KUBERNETES_PROVIDER/util.sh" -function validate() { - POD_ID_LIST=$($KUBECFG '-template={{range.Items}}{{.ID}} {{end}}' -l name=$controller list pods) - # Container turn up on a clean cluster can take a while for the docker image pull. - ALL_RUNNING=0 - while [ $ALL_RUNNING -ne 1 ]; do - echo "Waiting for all containers in pod to come up." - sleep 5 - ALL_RUNNING=1 - for id in $POD_ID_LIST; do - CURRENT_STATUS=$($KUBECFG -template '{{and .CurrentState.Info.datacontroller.State.Running .CurrentState.Info.net.State.Running}}' get pods/$id) - if [ "$CURRENT_STATUS" != "true" ]; then - ALL_RUNNING=0 - fi - done - done - ids=($POD_ID_LIST) - if [ ${#ids[@]} -ne $1 ]; then - echo "Unexpected number of pods: ${#ids[@]}. Expected $1" - exit 1 - fi +CONTROLLER_NAME=update-demo + +function validate() { + NUM_REPLICAS=$1 + CONTAINER_IMAGE_VERSION=$2 + POD_ID_LIST=$($KUBECFG '-template={{range.Items}}{{.ID}} {{end}}' -l replicationController=${CONTROLLER_NAME} list pods) + # Container turn up on a clean cluster can take a while for the docker image pull. + ALL_RUNNING=0 + while [ $ALL_RUNNING -ne 1 ]; do + echo "Waiting for all containers in pod to come up." + sleep 5 + ALL_RUNNING=1 + for id in $POD_ID_LIST; do + TEMPLATE_STRING="{{and ((index .CurrentState.Info \"${CONTROLLER_NAME}\").State.Running) .CurrentState.Info.net.State.Running}}" + CURRENT_STATUS=$($KUBECFG -template "${TEMPLATE_STRING}" get pods/$id) + if [ "$CURRENT_STATUS" != "true" ]; then + ALL_RUNNING=0 + fi + + CURRENT_IMAGE=$($KUBECFG -template "{{(index .CurrentState.Info \"${CONTROLLER_NAME}\").Config.Image}}" get pods/$id) + if [ "$CURRENT_IMAGE" != "${DOCKER_HUB_USER}/update-demo:${CONTAINER_IMAGE_VERSION}" ]; then + ALL_RUNNING=0 + fi + done + done + + ids=($POD_ID_LIST) + if [ ${#ids[@]} -ne $NUM_REPLICAS ]; then + echo "Unexpected number of pods: ${#ids[@]}. Expected $NUM_REPLICAS" + exit 1 + fi } -controller=dataController +DOCKER_HUB_USER=jbeda # Launch a container -$KUBECFG -p 8080:80 run brendanburns/data 2 $controller +${KUBE_REPO_ROOT}/examples/update-demo/1-create-replication-controller.sh function teardown() { echo "Cleaning up test artifacts" - $KUBECFG stop $controller - $KUBECFG rm $controller + ${KUBE_REPO_ROOT}/examples/update-demo/4-down.sh } trap "teardown" EXIT -validate 2 +validate 2 nautilus -$KUBECFG resize $controller 1 +${KUBE_REPO_ROOT}/examples/update-demo/2-scale.sh 1 sleep 2 -validate 1 +validate 1 nautilus -$KUBECFG resize $controller 2 +${KUBE_REPO_ROOT}/examples/update-demo/2-scale.sh 2 sleep 2 -validate 2 +validate 2 nautilus -# TODO: test rolling update here, but to do so, we need to make the update blocking -# $KUBECFG -u=20s rollingupdate $controller -# -# Wait for the replica controller to recreate -# sleep 10 -# -# validate 2 +${KUBE_REPO_ROOT}/examples/update-demo/3-rolling-update.sh kitten 1s +sleep 2 +validate 2 kitten exit 0