From 8546f0f34f697ae1217f9f01c9ff16cba64dd3c1 Mon Sep 17 00:00:00 2001 From: Victor LABORIE Date: Wed, 19 Sep 2018 17:24:26 +0200 Subject: [PATCH] redis: add support for multi instances --- CHANGELOG.md | 1 + redis/defaults/main.yml | 1 + redis/files/redis-server@.service | 18 ++++++++ redis/handlers/main.yml | 2 +- redis/tasks/instances.yml | 74 +++++++++++++++++++++++++++++++ redis/tasks/main.yml | 7 ++- redis/templates/redis.conf.j2 | 2 +- 7 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 redis/files/redis-server@.service create mode 100644 redis/tasks/instances.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index ae6248d6..54ac7ed5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ The **patch** part changes incrementally at each release. * mysql: add a variable to prevent mysql from restarting * networkd-to-ifconfig: add a role to switch from networkd to ifconfig * webapps/evoadmin-web: add users to /etc/aliases +* redis: add support for multi instances ### Changed * dovecot: stronger TLS configuration diff --git a/redis/defaults/main.yml b/redis/defaults/main.yml index 46aaf555..363fb0de 100644 --- a/redis/defaults/main.yml +++ b/redis/defaults/main.yml @@ -5,6 +5,7 @@ redis_conf_path: /etc/redis/redis.conf redis_port: 6379 redis_bind_interface: 127.0.0.1 redis_unixsocket: '/var/run/redis/redis.sock' +redis_pidfile: "/var/run/redis/{{ redis_daemon }}.pid" redis_timeout: 300 redis_password: NULL diff --git a/redis/files/redis-server@.service b/redis/files/redis-server@.service new file mode 100644 index 00000000..203f4b74 --- /dev/null +++ b/redis/files/redis-server@.service @@ -0,0 +1,18 @@ +[Unit] +Description=Advanced key-value store +After=network.target + +[Service] +ExecStartPre=/bin/mkdir -m 0755 -p /run/redis/%i +ExecStartPre=/bin/chown redis-%i: /run/redis/%i +PermissionsStartOnly=yes + +Type=forking +ExecStart=/usr/bin/redis-server /etc/redis/redis-%i.conf --unixsocket /run/redis/%i/redis.sock --pidfile /run/redis/%i/redis-server.pid +ExecStop=/usr/bin/redis-cli -s /run/redis/%i/redis.sock shutdown +Restart=always +User=redis-%i +Group=redis-%i + +[Install] +WantedBy=multi-user.target diff --git a/redis/handlers/main.yml b/redis/handlers/main.yml index 49b906a1..ed452e65 100644 --- a/redis/handlers/main.yml +++ b/redis/handlers/main.yml @@ -1,6 +1,6 @@ --- - name: restart redis - service: + systemd: name: "{{ redis_daemon }}" state: restarted diff --git a/redis/tasks/instances.yml b/redis/tasks/instances.yml new file mode 100644 index 00000000..e5ec8875 --- /dev/null +++ b/redis/tasks/instances.yml @@ -0,0 +1,74 @@ +--- +- name: Deploy systemd templates for redis instances + copy: + src: 'redis-server@.service' + dest: '/etc/systemd/system/' + mode: "0644" + tags: + - redis + +- name: Disable standard redis service + service: + name: "redis-server" + enabled: no + state: stopped + tags: + - redis + +- set_fact: + redis_daemon: "redis-server@{{ redis_instance_name }}" + redis_conf_path: "/etc/redis/redis-{{ redis_instance_name }}.conf" + redis_unixsocket: "/var/run/redis/{{ redis_instance_name }}/redis.sock" + redis_pidfile: "/var/run/redis/{{ redis_instance_name }}/{{ redis_daemon }}.pid" + redis_logfile: "/var/log/redis/{{ redis_instance_name }}/redis-server.log" + redis_dbdir: "/var/lib/redis/{{ redis_instance_name }}" + tags: + - redis + +- name: Configure redis instance. + template: + src: redis.conf.j2 + dest: "{{ redis_conf_path }}" + mode: "0644" + tags: + - redis + +- name: Create redis instance group + group: + name: "redis-{{ redis_instance_name }}" + state: present + system: True + tags: + - redis + +- name: Create redis instance user + user: + name: "redis-{{ redis_instance_name }}" + group: "redis-{{ redis_instance_name }}" + state: present + system: True + shell: '/bin/falase' + tags: + - redis + +- name: Create needed dir + file: + dest: "{{ item }}" + state: directory + mode: "0755" + owner: "redis-{{ redis_instance_name }}" + group: "redis-{{ redis_instance_name }}" + with_items: + - "{{ redis_dbdir }}" + - "{{ redis_logfile | dirname }}" + tags: + - redis + +- name: Redis instance is running and enabled on boot. + systemd: + name: "{{ redis_daemon }}" + enabled: yes + state: started + daemon_reload: yes + tags: + - redis diff --git a/redis/tasks/main.yml b/redis/tasks/main.yml index 8b196ed8..c2d57d62 100644 --- a/redis/tasks/main.yml +++ b/redis/tasks/main.yml @@ -24,20 +24,25 @@ tags: - redis +- include: instances.yml + when: redis_instance_name is defined + - name: Redis is configured. template: src: redis.conf.j2 dest: "{{ redis_conf_path }}" mode: "0644" notify: restart redis + when: redis_instance_name is not defined tags: - redis - name: Redis is running and enabled on boot. - service: + systemd: name: "{{ redis_daemon }}" enabled: yes state: started + when: redis_instance_name is not defined tags: - redis diff --git a/redis/templates/redis.conf.j2 b/redis/templates/redis.conf.j2 index fc529903..d2e558cc 100644 --- a/redis/templates/redis.conf.j2 +++ b/redis/templates/redis.conf.j2 @@ -1,5 +1,5 @@ daemonize yes -pidfile /var/run/redis/{{ redis_daemon }}.pid +pidfile {{ redis_pidfile }} port {{ redis_port }} bind {{ redis_bind_interface }}