如何在剧本中运行任务之前设置确认提示?

pyr*_*d13 3 ansible

我想在确认用户后安装MariaDB.我有一个角色和一个简单的任务:

- name: install MariaDB
  yum:
    name: MariaDB
    state: present
Run Code Online (Sandbox Code Playgroud)

或者如果我想使用include: MySQL.yml,如果用户想要,则该行执行,如果不是,则跳过此包括.

- name: install MariaDB
  yum:
    name: MariaDB
    state: present

- include: MySQL.yml
Run Code Online (Sandbox Code Playgroud)

更多解释

我的主人:

[dbs]
192.168.0.10
192.168.0.11
192.168.0.12
Run Code Online (Sandbox Code Playgroud)

现在,我想如果用户为答案提示输入no,则MySQL.yml不会对任何服务器执行.

我在role(tasks/main.yml)中的代码:

---
- pause:
   prompt: "Do you want to install mariadb (yes/no)?"
  register: my_pause
  delegate_to: localhost

- include_tasks: mysql.yml
  when: hostvars['localhost'].my_pause.user_input | bool
Run Code Online (Sandbox Code Playgroud)

和我的输出:

[root@anisble ansible]# ansible-playbook playbooks/test.yml 



PLAY [dbs] 
********************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [db1]
ok: [db2]
ok: [db3]

TASK [ssh : pause] ******************************************************************************
[ssh : pause]
Do you want to install mariadb (yes/no)?:
no
  ok: [db1 -> localhost]

TASK [ssh : include_tasks] ***********************************************************************************
included: /etc/ansible/roles/ssh/tasks/mysql.yml for db1, db2, db3

TASK [ssh : install mariadb] ******************************************************************************
ok: [db3]
ok: [db2]
ok: [db1]

PLAY RECAP *****************************************************************************
db1                        : ok=4    changed=0    unreachable=0    failed=0   
db2                        : ok=3    changed=0    unreachable=0    failed=0   
db3                        : ok=3    changed=0    unreachable=0    failed=0  
Run Code Online (Sandbox Code Playgroud)

tec*_*raf 12

你可以使用一个变量提示pause模块user_input; 并为任务设置条件:

- hosts: my_host_group

  vars_prompt:
    - name: "install_mariadb"
      prompt: "Do you want to install MariaDB (yes/no)?"
      private: no

  tasks:
    - name: install MariaDB
      yum:
        name: MariaDB
        state: present
      when: install_mariadb | bool

    - include_tasks: MySQL.yml
      when: install_mariadb | bool
Run Code Online (Sandbox Code Playgroud)

要么

- hosts: my_host_group

  tasks:
    - pause:
        prompt: "Do you want to install MariaDB (yes/no)?"
      register: my_pause
      delegate_to: localhost

    - name: install MariaDB
      yum:
        name: MariaDB
        state: present
      when: hostvars['localhost'].mypause.user_input | bool

    - include_tasks: MySQL.yml
      when: hostvars['localhost'].mypause.user_input | bool
Run Code Online (Sandbox Code Playgroud)

  • 是 `mypause`.user_input 和 `my_pause` 拼写错误还是正确?看起来应该是 `.my_pause.user_input` 我没有测试这段代码。只是阅读一些有关 ansible 的内容,试图理解一些行为:D (4认同)