diff --git a/libnetwork/machines b/libnetwork/machines new file mode 100755 index 0000000000..4d4b407ec1 --- /dev/null +++ b/libnetwork/machines @@ -0,0 +1,111 @@ +#/bin/sh + +set -e + +usage() +{ +cat << EOF +NAME: + machines - Create Test Environments for Docker Networking + +VERSION: + 0.1 + +USAGE: + $0 [command_options] [arguments...] + +COMMANDS: + help + Help and usage + + up + Create environment with given KV store + zookeeper | etcd | consul (default) + Create N nodes, default = 2 + + destroy + Destroy Environment + +EOF +} + +step() { + printf "\033[0;36m-----> $@\033[0m\n" +} + +up() +{ + step "Creating KV Store Machine" + docker-machine create \ + -d virtualbox \ + mh-kv + + step "KV Store is $1" + step "Starting KV Container" + case "$1" in + etcd) + cluster_store="cluster-store=etcd://$(docker-machine ip mh-kv):2379" + docker $(docker-machine config mh-kv) run -d \ + -p "2379:2379" \ + -h "etcd" \ + --name "etcd" \ + quay.io/coreos/etcd:v2.2.1 \ + --listen-client-urls="http://0.0.0.0:2379" \ + --advertise-client-urls="http://$(docker-machine ip mh-kv):2379" + ;; + zookeeper) + cluster_store="cluster-store=zk://$(docker-machine ip mh-kv):2181" + docker $(docker-machine config mh-kv) run -d \ + -p "2181:2181" \ + -h "zookeeper" \ + --name "zookeeper" \ + tianon/zookeeper + ;; + *) + cluster_store="cluster-store=consul://$(docker-machine ip mh-kv):8500" + docker $(docker-machine config mh-kv) run -d \ + -p "8500:8500" \ + -h "consul" \ + --name "consul" \ + progrium/consul -server -bootstrap-expect 1 + ;; + esac + + machines=$2 + if [ -z machines ]; then + machines=2 + fi + step "Creating $machines Machines" + + for i in $(seq $machines); do + step "Creating machine $i" + docker-machine create \ + -d virtualbox \ + --engine-opt="cluster-advertise=eth1:2376" \ + --engine-opt="$cluster_store" \ + mh-$i + done +} + +destroy() +{ + for x in $(docker-machine ls | grep mh- | awk '{ print $1 }'); do + docker-machine rm $x + done +} + +case "$1" in + up) + shift + up $@ + ;; + destroy) + destroy $@ + ;; + help) + usage + ;; + *) + usage + ;; +esac