我是 Ansible 的新手,并在这个论坛上发帖,所以请耐心等待!
我试图迭代文件(test_file)中的所有行并比较我放入 vars_file(test.yml)中的变量中的行,如果该行的正则表达式与 test.yml 中的变量匹配,请检查变量属性“值”匹配。我不确定我是否正确解释了这一点。这是我试图描述的文件:
测试.yml
complexity:
- { name: 'min_value', expression: '=', value: '10' }
- { name: 'max_value', expression: '=', value: '100' }
测试文件
min_value = **some random number**
max_value = **some random number**
例如,如果 test_file 中的 min_value 是 2000,但我希望它是 10,那么它将仅替换我猜测的最后一个行属性。我希望它能够迭代变量文件中 complexity 循环中的所有项目,并进行必要的更改。
这是我尝试过的:
文件/test.yml
complexity:
- { name: 'min_value', expression: '=', value: '10' }
- { name: 'max_value', expression: '=', value: '100' }
test_file: /etc/test/test.conf
file_lines: "{{ lookup('file', '/etc/test/test.conf/').splitlines() }}"
main.yml
- hosts: localhost
vars_files: files/test.yml
tasks:
- name: Replace line if variables do not match
lineinfile:
path: "{{ test_file }}"
regexp: "{{ item.name }} {{ item.expression }}"
state: present
line: "{{ item.name }} {{ item.expression }} {{ item.value }}"
with_items:
- "{{ complexity }}"
- "{{ file_lines }}"
when: "{{ file_lines }} != {{ item.name }} {{ item.expression }} {{ item.value }}"
我还尝试过 with_nested 以及 with_nested 的更新方法,使用循环:
loop: "{{ complexity }} | zip(file_lines) | list }}"
给定文件
shell> cat /tmp/test_file
min_value = **some random number**
max_value = **some random number**
以下播放
shell> cat pb.yml
- hosts: localhost
vars:
complexity:
- {name: min_value, expression: '=', value: 10}
- {name: max_value, expression: '=', value: 100}
tasks:
- lineinfile:
path: /tmp/test_file
regexp: '^\s*{{ item.name }}\s*{{ item.expression }}\s*(.*)$'
line: "{{ item.name }} {{ item.expression }} {{ item.value }}"
loop: "{{ complexity }}"
给出删节(使用 --check --diff 选项运行)
shell> ansible-playbook pb.yml -CD
...
TASK [lineinfile] ****************************************************************************
--- before: /tmp/test_file (content)
+++ after: /tmp/test_file (content)
@@ -1,2 +1,2 @@
-min_value = **some random number**
+min_value = 10
max_value = **some random number**
changed: [localhost] => (item={'name': 'min_value', 'expression': '=', 'value': 10})
--- before: /tmp/test_file (content)
+++ after: /tmp/test_file (content)
@@ -1,2 +1,2 @@
min_value = **some random number**
-max_value = **some random number**
+max_value = 100
changed: [localhost] => (item={'name': 'max_value', 'expression': '=', 'value': 100})
播放会修改文件
shell> ansible-playbook pb.yml
...
TASK [lineinfile] ****************************************************************************
changed: [localhost] => (item={'name': 'min_value', 'expression': '=', 'value': 10})
changed: [localhost] => (item={'name': 'max_value', 'expression': '=', 'value': 100})
shell> cat /tmp/test_file
min_value = 10
max_value = 100
该剧是幂等的。重复后没有任何变化
shell> ansible-playbook pb.yml
...
TASK [lineinfile] ****************************************************************************
ok: [localhost] => (item={'name': 'min_value', 'expression': '=', 'value': 10})
ok: [localhost] => (item={'name': 'max_value', 'expression': '=', 'value': 100})