【问题标题】:Making prompted vars usable across the playbook使提示变量可在整个剧本中使用
【发布时间】:2020-03-28 06:41:24
【问题描述】:

我有一本包含多个任务的剧本,这些任务必须在不同的主机上运行。 在剧本开始时,我想提示操作员提供他们的凭据,这对于剧中的每个主持人都是相同的。我希望将这些凭据“存储”在某处,以便可以在任务中使用它们来登录提供的主机。

Playbook 如下所示,

---
- name: Ask for credentials
  vars_prompt:
    - name: username
      prompt: "Username?"
    - name: password
      prompt: "Password?"
  tasks:
    - set_fact:
        username: "{{username}}"
    - set_fact:
        password: "{{password}}"

- hosts: Host1
  vars:
    ansible_user: "{{ username }}"
    ansible_password: "{{ password }}"
  tasks:
    - name: Do stuff  

- hosts: Host2
  vars:
    ansible_user: "{{username}}"
    ansible_password: "{{password}}"
  tasks:
    - name: Do stuff
...

从播放到达第一个任务的那一刻起,它就会因流动错误而失败,

msg: 'The field ''remote_user'' has an invalid value, which includes an undefined variable. The error was: ''username'' is undefined'

任何有使提示变量可用于整个游戏和所有任务的经验?

【问题讨论】:

    标签: ansible ansible-2.x ansible-inventory ansible-facts


    【解决方案1】:

    问:“让提示变量在整个游戏和所有任务中都可用>”

    A:使用稍后应该连接的所有主机组运行第一次播放。运行一次set_fact 任务。这将为组中的所有主机创建变量 usernamepassword

    例如,如果组 test_jails 包含主机 test_01, test_02, test_03 播放

    - hosts: test_jails
      vars_prompt:
        - name: "username"
          prompt: "Username?"
        - name: "password"
          prompt: "Password?"
      tasks:
        - set_fact:
            username: "{{ username }}"
            password: "{{ password }}"
          run_once: true
    
    - hosts: test_01
      vars:
        ansible_user: "{{ username }}"
        ansible_password: "{{ password }}"
      tasks:
        - debug:
            msg: "{{ ansible_user }} {{ ansible_password }}"
    

    给予

    ok: [test_01] => {
        "msg": "admin 1234"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 2013-03-15
      • 2017-04-20
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多