循环变量未追加文件



当我使用blockinfile循环来附加/etc/environment文件时,它只添加循环变量中项的最后一个键和值,而不是添加所有项。

我正在尝试使用角色main.yml:中的Blockinfile模块修改文件

- name: Add proxy to global /etc/environments
blockinfile:
path: "/etc/environment"
block: |
export {{item.key}}={{item.value}}
loop: "{{proxy_details}}"

我的vars/main.yaml看起来是这样的:

proxy_details:
- key: http_proxy
value: "http://"{{ProxyHost}}":"{{ProxyPort}}""
- key: https_proxy
value: "http://"{{ProxyHost}}":"{{ProxyPort}}""

我的group_vars/all看起来是这样的:

ProxyHost: test.com
ProxyPort: 9999

请参阅文档中的最后一个示例https://docs.ansible.com/ansible/latest/modules/blockinfile_module.html.你需要为每个项目使用一个自定义标记,这样Ansible就知道每个项目在文件中的位置来替换它

根据文件说明:

使用"with_*"循环时,请注意,如果不设置唯一标记,则块将在每次迭代中被覆盖。

例如:

- name: Add mappings to /etc/hosts
blockinfile:
path: /etc/hosts
block: |
{{ item.ip }} {{ item.name }}
marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.name }}"
loop:
- { name: host1, ip: 10.10.1.10 }
- { name: host2, ip: 10.10.1.11 }
- { name: host3, ip: 10.10.1.12 }

您可以将您的修改为:

- name: Add proxy to global /etc/environments
blockinfile:
path: "/etc/environment"
marker: "# {mark} ANSIBLE MANAGED BLOCK FOR {{item.key}}"
block: |
export {{item.key}}={{item.value}}
loop: "{{proxy_details}}"

最新更新