Generalize Docker deployment playbook.
[lui-solr.git] / docker / docker-deploy.yml
1 ---
2 # deploy a Docker server with Zookeeper, Solr, HAProxy
3 - hosts: all
4
5   tasks:
6     - name: Install prereqs from apt
7       become: yes
8       apt: name={{ item }}
9       with_items:
10         - apt-transport-https
11         - ca-certificates
12         - python-virtualenv
13         - python-pip
14
15     - name: Install prereqs from pip
16       become: yes
17       pip: name={{ item }}
18       with_items:
19         - docker-py
20
21     - name: Install apt key for Docker
22       become: yes
23       apt_key: id=58118E89F3A912897C070ADBF76221572C52609D keyserver=hkp://p80.pool.sks-keyservers.net:80
24
25     - name: Install apt repository for Docker
26       become: yes
27       apt_repository: repo="deb https://apt.dockerproject.org/repo debian-jessie main"
28
29     - name: Create docker group
30       become: yes
31       group: name=docker
32
33     - name: Add users to docker group
34       become: yes
35       user: name={{ item }} groups=docker
36       with_items: "{{ docker_users }}"
37
38     - name: Install Docker Engine
39       become: yes
40       apt: name=docker-engine
41
42     - name: Start up Docker
43       become: yes
44       service: name=docker enabled=yes state=started
45
46     - name: Build ZooKeeper links for Solr containers
47       set_fact:
48         zk_links: []
49         zk_solr: []
50
51     - set_fact:
52         zk_links: "{{ zk_links + ['zk'+item+':ZK'+item] }}"
53         zk_solr: "{{ zk_solr + ['$ZK'+item+'_PORT_2181_TCP_ADDR:$ZK'+item+'_PORT_2181_TCP_PORT/solr'] }}"
54       with_sequence: start=1 end={{ num_zk_servers }}
55       
56     - name: Launch ZooKeeper containers
57       become: yes
58       docker_container:
59         name: zk{{ item }}
60         image: jplock/zookeeper
61       with_sequence: start=1 end={{ num_zk_servers }}
62
63     - name: Get contents of /solr path in ZooKeeper
64       become: yes
65       command: docker exec -t zk1 bin/zkCli.sh get /solr
66       register: zk1_solr
67       changed_when: false
68
69     - name: Create /solr path in ZooKeeper
70       become: yes
71       command: docker exec -t zk1 bin/zkCli.sh create /solr []
72       when: zk1_solr.stdout.find('Node does not exist') != -1
73
74     - name: Build the lui-solr image
75       become: yes
76       docker_image: name=lui-solr path={{ docker_image_path }}
77
78     - name: Launch Solr containers
79       become: yes
80       docker_container:
81         name: solr{{ item }}
82         image: lui-solr
83         tty: yes
84         published_ports: "{{ 8983+item|int-1 }}:8983"
85         links: "{{ zk_links }}"
86         command: bash -c '/opt/solr/bin/solr start -f -z {{ zk_solr|join(",") }}'
87       with_sequence: start=1 end={{ num_solr_servers }}
88
89     - name: Wait for ZooKeeper to see Solr
90       become: yes
91       command: docker exec -t zk1 bin/zkCli.sh get /solr/live_nodes
92       register: solr_nodes
93       until: solr_nodes.stdout.find('numChildren = {{ num_solr_servers }}') != -1
94       retries: 3
95       delay: 2
96       changed_when: false
97
98     - name: Check lui collection
99       become: yes
100       command: docker exec -t zk1 bin/zkCli.sh ls /solr/collections
101       register: lui_collection
102       changed_when: false
103
104     - name: Create lui collection
105       become: yes
106       command: docker exec -t solr1 bin/solr create -c lui -d /opt/solr/lui-solr -shards 2 -replicationFactor 2
107       when: (lui_collection.stdout_lines|last).find('lui') == -1