我們有一些Redis的配置,只有不同的端口和maxmemory設置,所以我在尋找一種方式來寫一個redis的「基地」配置文件,然後替換端口和maxmemory變量。Ansible - 寫變量配置文件
我可以做到這一點Ansible?
我們有一些Redis的配置,只有不同的端口和maxmemory設置,所以我在尋找一種方式來寫一個redis的「基地」配置文件,然後替換端口和maxmemory變量。Ansible - 寫變量配置文件
我可以做到這一點Ansible?
對於這樣的操作通常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 }}
哇!很好的答案,我會試一試!謝謝 – Masterl1nk
我發現做到這一點(和我到處使用相同的技術) 是創建一個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
我發現這種方式; http://docs.ansible.com/ansible/replace_module.html但我不確定是否最好的方法來做到這一點! – Masterl1nk