src.dualinventive.com/devops/ansible-dtap/external-roles/redis/tasks/main.yml

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