--- # deploy a Docker server with Zookeeper, Solr, HAProxy - hosts: all tasks: - name: Install prereqs from apt become: yes apt: name={{ item }} with_items: - apt-transport-https - ca-certificates - python-virtualenv - python-pip - name: Install prereqs from pip become: yes pip: name={{ item }} with_items: - docker-py - name: Install apt key for Docker become: yes apt_key: id=58118E89F3A912897C070ADBF76221572C52609D keyserver=hkp://p80.pool.sks-keyservers.net:80 - name: Install apt repository for Docker become: yes apt_repository: repo="deb https://apt.dockerproject.org/repo debian-jessie main" - name: Create docker group become: yes group: name=docker - name: Add users to docker group become: yes user: name={{ item }} groups=docker with_items: "{{ docker_users }}" - name: Install Docker Engine become: yes apt: name=docker-engine - name: Start up Docker become: yes service: name=docker enabled=yes state=started - name: Discover Docker networks become: yes command: docker network ls register: docker_nets changed_when: false - name: Create luinet network become: yes command: docker network create luinet when: docker_nets.stdout.find('luinet') == -1 - name: Launch ZooKeeper containers become: yes docker_container: name: zk{{ item }} image: jplock/zookeeper with_sequence: start=1 end={{ num_zk_servers }} - name: Get ZooKeeper container networks become: yes command: docker inspect --format={% raw %}'{{json .NetworkSettings.Networks}}'{% endraw %} zk{{ item }} register: zk_net with_sequence: start=1 end={{ num_zk_servers }} changed_when: false - name: Connect ZooKeeper containers to luinet network become: yes command: docker network connect luinet zk{{ item }} with_sequence: start=1 end={{ num_zk_servers }} when: (zk_net.results[item|int-1].stdout|from_json).luinet is not defined - name: Disconnect ZooKeeper containers from bridge network become: yes command: docker network disconnect bridge zk{{ item }} with_sequence: start=1 end={{ num_zk_servers }} when: (zk_net.results[item|int-1].stdout|from_json).bridge is defined - name: Get contents of /solr path in ZooKeeper become: yes command: docker exec -t zk1 bin/zkCli.sh get /solr register: zk1_solr changed_when: false - name: Create /solr path in ZooKeeper become: yes command: docker exec -t zk1 bin/zkCli.sh create /solr [] when: zk1_solr.stdout.find('Node does not exist') != -1 - name: Build the lui-solr image become: yes docker_image: name=lui-solr path={{ docker_image_path }} - name: Build ZooKeeper links for Solr containers set_fact: # zk_links: [] zk_solr: [] - set_fact: # zk_links: "{{ zk_links + ['zk'+item+':ZK'+item] }}" zk_solr: "{{ zk_solr + ['zk'+item+':2181'] }}" with_sequence: start=1 end={{ num_zk_servers }} - name: Launch Solr containers become: yes docker_container: name: solr{{ item }} image: lui-solr tty: yes published_ports: "{{ 8983+item|int-1 }}:8983" command: bash -c '/opt/solr/bin/solr start -f -z {{ zk_solr|join(",") }}/solr' with_sequence: start=1 end={{ num_solr_servers }} - name: Get Solr container networks become: yes command: docker inspect --format={% raw %}'{{json .NetworkSettings.Networks}}'{% endraw %} solr{{ item }} register: solr_net with_sequence: start=1 end={{ num_solr_servers }} changed_when: false - name: Connect Solr containers to luinet network become: yes command: docker network connect luinet solr{{ item }} with_sequence: start=1 end={{ num_solr_servers }} register: solr_luinet when: (solr_net.results[item|int-1].stdout|from_json).luinet is not defined - name: Disconnect Solr containers from bridge network become: yes command: docker network disconnect bridge solr{{ item }} with_sequence: start=1 end={{ num_solr_servers }} when: (solr_net.results[item|int-1].stdout|from_json).bridge is defined - name: Restart solr on network change become: yes command: docker restart solr{{ item }} with_sequence: start=1 end={{ num_solr_servers }} when: solr_luinet.results[item|int-1]|changed - name: Wait for ZooKeeper to see Solr become: yes command: docker exec -t zk1 bin/zkCli.sh get /solr/live_nodes register: solr_nodes until: solr_nodes.stdout.find('numChildren = {{ num_solr_servers }}') != -1 retries: 3 delay: 2 changed_when: false - name: Check lui collection become: yes command: docker exec -t zk1 bin/zkCli.sh ls /solr/collections register: lui_collection changed_when: false - name: Create lui collection become: yes command: docker exec -t solr1 bin/solr create -c lui -d /opt/solr/lui-solr -shards 2 -replicationFactor 2 when: (lui_collection.stdout_lines|last).find('lui') == -1