2 # deploy a Docker server with Zookeeper, Solr, HAProxy
6 - name: Install prereqs from apt
15 - name: Install prereqs from pip
21 - name: Install apt key for Docker
23 apt_key: id=58118E89F3A912897C070ADBF76221572C52609D keyserver=hkp://p80.pool.sks-keyservers.net:80
25 - name: Install apt repository for Docker
27 apt_repository: repo="deb https://apt.dockerproject.org/repo debian-jessie main"
29 - name: Create docker group
33 - name: Add users to docker group
35 user: name={{ item }} groups=docker
36 with_items: "{{ docker_users }}"
38 - name: Install Docker Engine
40 apt: name=docker-engine
42 - name: Start up Docker
44 service: name=docker enabled=yes state=started
46 - name: Discover Docker networks
48 command: docker network ls
52 - name: Create luinet network
54 command: docker network create luinet
55 when: docker_nets.stdout.find('luinet') == -1
57 - name: Copy ZooKeeper config if not present
59 copy: src=zookeeper dest=/etc/masterkey/lui/ force=no
61 - name: Create ZooKeeper dataDirs
63 file: path=/var/lib/masterkey/lui/zookeeper/zk{{ item }} state=directory
64 with_sequence: start=1 end={{ num_zk_servers }}
66 - name: Launch ZooKeeper containers
70 image: jplock/zookeeper
72 - /etc/masterkey/lui/zookeeper:/opt/zookeeper/conf
73 - /var/lib/masterkey/lui/zookeeper/zk{{ item }}:/tmp/zookeeper
74 with_sequence: start=1 end={{ num_zk_servers }}
76 - name: Get ZooKeeper container networks
78 command: docker inspect --format={% raw %}'{{json .NetworkSettings.Networks}}'{% endraw %} zk{{ item }}
80 with_sequence: start=1 end={{ num_zk_servers }}
83 - name: Connect ZooKeeper containers to luinet network
85 command: docker network connect luinet zk{{ item }}
86 with_sequence: start=1 end={{ num_zk_servers }}
87 when: (zk_net.results[item|int-1].stdout|from_json).luinet is not defined
89 - name: Disconnect ZooKeeper containers from bridge network
91 command: docker network disconnect bridge zk{{ item }}
92 with_sequence: start=1 end={{ num_zk_servers }}
93 when: (zk_net.results[item|int-1].stdout|from_json).bridge is defined
95 - name: Create ZooKeeper myid files
97 copy: content={{ item }} dest=/var/lib/masterkey/lui/zookeeper/zk{{ item }}/myid
98 with_sequence: start=1 end={{ num_zk_servers }}
99 when: num_zk_servers > 1
101 # Note - this will not remove servers from config
102 - name: Update zoo.cfg for ensemble
104 lineinfile: dest=/etc/masterkey/lui/zookeeper/zoo.cfg line="server.{{ item }}=zk{{ item }}:2888:3888"
106 with_sequence: start=1 end={{ num_zk_servers }}
107 when: num_zk_servers > 1
109 - name: Restart ZooKeeper
111 command: docker restart zk{{ item }}
112 with_sequence: start=1 end={{ num_zk_servers }}
113 when: zk_conf|changed
115 - name: Get contents of /solr path in ZooKeeper
117 command: docker exec -t zk1 bin/zkCli.sh get /solr
121 - name: Create /solr path in ZooKeeper
123 command: docker exec -t zk1 bin/zkCli.sh create /solr []
124 when: zk1_solr.stdout.find('Node does not exist') != -1
126 - name: Build the lui-solr image
128 docker_image: name=lui-solr path={{ solr_image_path }}
130 - name: Build -z string for Solr
132 zk_solr: "{{ zk_solr|default([]) + ['zk'+item+':2181'] }}"
133 with_sequence: start=1 end={{ num_zk_servers }}
135 - name: Launch Solr containers
141 published_ports: "{{ 8983+item|int-1 }}:8983"
142 command: bash -c '/opt/solr/bin/solr start -f -z {{ zk_solr|join(",") }}/solr'
143 with_sequence: start=1 end={{ num_solr_servers }}
145 - name: Get Solr container networks
147 command: docker inspect --format={% raw %}'{{json .NetworkSettings.Networks}}'{% endraw %} solr{{ item }}
149 with_sequence: start=1 end={{ num_solr_servers }}
152 - name: Connect Solr containers to luinet network
154 command: docker network connect luinet solr{{ item }}
155 with_sequence: start=1 end={{ num_solr_servers }}
156 register: solr_luinet
157 when: (solr_net.results[item|int-1].stdout|from_json).luinet is not defined
159 - name: Disconnect Solr containers from bridge network
161 command: docker network disconnect bridge solr{{ item }}
162 with_sequence: start=1 end={{ num_solr_servers }}
163 when: (solr_net.results[item|int-1].stdout|from_json).bridge is defined
165 - name: Restart solr on network change
167 command: docker restart solr{{ item }}
168 with_sequence: start=1 end={{ num_solr_servers }}
169 when: solr_luinet.results[item|int-1]|changed
171 - name: Wait for ZooKeeper to see Solr
173 command: docker exec -t zk1 bin/zkCli.sh get /solr/live_nodes
175 until: solr_nodes.stdout.find('numChildren = {{ num_solr_servers }}') != -1
180 - name: Check lui collection
182 command: docker exec -t zk1 bin/zkCli.sh ls /solr/collections
183 register: lui_collection
186 - name: Create lui collection
188 command: docker exec -t solr1 bin/solr create -c lui -d /opt/solr/lui-solr -shards 2 -replicationFactor 2
189 when: (lui_collection.stdout_lines|last).find('lui') == -1