
---

- name: (redis-server.yml) Set var '_redis_conf'
  set_fact:
     _redis_conf: "{{ '/etc/redis.conf' if ansible_facts['distribution'] == 'CentOS' else '/etc/redis/redis.conf' }}"

- name: (redis-server.yml) update
  apt:
    update_cache: true
    cache_valid_time: "{{ 0 if apt_config_updated is defined and apt_config_updated.changed else apt_update_cache_valid_time }}"
  when:
    - ansible_facts['distribution'] == "Debian"
    - apt_update|bool
  tags:
    - redis-server

- name: (redis-server.yml) Configure any half-installed packages 'dpkg --configure -a'
  ansible.builtin.command: dpkg --configure -a
  register: _dpkg_configure
  changed_when: (_dpkg_configure.stdout | default('')) | length > 0
  failed_when: _dpkg_configure.rc != 0
  when:
    - ansible_facts['distribution'] == "Debian"
    - apt_dpkg_configure|bool
  tags:
    - redis-server


- name: (redis-server.yml) upgrade
  apt:
    upgrade: "{{ apt_upgrade_type }}"
    update_cache: true
    dpkg_options: "{{ apt_upgrade_dpkg_options | join(',') }}"
  when:
    - ansible_facts['distribution'] == "Debian"
    - apt_upgrade|bool
  tags:
    - redis-server


- name: (redis-server.yml) Install redis-server packages (debian system)
  apt:
    name: redis-server
    state: present
  when:
    - ansible_facts['distribution'] == "Debian"
  tags:
    - redis-server

- name: (redis-server.yml) Install redis packages (centos / fedora system)
  yum:
    name: redis
    state: latest
    update_cache: yes
  when:
    - ansible_facts["os_family"] == "RedHat"
    - ansible_distribution == "CentOS" or ansible_distribution == "Fedora"
  tags:
    - redis-server

- name: (redis-server.yml) Determine available users
  getent:
    database: passwd
  tags:
    - redis-server

- name: (redis-server.yml) Determine available groups
  getent:
    database: group
  tags:
    - redis-server

- name: (redis-server.yml) Add user 'www-data' to group 'redis'
  user:
    name: www-data
    groups: redis
    append: yes
  when:
    - "'www-data' in my_users"
    - "'redis' in my_groups"
  vars:
     my_users: "{{ ansible_facts.getent_passwd.keys()|list }}"
     my_groups: "{{ ansible_facts.getent_group.keys()|list }}"
  tags:
    - redis-server

- name: (redis-server.yml) Add user 'webadmin' to group 'redis'
  user:
    name: webadmin
    groups: redis
    append: yes
  when:
    - "'webadmin' in my_users"
    - "'redis' in my_groups"
  vars:
     my_users: "{{ ansible_facts.getent_passwd.keys()|list }}"
     my_groups: "{{ ansible_facts.getent_group.keys()|list }}"
  tags:
    - redis-server

- name: (redis-server.yml)  Check if redis configuration file exists
  stat:
    path: "{{ _redis_conf }}.ORIG"
  register: redis_conf_exists
  tags:
    - redis-server

- name: (redis-server.yml) Backup existing redis configuration file.
  command: cp -a  "{{ _redis_conf }}" "{{ _redis_conf }}".ORIG
  when:
    - redis_conf_exists.stat.exists == False
  tags:
    - redis-server

- name: (redis-server.yml) adjust redis configuration 
  lineinfile:
    dest: "{{ _redis_conf }}"
    regexp: "{{ item.regexp }}"
    insertafter: "{{ item.insertafter }}"
    line: "{{ item.key }} {{ item.val }}"
    state: present
  loop:
      - { regexp: '^bind\s+', key: 'bind', val: '127.0.0.1 ::1', insertafter: '^#\s*bind\s+' }
      - { regexp: '^port\s+', key: 'port', val: '6379', insertafter: '^#\s*port\s+' }
      - { regexp: '^unixsocket\s+', key: 'unixsocket', val: '/run/redis/redis-server.sock', insertafter: '^#\s*unixsocketperm' }
      - { regexp: '^unixsocketperm', key: 'unixsocketperm', val: '770', insertafter: '^unixsocket\s+' }
      - { regexp: '^logfile', key: 'logfile',  val: '/var/log/redis/redis-server.log', insertafter: '^#\s+logfile\s+' }
  notify: "Restart redis-server"
  tags:
    - redis-server
