我们有一些redis配置只在端口和maxmemory设置上有所不同,所以我正在寻找一种方法为redis编写'base'配置文件,然后替换port和maxmemory变量。
我可以用Ansible做到吗?
答案 0 :(得分: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 }}
答案 1 :(得分:-1)
我发现这样做的最佳方式(我到处使用相同的技术)
是使用默认的vars文件创建role redis
,然后在调用角色时覆盖变量。
所以在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