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: Launch ZooKeeper containers
61 image: jplock/zookeeper
62 with_sequence: start=1 end={{ num_zk_servers }}
64 - name: Get ZooKeeper container networks
66 command: docker inspect --format={% raw %}'{{json .NetworkSettings.Networks}}'{% endraw %} zk{{ item }}
68 with_sequence: start=1 end={{ num_zk_servers }}
71 - name: Connect ZooKeeper containers to luinet network
73 command: docker network connect luinet zk{{ item }}
74 with_sequence: start=1 end={{ num_zk_servers }}
75 when: (zk_net.results[item|int-1].stdout|from_json).luinet is not defined
77 - name: Disconnect ZooKeeper containers from bridge network
79 command: docker network disconnect bridge zk{{ item }}
80 with_sequence: start=1 end={{ num_zk_servers }}
81 when: (zk_net.results[item|int-1].stdout|from_json).bridge is defined
83 - name: Get contents of /solr path in ZooKeeper
85 command: docker exec -t zk1 bin/zkCli.sh get /solr
89 - name: Create /solr path in ZooKeeper
91 command: docker exec -t zk1 bin/zkCli.sh create /solr []
92 when: zk1_solr.stdout.find('Node does not exist') != -1
94 - name: Build the lui-solr image
96 docker_image: name=lui-solr path={{ docker_image_path }}
98 - name: Build ZooKeeper links for Solr containers
104 # zk_links: "{{ zk_links + ['zk'+item+':ZK'+item] }}"
105 zk_solr: "{{ zk_solr + ['zk'+item+':2181'] }}"
106 with_sequence: start=1 end={{ num_zk_servers }}
108 - name: Launch Solr containers
114 published_ports: "{{ 8983+item|int-1 }}:8983"
115 command: bash -c '/opt/solr/bin/solr start -f -z {{ zk_solr|join(",") }}/solr'
116 with_sequence: start=1 end={{ num_solr_servers }}
118 - name: Get Solr container networks
120 command: docker inspect --format={% raw %}'{{json .NetworkSettings.Networks}}'{% endraw %} solr{{ item }}
122 with_sequence: start=1 end={{ num_solr_servers }}
125 - name: Connect Solr containers to luinet network
127 command: docker network connect luinet solr{{ item }}
128 with_sequence: start=1 end={{ num_solr_servers }}
129 register: solr_luinet
130 when: (solr_net.results[item|int-1].stdout|from_json).luinet is not defined
132 - name: Disconnect Solr containers from bridge network
134 command: docker network disconnect bridge solr{{ item }}
135 with_sequence: start=1 end={{ num_solr_servers }}
136 when: (solr_net.results[item|int-1].stdout|from_json).bridge is defined
138 - name: Restart solr on network change
140 command: docker restart solr{{ item }}
141 with_sequence: start=1 end={{ num_solr_servers }}
142 when: solr_luinet.results[item|int-1]|changed
144 - name: Wait for ZooKeeper to see Solr
146 command: docker exec -t zk1 bin/zkCli.sh get /solr/live_nodes
148 until: solr_nodes.stdout.find('numChildren = {{ num_solr_servers }}') != -1
153 - name: Check lui collection
155 command: docker exec -t zk1 bin/zkCli.sh ls /solr/collections
156 register: lui_collection
159 - name: Create lui collection
161 command: docker exec -t solr1 bin/solr create -c lui -d /opt/solr/lui-solr -shards 2 -replicationFactor 2
162 when: (lui_collection.stdout_lines|last).find('lui') == -1