Ansible,如何在循环期间修改变量?
Ansible, How to modify a variable during a loop?
我用的是Ansible 2.3.0.0,我在Ansible 2.4.0.0上测试过,结果一样。我的问题很简单。
我有以下列表:
vars:
password_text_to_encrypt:
- { line: "{{truststore_pass }}" , result: }
- { line: "{{ keystore_pass }}" , result: }
- { line: "{{ gp_pass }}" , result: }
- { line: "{{ datasource_password }}" , result: }
- { line: "{{ server_password }}" , result: }
- { line: "{{ sftp_password }}" , result: }
- { line: "{{ db_userpassword }}" , result: }
roles:
- basic_role
我想加密列表中每一项的行值并将其保存在其结果属性中。
我正在尝试使用此 Ansible 代码,但它在任务分配中失败了:
- name: "Encrypt password"
uri:
url: http://122.81.10.1:8910/Cloud/encrypt
method: POST
body: "{{ item.line}}"
return_content: yes
register: "r"
with_items:
- "{{password_text_to_encrypt}}"
- name: "Replace var in result"
set_fact: item['0']['result']="{{ item.1.content}}"
#replace: '{{ item.1.content}}'
with_nested:
- "{{password_text_to_encrypt}}"
- "{{r.results}}"
when: item.1.item.line==item.0.line
- name: "print Results"
debug:
msg: "The Item is :{{item.result}}"
with_items:
- "{{password_text_to_encrypt}}"
输出信息为:
"msg": "The variable name 'item['0']['result']' is not valid. Variables must start with a letter or underscore character, and contain only letters, numbers and underscores."}
我已经测试了其他可能性,但我没有实现每个 item.results 保存其加密值
最后,set_fact方法必须这样使用:
我没有使用相同的变量,而是创建了另一个具有相同结构的变量。
- name: "Replace var in result"
set_fact:
encrypted: "{{encrypted|default([]) + [ {'line': item.1.content, 'regexp': item.0.regexp} ]}}"
with_nested:
- "{{password_text_to_encrypt}}"
- "{{r.results}}"
when: item.1.item.line==item.0.line
但是我无法重写对象中的字段
我用的是Ansible 2.3.0.0,我在Ansible 2.4.0.0上测试过,结果一样。我的问题很简单。 我有以下列表:
vars:
password_text_to_encrypt:
- { line: "{{truststore_pass }}" , result: }
- { line: "{{ keystore_pass }}" , result: }
- { line: "{{ gp_pass }}" , result: }
- { line: "{{ datasource_password }}" , result: }
- { line: "{{ server_password }}" , result: }
- { line: "{{ sftp_password }}" , result: }
- { line: "{{ db_userpassword }}" , result: }
roles:
- basic_role
我想加密列表中每一项的行值并将其保存在其结果属性中。 我正在尝试使用此 Ansible 代码,但它在任务分配中失败了:
- name: "Encrypt password"
uri:
url: http://122.81.10.1:8910/Cloud/encrypt
method: POST
body: "{{ item.line}}"
return_content: yes
register: "r"
with_items:
- "{{password_text_to_encrypt}}"
- name: "Replace var in result"
set_fact: item['0']['result']="{{ item.1.content}}"
#replace: '{{ item.1.content}}'
with_nested:
- "{{password_text_to_encrypt}}"
- "{{r.results}}"
when: item.1.item.line==item.0.line
- name: "print Results"
debug:
msg: "The Item is :{{item.result}}"
with_items:
- "{{password_text_to_encrypt}}"
输出信息为:
"msg": "The variable name 'item['0']['result']' is not valid. Variables must start with a letter or underscore character, and contain only letters, numbers and underscores."}
我已经测试了其他可能性,但我没有实现每个 item.results 保存其加密值
最后,set_fact方法必须这样使用:
我没有使用相同的变量,而是创建了另一个具有相同结构的变量。
- name: "Replace var in result"
set_fact:
encrypted: "{{encrypted|default([]) + [ {'line': item.1.content, 'regexp': item.0.regexp} ]}}"
with_nested:
- "{{password_text_to_encrypt}}"
- "{{r.results}}"
when: item.1.item.line==item.0.line
但是我无法重写对象中的字段