153 lines
4.0 KiB
YAML
153 lines
4.0 KiB
YAML
---
|
|
|
|
- name: Add needed groups
|
|
group:
|
|
name: "{{ item.user }}"
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Add cluster users
|
|
user:
|
|
name: "{{ item.user }}"
|
|
shell: /bin/false
|
|
state: present
|
|
createhome: no
|
|
system: yes
|
|
group: "{{ item.user }}"
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Install redis-server and dependencies
|
|
apt:
|
|
name: "{{ item }}"
|
|
update_cache: yes
|
|
cache_valid_time: 3600
|
|
default_release: jessie-backports
|
|
with_items:
|
|
- "redis-server"
|
|
- "ruby-redis"
|
|
|
|
- name: Add redis-trib script patched with redis auth support
|
|
template:
|
|
src: "redis-trib.rb.j2"
|
|
dest: "/usr/local/bin/redis-trib.rb"
|
|
owner: root
|
|
group: root
|
|
mode: "0755"
|
|
|
|
- name: Ensure default redis daemon is stopped and masked
|
|
systemd:
|
|
name: "redis-server"
|
|
state: "stopped"
|
|
masked: yes
|
|
|
|
- name: Ensure redis data dirs exist
|
|
file:
|
|
path: "{{ redis_dir }}/{{ item.name }}"
|
|
state: directory
|
|
owner: "{{ item.user }}"
|
|
group: "{{ item.user }}"
|
|
mode: "0750"
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Set redis base logdir permissions
|
|
file:
|
|
path: "/var/log/redis"
|
|
owner: redis
|
|
group: redis
|
|
mode: "0755"
|
|
state: directory
|
|
|
|
- name: Create redis logdirs for all redis instances
|
|
file:
|
|
path: "/var/log/redis/{{ item.name }}"
|
|
owner: "{{ item.user }}"
|
|
group: "{{ item.user }}"
|
|
mode: "0750"
|
|
state: directory
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Set redis data dir permissions
|
|
file:
|
|
path: "/var/lib/redis"
|
|
owner: redis
|
|
group: redis
|
|
mode: "0751"
|
|
state: directory
|
|
|
|
- name: Template redis config
|
|
template:
|
|
src: "redis.conf.j2"
|
|
dest: "/etc/redis/{{ item.name }}.conf"
|
|
owner: root
|
|
group: "{{ item.user }}"
|
|
mode: "0640"
|
|
register: redis_config_template
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Template redis unit files
|
|
template:
|
|
src: "redis-server.service.j2"
|
|
dest: "/lib/systemd/system/redis_{{ item.name }}.service"
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
register: redis_unit_file_template
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Enable redis unit files
|
|
systemd:
|
|
name: "redis_{{ item.name }}.service"
|
|
enabled: yes
|
|
daemon_reload: yes
|
|
register: redis_unit_file_enable
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Determine Redis instances that require a restart
|
|
set_fact:
|
|
redis_restart_instances: "{{ redis_restart_instances | default([]) + [item.item.name] }}"
|
|
with_items:
|
|
- "{{ redis_config_template.results }}"
|
|
- "{{ redis_unit_file_template.results }}"
|
|
- "{{ redis_unit_file_enable.results }}"
|
|
when: item|changed and not item.item.name in redis_restart_instances|default([])
|
|
|
|
# We don't use a handler here because we need use a cluster and redis running in cluster mode before we continue
|
|
# If we use a handler instead it'll restart at the end, which is too late for the cluster commands.
|
|
- name: Restart Redis
|
|
service:
|
|
name: "redis_{{ item }}.service"
|
|
state: restarted
|
|
enabled: yes
|
|
with_items:
|
|
- "{{ redis_restart_instances | default([]) }}"
|
|
|
|
- name: Check if Redis cluster has been initialized
|
|
command: "/usr/bin/redis-cli -p {{ item.port }} CLUSTER INFO"
|
|
run_once: yes
|
|
register: redis_cluster_nodes_status
|
|
changed_when: False
|
|
with_items:
|
|
- "{{ redis_configs | default([]) }}"
|
|
|
|
- name: Create Redis cluster
|
|
shell: "echo yes | /usr/local/bin/redis-trib.rb create --replicas 1 {{ redis_servers | join(':' + item.item.port + ' ') }}:{{ item.item.port }} {{ redis_servers | join(':' + item.item.slave_port + ' ') }}:{{ item.item.slave_port }}"
|
|
run_once: yes
|
|
with_items:
|
|
- "{{ redis_cluster_nodes_status.results }}"
|
|
when:
|
|
- redis_cluster_nodes_status is defined
|
|
- redis_cluster_nodes_status.results is defined
|
|
- item.item is defined
|
|
- item.item.port is defined
|
|
- item.item.type is defined
|
|
- item.item.type == 'master'
|
|
- item.stdout is defined
|
|
- item.stdout.find('cluster_size:0') != -1
|
|
|