我讓最終用戶提供用戶名dest_user,即已在 Linux 上為所有目標主機設定了 ssh-keys 的用戶名,即dest_host。
以下是我為無密碼用戶設定動態庫存的方法
- add_host:
name: "{{ item }}"
groups: dest_nodes
ansible_user: "{{ dest_user }}"
with_items: "{{ dest_host.split() }}"
when: dest_user != ""
都好。第二種情況是當用戶沒有提供任何dest_userSSO 用戶名(我從他們的 Jenkins 登錄中獲得)和密碼時,dest_pass即他手動輸入的密碼應該用于動態清單中的所有主機。
如何構建dest_nodes組以同時容納用于無密碼登錄的用戶名和用于 SSO 登錄的用戶名密碼?
uj5u.com熱心網友回復:
您可以使用模塊有條件地提示輸入變數pause,并使用特殊變數在您的任務中omit設定為ansible_password可選。add_host
注意:由于您似乎對從 Jenkins 獲取用戶的方式有一個很好的想法,所以我在dest_user_from_jenkins這里假設它是一個變數。
這將是執行此操作的兩個任務:
- pause:
prompt: Please enter your password
echo: no
register: dest_pass
when: dest_user | default('') == ''
- add_host:
name: "{{ item }}"
groups: dest_nodes
ansible_user: "{{ dest_user | default(dest_user_from_jenkins) }}"
ansible_password: "{{ dest_pass.user_input | default(omit) }}"
loop: "{{ dest_host.split() }}"
鑒于劇本:
- hosts: localhost
gather_facts: no
vars:
dest_host: foo bar
dest_user_from_jenkins: dest_user_not_set
tasks:
- pause:
prompt: Please enter your password
echo: no
register: dest_pass
when: dest_user | default('') == ''
- add_host:
name: "{{ item }}"
groups: dest_nodes
ansible_user: "{{ dest_user | default(dest_user_from_jenkins) }}"
ansible_password: "{{ dest_pass.user_input | default(omit) }}"
loop: "{{ dest_host.split() }}"
- debug:
msg: |
user: {{ hostvars[item].ansible_user }}
password: {{
hostvars[item].ansible_password
| default('password has not been set!')
}}
loop: "{{ groups['dest_nodes'] }}"
我們最終有兩種可能的路徑:
- 在沒有任何額外引數的情況下運行時,會產生:
TASK [pause] *********************************************************** [pause] Please enter your password (output is hidden): ok: [localhost] TASK [add_host] ******************************************************** ok: [localhost] => (item=foo) ok: [localhost] => (item=bar) TASK [debug] *********************************************************** ok: [localhost] => (item=foo) => msg: |- user: dest_user_not_set password: password ok: [localhost] => (item=bar) => msg: |- user: dest_user_not_set password: password - 當與 一起運行時
--extra-vars "dest_user=dest_user_set",這會產生:TASK [pause] *********************************************************** skipping: [localhost] TASK [add_host] ******************************************************** ok: [localhost] => (item=foo) ok: [localhost] => (item=bar) TASK [debug] *********************************************************** ok: [localhost] => (item=foo) => msg: |- user: dest_user_set password: password has not been set! ok: [localhost] => (item=bar) => msg: |- user: dest_user_set password: password has not been set!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/424375.html
標籤:验证 动态的 可靠的 ansible-库存
