X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=docker%2Fdocker-deploy.yml;h=dc58055147870c2b37a146b4fd22bc4c8f2fa1b0;hb=refs%2Fheads%2Fha;hp=ca0d4ab3590b151877c4818a0c926dcbdf32517d;hpb=664635ceab85dcb4b9624bcce816a3da51e00b26;p=lui-solr.git diff --git a/docker/docker-deploy.yml b/docker/docker-deploy.yml index ca0d4ab..dc58055 100644 --- a/docker/docker-deploy.yml +++ b/docker/docker-deploy.yml @@ -1,5 +1,5 @@ --- -# deploy a Docker server with 1 Zookeeper, 3 Solr, 1 HAProxy +# deploy a Docker server with Zookeeper, Solr, HAProxy - hosts: all tasks: @@ -43,65 +43,147 @@ become: yes service: name=docker enabled=yes state=started - - name: Launch ZooKeeper + - name: Discover Docker networks become: yes - docker_container: name=zk1 image=jplock/zookeeper + 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: Copy ZooKeeper config if not present + become: yes + copy: src=zookeeper dest=/etc/masterkey/lui/ force=no + + - name: Create ZooKeeper dataDirs + become: yes + file: path=/var/lib/masterkey/lui/zookeeper/zk{{ item }} state=directory + with_sequence: start=1 end={{ num_zk_servers }} + + - name: Launch ZooKeeper containers + become: yes + docker_container: + name: zk{{ item }} + image: jplock/zookeeper + volumes: + - /etc/masterkey/lui/zookeeper:/opt/zookeeper/conf + - /var/lib/masterkey/lui/zookeeper/zk{{ item }}:/tmp/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: Create ZooKeeper myid files + become: yes + copy: content={{ item }} dest=/var/lib/masterkey/lui/zookeeper/zk{{ item }}/myid + with_sequence: start=1 end={{ num_zk_servers }} + when: num_zk_servers > 1 + + # Note - this will not remove servers from config + - name: Update zoo.cfg for ensemble + become: yes + lineinfile: dest=/etc/masterkey/lui/zookeeper/zoo.cfg line="server.{{ item }}=zk{{ item }}:2888:3888" + register: zk_conf + with_sequence: start=1 end={{ num_zk_servers }} + when: num_zk_servers > 1 + + - name: Restart ZooKeeper + become: yes + command: docker restart zk{{ item }} + with_sequence: start=1 end={{ num_zk_servers }} + when: zk_conf|changed + - 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 -# Separate paths for setting up Solr nodes - -- hosts: dev - roles: - - dev - -- hosts: prod - roles: - - prod + - name: Build the lui-solr image + become: yes + docker_image: name=lui-solr path={{ solr_image_path }} -# Back to everyone + - name: Build -z string for Solr + set_fact: + zk_solr: "{{ zk_solr|default([]) + ['zk'+item+':2181'] }}" + with_sequence: start=1 end={{ num_zk_servers }} -- hosts: all - tasks: - - name: Launch Solr1 + - name: Launch Solr containers become: yes docker_container: - name: solr1 + name: solr{{ item }} image: lui-solr tty: yes - published_ports: 8983:8983 - links: zk1:ZK1 - command: bash -c '/opt/solr/bin/solr start -f -z $ZK1_PORT_2181_TCP_ADDR:$ZK1_PORT_2181_TCP_PORT/solr' + 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: Launch Solr2 + - name: Get Solr container networks become: yes - docker_container: - name: solr2 - image: lui-solr - tty: yes - published_ports: 8984:8983 - links: zk1:ZK1 - command: bash -c '/opt/solr/bin/solr start -f -z $ZK1_PORT_2181_TCP_ADDR:$ZK1_PORT_2181_TCP_PORT/solr' + 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 - ### HERE I AM ### - # wait for ZooKeeper to see all the solr nodes before proceeding - # look at Ansible until module + - 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 + 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 -