Ansible无法将变量的值分配给另一个变量
Ansible Unable to assign variable the value to another variable
如果用户没有传递 dest_path
参数,或者如果 dest_path
是空的,即只包含空格,那么 dest_path
应该与 source_file
值相同。
下面是我的剧本:
---
- name: "Play 1"
hosts: localhost
any_errors_fatal: false
gather_facts: false
tasks:
- set_fact:
dest_path: "{{ dest_path | default(source_file) }}"
- set_fact:
dest_path: "{{ source_file }}"
when: dest_path | length == 0
- debug:
msg: "DESTINATION PATH IS: {{ dest_path }} and the SOURCE PATH is: {{ source_file }}"
这就是你 运行 这个剧本的方式:
ansible-playbook -i /web/playbooks/allmwhosts.hosts /web/playbooks/test.yml -e '{ source_file: /web/bea_apps/CURRENT }' -e dest_path=
在上面的示例中,当用户没有为 dest_path
指定任何值时,我期望 dest_path
应该是 source_file
即 /web/bea_apps/CURRENT
但是,正如您在下面的输出中看到的那样,情况并非如此:
输出:
PLAY [Play 1] *******************
TASK [set_fact] **************************************************************************************
ok: [localhost]
TASK [set_fact] **************************************************************************************
ok: [localhost]
TASK [debug] *****************************************************************************************
ok: [localhost] => {
"msg": "DESTINATION PATH IS: and the SOURCE PATH is: /web/bea_apps/CURRENT"
}
PLAY RECAP *******************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
你能推荐一下吗?
您作为参数传递的额外变量正在覆盖 set_fact 变量 dest_path 中的变量。下面是工作代码。在 set_fact 而不是 dest_path 中,我用路径替换了。
---
- name: "Play 1"
hosts: localhost
any_errors_fatal: false
gather_facts: false
tasks:
- set_fact:
path: "{{ source_file }}"
when: (dest_path is not defined) or (dest_path | length == 0)
- set_fact:
path: "{{ dest_path }}"
when: (dest_path is defined) or (dest_path | length != 0)
- debug:
msg: "DESTINATION PATH IS: {{ path }} and the SOURCE PATH is: {{ source_file }}"
如果用户没有传递 dest_path
参数,或者如果 dest_path
是空的,即只包含空格,那么 dest_path
应该与 source_file
值相同。
下面是我的剧本:
---
- name: "Play 1"
hosts: localhost
any_errors_fatal: false
gather_facts: false
tasks:
- set_fact:
dest_path: "{{ dest_path | default(source_file) }}"
- set_fact:
dest_path: "{{ source_file }}"
when: dest_path | length == 0
- debug:
msg: "DESTINATION PATH IS: {{ dest_path }} and the SOURCE PATH is: {{ source_file }}"
这就是你 运行 这个剧本的方式:
ansible-playbook -i /web/playbooks/allmwhosts.hosts /web/playbooks/test.yml -e '{ source_file: /web/bea_apps/CURRENT }' -e dest_path=
在上面的示例中,当用户没有为 dest_path
指定任何值时,我期望 dest_path
应该是 source_file
即 /web/bea_apps/CURRENT
但是,正如您在下面的输出中看到的那样,情况并非如此:
输出:
PLAY [Play 1] *******************
TASK [set_fact] **************************************************************************************
ok: [localhost]
TASK [set_fact] **************************************************************************************
ok: [localhost]
TASK [debug] *****************************************************************************************
ok: [localhost] => {
"msg": "DESTINATION PATH IS: and the SOURCE PATH is: /web/bea_apps/CURRENT"
}
PLAY RECAP *******************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
你能推荐一下吗?
您作为参数传递的额外变量正在覆盖 set_fact 变量 dest_path 中的变量。下面是工作代码。在 set_fact 而不是 dest_path 中,我用路径替换了。
---
- name: "Play 1"
hosts: localhost
any_errors_fatal: false
gather_facts: false
tasks:
- set_fact:
path: "{{ source_file }}"
when: (dest_path is not defined) or (dest_path | length == 0)
- set_fact:
path: "{{ dest_path }}"
when: (dest_path is defined) or (dest_path | length != 0)
- debug:
msg: "DESTINATION PATH IS: {{ path }} and the SOURCE PATH is: {{ source_file }}"