Ansible - 将变量写入配置文件

时间:2016-11-17 13:54:26

标签: ansible

我们有一些redis配置只在端口和maxmemory设置上有所不同,所以我正在寻找一种方法为redis编写'base'配置文件,然后替换port和maxmemory变量。

我可以用Ansible做到吗?

2 个答案:

答案 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