2016-11-17 58 views
0

我們有一些Redis的配置,只有不同的端口和maxmemory設置,所以我在尋找一種方式來寫一個redis的「基地」配置文件,然後替換端口和maxmemory變量。Ansible - 寫變量配置文件

我可以做到這一點Ansible?

+0

我發現這種方式; http://docs.ansible.com/ansible/replace_module.html但我不確定是否最好的方法來做到這一點! – Masterl1nk

回答

1

對於這樣的操作通常lineinfile模塊效果最好;例如:

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

或更改多條線路在一個任務與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" } 

或者,如果你想創建一個基礎的配置,把它寫在Jinja2的,並使用一個template模塊:

vars: 
    redis_maxmemory: 2mb 
    redis_port: 4096 

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

redis.conf.j2包含:

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

哇!很好的答案,我會試一試!謝謝 – Masterl1nk

-1

我發現做到這一點(和我到處使用相同的技術) 是創建一個roleredis用默認瓦爾文件,然後你時覆蓋瓦爾的最佳方式稱爲角色。

所以在roles/redis/default/main.yml

redis_bind: 127.0.0.1 
redis_memory: 2GB 
redis_port: 1337 

而在你的劇本:

- 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

當你創建**角色時,你不需要定義任何任務/模塊,對吧?它如何遠程回答這個問題?或者,也許你的意思是:最簡單的方法是在GitHub/Galaxy上找到現成的解決方案,而不是打擾事情的工作方式,而不是在SO上提出問題? – techraf

+0

@techraf OP問他如何爲redis創建一個基本配置,這就是我的答案。 OP沒有要求執行任務。 – Alfwed

+0

「*將變量寫入**配置文件***」; 「*爲redis寫一個'base'**配置文件**,然後替換端口和maxmemory變量*」; 「*我發現**這種方式**;'replace_module' *」 – techraf