Updated the installer such that in test mode all built containers are
transferred to the install targets. This allows new containers to be
tested before they are added to the production list.
Changed the order in which some install steps were executed in test mode
to allow walking away from the process more quickly by prompting for
information earlier.
Updated the docker service instantiation to use the newly sumbmitted
compose files rather than the command line.
Once the installer is built in test mode it's started automatically
rather than requiring intervention and then exists when it's completed
the deployment of the cluster. This will be useful when integrating into
the automated build process later.

Change-Id: Id978cae69b53c605abefeb9b55f2671f9b9cfd20
diff --git a/install/ansible/roles/cluster-host/tasks/main.yml b/install/ansible/roles/cluster-host/tasks/main.yml
index 76d4840..6280b6f 100644
--- a/install/ansible/roles/cluster-host/tasks/main.yml
+++ b/install/ansible/roles/cluster-host/tasks/main.yml
@@ -69,7 +69,7 @@
     dest: "/var/lib/apt"
   tags: [cluster_host]
 
-- name: Dependent software is installed (this takes about 10 Min, DONT'T PANIC, go for coffee instead)
+- name: Dependent software is installed (this cand take about 10 Min, DONT'T PANIC, go for coffee instead)
   command: dpkg -R -i "{{ target_voltha_home }}/deb_files"
 #  ignore_errors: true
   when: target == "cluster"
diff --git a/install/ansible/roles/voltha/tasks/main.yml b/install/ansible/roles/voltha/tasks/main.yml
index 001c837..0f14844 100644
--- a/install/ansible/roles/voltha/tasks/main.yml
+++ b/install/ansible/roles/voltha/tasks/main.yml
@@ -31,18 +31,6 @@
   when: target == "cluster"
   tags: [voltha]
 
-#- name: Required directories are copied
-#  copy:
-#    src: "/home/vinstall/{{ item }}"
-#    dest: "{{ target_voltha_dir }}"
-#    owner: voltha
-#    group: voltha
-#  with_items:
-#    - compose
-#    - nginx_config
-#  when: target == "cluster"
-#  tags: [voltha]
-
 - name: Installer files and directories are copied
   synchronize:
     src: "/home/vinstall/{{ item }}"
@@ -71,16 +59,6 @@
   when: target == "cluster"
   tags: [voltha]
 
-#- name: Nginx module symlink is present
-#  file:
-#    dest: "{{ target_voltha_dir }}/nginx_config/modules"
-#    src: ../../usr/lib/nginx/modules
-#    state: link
-#    follow: no
-#    force: yes
-#  when: target == "cluster"
-#  tags: [voltha]
-
 - name: Nginx statup script is executable
   file:
     path: "{{ target_voltha_dir }}/nginx_config/start_service.sh"
@@ -136,10 +114,10 @@
   when: target == "installer"
   tags: [voltha]
 
-#- name: TEMPORARY RULE TO INSTALL ZOOKEEPER
-#  command: docker pull zookeeper
-#  when: target == "installer"
-#  tags: [voltha]
+- name: TEMPORARY RULE TO INSTALL ZOOKEEPER
+  command: docker pull zookeeper
+  when: target == "installer"
+  tags: [voltha]
 
 - name: Docker images are re-tagged to registry for push
   command: docker tag {{ item }} {{ docker_push_registry }}/{{ item }}
@@ -157,47 +135,17 @@
   when: target == "installer"
   tags: [voltha]
 
-- name: consul overlay network exists
-  command: docker network create --driver overlay --subnet 10.10.10.0/29 consul_net
-  when: target == "startup"
-  tags: [voltha]
-
-- name: kafka overlay network exists
-  command: docker network create --driver overlay --subnet 10.10.11.0/24 kafka_net
-  when: target == "startup"
-  tags: [voltha]
-
 - name: voltha overlay network exists
-  command: docker network create --driver overlay --subnet 10.10.12.0/24 voltha_net
+  command: docker network create --opt encrypted=true --driver overlay --subnet 10.10.12.0/24 voltha_net
   when: target == "startup"
   tags: [voltha]
 
 - name: consul cluster is running
-  command: docker service create --name consul --network consul_net --network voltha_net -e 'CONSUL_BIND_INTERFACE=eth0' --mode global --publish "8300:8300" --publish "8400:8400" --publish "8500:8500" --publish "8600:8600/udp" --mount type=bind,source=/cord/incubator/voltha/consul_config,destination=/consul/config consul agent -config-dir /consul/config
-  when: target == "startup"
-  tags: [voltha]
-
-- name: zookeeper node zk1 is running
-  command: docker service create --name zk1 --network kafka_net --network voltha_net -e 'ZOO_MY_ID=1' -e "ZOO_SERVERS=server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888" zookeeper
-  when: target == "startup"
-  tags: [voltha]
-
-- name: zookeeper node zk2 is running
-  command: docker service create --name zk2 --network kafka_net --network voltha_net -e 'ZOO_MY_ID=2' -e "server.1=zk1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3:2888:3888" zookeeper
-  when: target == "startup"
-  tags: [voltha]
-
-- name: zookeeper node zk3 is running
-  command: docker service create --name zk3 --network kafka_net --network voltha_net -e 'ZOO_MY_ID=3' -e "ZOO_SERVERS=server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=0.0.0.0:2888:3888" zookeeper
+  command: docker stack deploy -c {{ target_voltha_dir }}/compose/docker-compose-consul-cluster.yml consul
   when: target == "startup"
   tags: [voltha]
 
 - name: kafka is running
-  command: docker service create --name kafka --network voltha_net  -e "KAFKA_ADVERTISED_PORT=9092" -e "KAFKA_ZOOKEEPER_CONNECT=zk1:2181,zk2:2181,zk3:2181" -e "KAFKA_HEAP_OPTS=-Xmx256M -Xms128M" --mode global --publish "9092:9092" wurstmeister/kafka
-  when: target == "startup"
-  tags: [voltha]
-
-- name: voltha is running on a single host for testing
-  command: docker service create --name voltha_core --network voltha_net cord/voltha voltha/voltha/main.py -v --consul=consul:8500 --kafka=kafka
+  command: docker stack deploy -c {{ target_voltha_dir}}/compose/docker-compose-kafka-cluster.yml kafka
   when: target == "startup"
   tags: [voltha]
diff --git a/install/ansible/roles/voltha/tasks/voltha.yml b/install/ansible/roles/voltha/tasks/voltha.yml
deleted file mode 100644
index d41f931..0000000
--- a/install/ansible/roles/voltha/tasks/voltha.yml
+++ /dev/null
@@ -1,203 +0,0 @@
-# Note: When the target == "cluster" the installer
-# is running to install voltha in the cluster hosts.
-# Whe the target == "installer" the installer is being
-# created.
-- name: The environment is properly set on login
-  template:
-    src: bashrc.j2
-    dest: "{{ target_voltha_home }}/.bashrc"
-    owner: voltha
-    group: voltha
-    mode: "u=rw,g=r,o=r"
-  when: target == "cluster"
-  tags: [voltha]
-  
-- name: The .bashrc file is executed on ssh login
-  template:
-    src: bash_profile.j2
-    dest: "{{ target_voltha_home }}/.bash_profile"
-    owner: voltha
-    group: voltha
-    mode: "u=rw,g=r,o=r"
-  when: target == "cluster"
-  tags: [voltha]
-  
-- name: Required directory exists
-  file:
-    path: "{{ target_voltha_dir }}"
-    state: directory
-    owner: voltha
-    group: voltha
-  when: target == "cluster"
-  tags: [voltha]
-
-#- name: Required directories are copied
-#  copy:
-#    src: "/home/vinstall/{{ item }}"
-#    dest: "{{ target_voltha_dir }}"
-#    owner: voltha
-#    group: voltha
-#  with_items:
-#    - compose
-#    - nginx_config
-#  when: target == "cluster"
-#  tags: [voltha]
-
-- name: Installer files and directories are copied
-  synchronize:
-    src: "/home/vinstall/{{ item }}"
-    dest: "{{ target_voltha_dir }}"
-    archive: no
-    owner: no
-    perms: no
-    recursive: yes
-    links: yes
-  with_items:
-    - compose
-    - nginx_config
-  when: target == "cluster"
-  tags: [voltha]
-
-- name: Installer directories are owned by voltha
-  file:
-    path: /home/vinstall/{{ item }}
-    owner: voltha
-    group: voltha
-    recurse: yes
-    follow: no
-  with_items:
-    - compose
-    - nginx_config
-  when: target == "cluster"
-  tags: [voltha]
-
-#- name: Nginx module symlink is present
-#  file:
-#    dest: "{{ target_voltha_dir }}/nginx_config/modules"
-#    src: ../../usr/lib/nginx/modules
-#    state: link
-#    follow: no
-#    force: yes
-#  when: target == "cluster"
-#  tags: [voltha]
-
-- name: Nginx statup script is executable
-  file:
-    path: "{{ target_voltha_dir }}/nginx_config/start_service.sh"
-    mode: 0755
-  when: target == "cluster"
-  tags: [voltha]
-
-- name: Configuration files are on the cluster host
-  copy:
-    src: "files/consul_config"
-    dest: "{{ target_voltha_dir }}"
-  when: target == "cluster"
-  tags: [voltha]
-
-- name: Docker containers for Voltha are pulled
-  command: docker pull {{ docker_registry }}/{{ item }}
-  with_items: "{{ voltha_containers }}"
-  when: target == "cluster"
-  tags: [voltha]
-- name: Docker images are re-tagged to expected names
-  command: docker tag {{ docker_registry }}/{{ item }} {{ item }}
-  with_items: "{{ voltha_containers }}"
-  when: target == "cluster"
-  tags: [voltha]
-#- name: Old docker image tags are removed
-#  command: docker rmi {{ docker_registry }}/{{ item }}
-#  with_items: "{{ voltha_containers }}"
-#  when: target == "cluster"
-#  tags: [voltha]
-
-
-# Update the insecure registry to reflect the current installer.
-# The installer name can change depending on whether test mode
-# is being used or not.
-- name: Enable insecure install registry
-  template:
-    src: "{{ docker_daemon_json }}"
-    dest: "{{ docker_daemon_json_dest }}"
-  register: copy_result
-  when: target == "installer"
-  tags: [voltha]
-
-- name: Debain Daemon is reloaded
-  command: systemctl daemon-reload
-  when: copy_result|changed and is_systemd is defined and target == "installer"
-  tags: [voltha]
-
-- name: Debian Docker service is restarted
-  service:
-    name: docker
-    state: restarted
-  when: copy_result|changed or user_result|changed
-  when: target == "installer"
-  tags: [voltha]
-
-- name: TEMPORARY RULE TO INSTALL ZOOKEEPER
-  command: docker pull zookeeper
-  when: target == "installer"
-  tags: [voltha]
-
-- name: Docker images are re-tagged to registry for push
-  command: docker tag {{ item }} {{ docker_push_registry }}/{{ item }}
-  with_items: "{{ voltha_containers }}"
-  when: target == "installer"
-  tags: [voltha]
-- name: Docker containers for Voltha are pushed
-  command: docker push {{ docker_push_registry }}/{{ item }}
-  with_items: "{{ voltha_containers }}"
-  when: target == "installer"
-  tags: [voltha]
-- name: Temporary registry push tags are removed
-  command: docker rmi {{ docker_push_registry }}/{{ item }}
-  with_items: "{{ voltha_containers }}"
-  when: target == "installer"
-  tags: [voltha]
-
-- name: consul overlay network exists
-  command: docker network create --opt encrypted=true --driver overlay --subnet 10.10.10.0/29 consul_net
-  when: target == "startup"
-  tags: [voltha]
-
-- name: kafka overlay network exists
-  command: docker network create --opt encrypted=true --driver overlay --subnet 10.10.11.0/24 kafka_net
-  when: target == "startup"
-  tags: [voltha]
-
-- name: voltha overlay network exists
-  command: docker network create --opt encrypted=true --driver overlay --subnet 10.10.12.0/24 voltha_net
-  when: target == "startup"
-  tags: [voltha]
-
-- name: consul cluster is running
-  command: docker service create --name consul --network consul_net --network voltha_net -e 'CONSUL_BIND_INTERFACE=eth0' --mode global --publish "8300:8300" --publish "8400:8400" --publish "8500:8500" --publish "8600:8600/udp" --mount type=bind,source=/cord/incubator/voltha/consul_config,destination=/consul/config consul agent -config-dir /consul/config
-  when: target == "startup"
-  tags: [voltha]
-
-- name: zookeeper node zk1 is running
-  command: docker service create --name zk1 --network kafka_net --network voltha_net -e 'ZOO_MY_ID=1' -e "ZOO_SERVERS=server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888" zookeeper
-  when: target == "startup"
-  tags: [voltha]
-
-- name: zookeeper node zk2 is running
-  command: docker service create --name zk2 --network kafka_net --network voltha_net -e 'ZOO_MY_ID=2' -e "server.1=zk1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3:2888:3888" zookeeper
-  when: target == "startup"
-  tags: [voltha]
-
-- name: zookeeper node zk3 is running
-  command: docker service create --name zk3 --network kafka_net --network voltha_net -e 'ZOO_MY_ID=3' -e "ZOO_SERVERS=server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=0.0.0.0:2888:3888" zookeeper
-  when: target == "startup"
-  tags: [voltha]
-
-- name: kafka is running
-  command: docker service create --name kafka --network voltha_net  -e "KAFKA_ADVERTISED_PORT=9092" -e "KAFKA_ZOOKEEPER_CONNECT=zk1:2181,zk2:2181,zk3:2181" -e "KAFKA_HEAP_OPTS=-Xmx256M -Xms128M" --mode global --publish "9092:9092" wurstmeister/kafka
-  when: target == "startup"
-  tags: [voltha]
-
-- name: voltha is running on a single host for testing
-  command: docker service create --name voltha_core --network voltha_net cord/voltha voltha/voltha/main.py -v --consul=consul:8500 --kafka=kafka
-  when: target == "startup"
-  tags: [voltha]