我想從定義為“vars_prompt”的主機的清單檔案中覆寫我的劇本檔案中的一些變數。如果我理解正確,Ansible 不應該提示輸入變數(如果之前已經設定),但是,當我嘗試執行劇本時它仍然提示輸入變數。
我如何覆寫清單中的“vars_prompt”變數,或者由于 Ansible 的變數優先級定義而無法實作?
示例:
playbook.yml
---
- name: Install Gateway
hosts: all
become: yes
vars_prompt:
- name: "hostname"
prompt: "Hostname"
private: no
...
庫存.yml
---
all:
children:
gateways:
hosts:
gateway:
ansible_host: 192.168.1.10
ansible_user: user
hostname: "gateway-name"
...
uj5u.com熱心網友回復:
問:“如果我理解正確,Ansible 不應提示輸入變數(如果之前已經設定),但是,當我嘗試執行劇本時它仍會提示輸入變數。”
答:你錯了。Ansible 不會提示輸入由命令列定義的變數--extra-vars。參考互動式輸入:提示:
對于已經通過命令列 --extra-vars 選項定義的任何變數,將跳過對單個 vars_prompt 變數的提示,...
您不能覆寫inventory中的vars_prompt變數。請參閱了解變數優先級。與 play vars_prompt (13.) 相比,清單變數 (3.-9.) 的優先級較低。額外變數的優先級是 22。
如果未定義任何變數,請使用模塊pause詢問主機名。例如,庫存
shell> cat hosts
host_1
host_2
和劇本
hosts: all
gather_facts: false
vars:
hostnames: "{{ ansible_play_hosts_all|
map('extract', hostvars, 'hostname')|
list }}"
hostnames_undef: "{{ hostnames|from_yaml|
select('eq', 'AnsibleUndefined')|
length > 0 }}"
tasks:
- debug:
msg: |
hostnames: {{ hostnames }}
hostnames_undef: {{ hostnames_undef }}
run_once: true
- pause:
prompt: "Hostname"
register: out
when: hostnames_undef
run_once: true
- set_fact:
hostname: "{{ out.user_input }}"
when: hostname is not defined
- debug:
var: hostname
給
shell> ansible-playbook pb.yml
PLAY [all] ************************************************************************************
TASK [debug] **********************************************************************************
ok: [host_1] =>
msg: |-
hostnames: [AnsibleUndefined, AnsibleUndefined]
hostnames_undef: True
TASK [pause] **********************************************************************************
[pause]
Hostname:
gw.example.com^Mok: [host_1]
TASK [set_fact] *******************************************************************************
ok: [host_1]
ok: [host_2]
TASK [debug] **********************************************************************************
ok: [host_1] =>
hostname: gw.example.com
ok: [host_2] =>
hostname: gw.example.com
PLAY RECAP ************************************************************************************
host_1: ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host_2: ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
該劇本不會覆寫清單中定義的變數。例如
shell> cat hosts
host_1
host_2 hostname=gw2.example.com
給
TASK [debug] **********************************************************************************
ok: [host_1] =>
hostname: gw.example.com
ok: [host_2] =>
hostname: gw2.example.com
uj5u.com熱心網友回復:
我不知道你是否可以停止提示,但你可以直接在 vars_prompts 中設定默認值。這樣你就不需要每次都輸入“gateway-name”。
vars_prompt:
- name: "hostname"
prompt: "Hostname"
private: no
default: "gateway-name"
資料來源:https ://docs.ansible.com/ansible/latest/user_guide/playbooks_prompts.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533711.html
標籤:变量可靠的
上一篇:WordPress代碼的干擾
