From d0111f9a4fa71d29aea2e7ce4624075408f6da06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Lecour?= Date: Thu, 5 Sep 2019 06:44:38 +0200 Subject: [PATCH] WIP: separate Redis instances from default server --- redis/README.md | 6 +- redis/defaults/main.yml | 19 +++-- redis/files/redis-server@.service | 8 +- redis/handlers/main.yml | 2 +- redis/tasks/{munin.yml => default-munin.yml} | 0 redis/tasks/default-server.yml | 18 ++++ ...munin-instances.yml => instance-munin.yml} | 0 .../{instances.yml => instance-server.yml} | 83 ++++++++----------- redis/tasks/main.yml | 40 +++------ redis/templates/redis.conf.j2 | 12 +-- 10 files changed, 89 insertions(+), 99 deletions(-) rename redis/tasks/{munin.yml => default-munin.yml} (100%) create mode 100644 redis/tasks/default-server.yml rename redis/tasks/{munin-instances.yml => instance-munin.yml} (100%) rename redis/tasks/{instances.yml => instance-server.yml} (59%) diff --git a/redis/README.md b/redis/README.md index 5a7168b7..58deac0f 100644 --- a/redis/README.md +++ b/redis/README.md @@ -13,12 +13,12 @@ Everything is in the `tasks/main.yml` file. Main variables are : * `redis_daemon`: name of the process ; -* `redis_conf_path`: config file location ; +* `redis_conf_dir`: config directory ; * `redis_port`: listening TCP port ; * `redis_bind_interface`: listening IP address ; * `redis_password`: password for redis. Empty means no password ; -* `redis_unixsocket`: Unix socket ; +* `redis_socket_dir`: Unix socket directory ; * `redis_loglevel`: log verbosity ; -* `redis_logfile`: log file location. +* `redis_log_dir`: log file directory. The full list of variables (with default values) can be found in `defaults/main.yml`. diff --git a/redis/defaults/main.yml b/redis/defaults/main.yml index f9f2dfa2..7ed4b8b6 100644 --- a/redis/defaults/main.yml +++ b/redis/defaults/main.yml @@ -1,12 +1,13 @@ --- -redis_daemon: redis-server -redis_conf_path: /etc/redis/redis.conf +redis_systemd_name: redis-server + +redis_conf_dir: /etc/redis redis_port: 6379 redis_bind_interface: 127.0.0.1 -redis_unixsocket: '/var/run/redis/redis.sock' -redis_unixsocketperm: 770 -redis_pidfile: "/var/run/redis/{{ redis_daemon }}.pid" +redis_socket_dir: '/var/run/redis' +redis_socket_perms: 770 +redis_pid_dir: "/var/run/redis" redis_timeout: 300 # for client authorization @@ -15,7 +16,7 @@ redis_password: NULL redis_password_master: "{{ redis_password }}" redis_loglevel: "notice" -redis_logfile: /var/log/redis/redis-server.log +redis_log_dir: /var/log/redis redis_databases: 16 @@ -26,8 +27,8 @@ redis_save: - 60 10000 redis_rdbcompression: "yes" -redis_dbfilename: dump.rdb -redis_dbdir: /var/lib/redis +redis_data_dir: /var/lib/redis +redis_data_file: dump.rdb redis_maxclients: 128 @@ -50,3 +51,5 @@ redis_restart_force: False redis_disabled_commands: [] redis_sentinel_install: False + +redis_default_server_disabled: True diff --git a/redis/files/redis-server@.service b/redis/files/redis-server@.service index d8f8f5f4..02fa1f56 100644 --- a/redis/files/redis-server@.service +++ b/redis/files/redis-server@.service @@ -3,13 +3,13 @@ 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 +ExecStartPre=/bin/mkdir -m 0755 -p /var/run/redis-%i +ExecStartPre=/bin/chown redis-%i: /var/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 +ExecStart=/usr/bin/redis-server /etc/redis-%i/redis.conf --unixsocket /var/run/redis-%i/redis.sock --pidfile /var/run/redis-%i/redis-server.pid +ExecStop=/usr/bin/redis-cli -s /var/run/redis-%i/redis.sock shutdown Restart=always User=redis-%i Group=redis-%i diff --git a/redis/handlers/main.yml b/redis/handlers/main.yml index c7f66ffb..ba071756 100644 --- a/redis/handlers/main.yml +++ b/redis/handlers/main.yml @@ -1,7 +1,7 @@ --- - name: restart redis systemd: - name: "{{ redis_daemon }}" + name: "{{ redis_systemd_name }}" state: restarted - name: restart redis (noop) diff --git a/redis/tasks/munin.yml b/redis/tasks/default-munin.yml similarity index 100% rename from redis/tasks/munin.yml rename to redis/tasks/default-munin.yml diff --git a/redis/tasks/default-server.yml b/redis/tasks/default-server.yml new file mode 100644 index 00000000..de32e9de --- /dev/null +++ b/redis/tasks/default-server.yml @@ -0,0 +1,18 @@ +--- + +- name: Redis is configured. + template: + src: redis.conf.j2 + dest: "{{ redis_conf_dir }}" + mode: "0644" + notify: "{{ redis_restart_handler_name }}" + tags: + - redis + +- name: Redis is running and enabled on boot. + systemd: + name: "{{ redis_systemd_name }}" + enabled: yes + state: started + tags: + - redis diff --git a/redis/tasks/munin-instances.yml b/redis/tasks/instance-munin.yml similarity index 100% rename from redis/tasks/munin-instances.yml rename to redis/tasks/instance-munin.yml diff --git a/redis/tasks/instances.yml b/redis/tasks/instance-server.yml similarity index 59% rename from redis/tasks/instances.yml rename to redis/tasks/instance-server.yml index fabe6118..555598f4 100644 --- a/redis/tasks/instances.yml +++ b/redis/tasks/instance-server.yml @@ -1,40 +1,5 @@ --- -# - name: "Set variables for the instance '{{ redis_instance_name }}'" -# 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: Systemd template for redis instances is installed - copy: - src: 'redis-server@.service' - dest: '/etc/systemd/system/' - mode: "0644" - tags: - - redis - -- name: Redis SysVinit script is stopped and disabled - service: - name: "redis-server" - enabled: no - state: stopped - tags: - - redis - -- name: "Redis instance '{{ redis_instance_name }}' configuration file is present" - template: - src: redis.conf.j2 - dest: "{{ redis_conf_path }}" - mode: "0644" - tags: - - redis - - name: "Redis instance '{{ redis_instance_name }}' group is present" group: name: "redis-{{ redis_instance_name }}" @@ -53,35 +18,53 @@ tags: - redis -- name: "Ensure redis base folders will be accessible for all instances" - file: - dest: "{{ item }}" - state: directory - mode: "0755" - owner: "redis" - group: "redis" - with_items: - - "/var/lib/redis" - - "/var/log/redis" - - name: "Instances '{{ redis_instance_name }}' directories are present" file: dest: "{{ item }}" - state: directory mode: "0755" owner: "redis-{{ redis_instance_name }}" group: "redis-{{ redis_instance_name }}" + follow: yes + state: directory with_items: - - "{{ redis_dbdir }}" - - "{{ redis_logfile | dirname }}" + - "{{ redis_conf_dir }}" + - "{{ redis_pid_dir }}" + - "{{ redis_socket_dir }}" + - "{{ redis_data_dir }}" + - "{{ redis_log_dir }}" + tags: + - redis + +- name: "Redis instance '{{ redis_instance_name }}' configuration file is present" + template: + src: redis.conf.j2 + dest: "{{ redis_conf_dir }}/redis.conf" + mode: "0644" + tags: + - redis + +- name: Systemd template for redis instances is installed + copy: + src: 'redis-server@.service' + dest: '/etc/systemd/system/' + mode: "0644" tags: - redis - name: "Redis '{{ redis_instance_name }}' systemd unit is enabled and started" systemd: - name: "{{ redis_daemon }}" + name: "{{ redis_systemd_name }}" enabled: yes state: started daemon_reload: yes tags: - redis + +- name: Redis SysVinit script is stopped and disabled + service: + name: "redis-server" + enabled: no + state: stopped + when: redis_default_server_disabled + tags: + - redis diff --git a/redis/tasks/main.yml b/redis/tasks/main.yml index c34ed586..285cd25f 100644 --- a/redis/tasks/main.yml +++ b/redis/tasks/main.yml @@ -37,34 +37,18 @@ tags: - redis -- include: instances.yml +- include: instance-server.yml vars: - 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 }}" + redis_systemd_name: "redis-server@{{ redis_instance_name }}" + redis_conf_dir: "/etc/redis-{{ redis_instance_name }}" + redis_socket_dir: "/var/run/redis-{{ redis_instance_name }}" + redis_pid_dir: "/var/run/redis-{{ redis_instance_name }}" + redis_log_dir: "/var/log/redis-{{ redis_instance_name }}" + redis_data_dir: "/var/lib/redis-{{ redis_instance_name }}" when: redis_instance_name is defined -- name: Redis is configured. - template: - src: redis.conf.j2 - dest: "{{ redis_conf_path }}" - mode: "0644" - notify: "{{ redis_restart_handler_name }}" +- include: default-server.yml when: redis_instance_name is not defined - tags: - - redis - -- name: Redis is running and enabled on boot. - systemd: - name: "{{ redis_daemon }}" - enabled: yes - state: started - when: redis_instance_name is not defined - tags: - - redis - name: Is Munin installed stat: @@ -74,7 +58,7 @@ - redis - munin -- include: munin.yml +- include: default-munin.yml when: - _munin_installed.stat.exists - _munin_installed.stat.isdir @@ -83,7 +67,7 @@ - redis - munin -- include: munin-instances.yml +- include: instance-munin.yml when: - _munin_installed.stat.exists - _munin_installed.stat.isdir @@ -102,7 +86,9 @@ - nrpe - include: nrpe_stretch.yml - when: ansible_distribution_release == "stretch" and nrpe_evolix_config.stat.exists == true + when: + - ansible_distribution_release == "stretch" + - nrpe_evolix_config.stat.exists == true tags: - redis - nrpe diff --git a/redis/templates/redis.conf.j2 b/redis/templates/redis.conf.j2 index ab4f493e..a173169f 100644 --- a/redis/templates/redis.conf.j2 +++ b/redis/templates/redis.conf.j2 @@ -1,11 +1,11 @@ daemonize yes -pidfile {{ redis_pidfile }} +pidfile {{ redis_pid_dir }}/redis-server.pid port {{ redis_port }} bind {{ redis_bind_interface }} {% if redis_unixsocket %} -unixsocket {{ redis_unixsocket }} -unixsocketperm {{ redis_unixsocketperm }} +unixsocket {{ redis_socket_dir }}/redis.sock +unixsocketperm {{ redis_socket_perms }} {% endif %} {% if redis_password %} @@ -18,7 +18,7 @@ masterauth {{ redis_password_master }} timeout {{ redis_timeout }} loglevel {{ redis_loglevel }} -logfile {{ redis_logfile }} +logfile {{ redis_log_dir }}/redis-server.pid # To enable logging to the system logger, just set 'syslog-enabled' to yes, # and optionally update the other syslog parameters to suit your needs. @@ -33,8 +33,8 @@ save {{ save }} {% endfor %} rdbcompression {{ redis_rdbcompression }} -dbfilename {{ redis_dbfilename }} -dir {{ redis_dbdir }} +dbfilename {{ redis_data_file }} +dir {{ redis_data_dir }} {% if redis_installed_version | version_compare('3.2', '>=') %} protected-mode {{ redis_protected_mode }}