2016-11-17 2 views
0

Wir haben einige Redis-Konfigurationen, die sich nur bei Port- und Maxmemory-Einstellungen unterscheiden. Daher suche ich nach einer Möglichkeit, eine 'Basis'-Konfigurationsdatei für redis zu schreiben und die Port- und Maxmemory-Variablen zu ersetzen .Ansible - Variable in Konfigurationsdatei schreiben

Kann ich das mit Ansible tun?

+0

ich auf diese Weise gefunden habe; http://docs.ansible.com/ansible/replace_module.html aber ich bin mir nicht sicher, ob das der beste Weg ist! – Masterl1nk

Antwort

1

Für solche Operationen funktioniert normalerweise lineinfile Modul am besten; zum Beispiel:

- name: Ensure maxmemory is set to 2 MB 
    lineinfile: 
    dest: /path/to/redis.conf 
    regexp: maxmemory 
    line: maxmemory 2mb 

oder mehrere Zeilen in einer Aufgabe ändern mit with_items:

- name: Ensure Redis parameters are configured 
    lineinfile: 
    dest: /path/to/redis.conf 
    regexp: "{{ item.line_to_match }}" 
    line: "{{ item.line_to_configure }}" 
    with_items: 
    - { line_to_match: "line_to_match", line_to_configure: "maxmemory 2mb" } 
    - { line_to_match: "port", line_to_configure: "port 4096" } 

Oder wenn Sie eine Basis Config erstellen möchten, schreiben Sie es in Jinja2 und verwenden ein template Modul:

vars: 
    redis_maxmemory: 2mb 
    redis_port: 4096 

tasks: 
    - name: Ensure Redis is configured 
    template: 
     src: redis.conf.j2 
     dest: /path/to/redis.conf 

mit redis.conf.j2 enthält:

maxmemory {{ redis_maxmemory }} 
port {{ redis_port }} 
+0

Wow! Große Antwort, ich werde es versuchen! Danke – Masterl1nk

-1

Der beste Weg, die ich gefunden habe, dies zu tun (und ich verwende die gleiche Technik überall) ist ein roleredis mit einer Standard-Vars-Datei zu erstellen und dann die Vars außer Kraft setzen, wenn Sie rufe die Rolle an.

So in roles/redis/default/main.yml:

redis_bind: 127.0.0.1 
redis_memory: 2GB 
redis_port: 1337 

Und in Ihrem Textbuch:

- name: Provision redis node 
    hosts: redis1 

    roles: 
    - redis: 
     redis_port: 9999 
     redis_memory: 4GB 

- name: Provision redis node 
    hosts: redis2 

    roles: 
    - redis: 
     redis_port: 8888 
     redis_memory: 8GB 
+0

Und wenn Sie ** eine Rolle ** erstellen, müssen Sie keine Aufgabe/Modul definieren, oder? Wie beantwortet es überhaupt die Frage? Oder vielleicht haben Sie es so gemeint: Am einfachsten ist es, eine fertige Lösung auf GitHub/Galaxy zu finden, um nicht zu stören, wie die Dinge funktionieren, keine Fragen zu SO zu stellen? – techraf

+0

@techraf OP fragt, wie er eine Basiskonfiguration für redis erstellen kann und das ist was ich antworte. OP hat nicht nach der Aufgabenumsetzung gefragt. – Alfwed

+0

"* Variable in ** Konfigurationsdatei schreiben ***"; "* schreibe eine 'base' ** Konfigurationsdatei ** für redis und ersetze dann die Port und Maxmemory Variablen *"; "* Ich habe ** so gefunden **;' replace_module' * " – techraf

Verwandte Themen