localhostで一時停止を実行する

localhostで一時停止を実行する

他のサーバーのプロンプトにどのようにアクセスして応答できますか?私のマスター:

[dbs]
db1
db2
db3

私の役割は次のtasks/main.ymlとおりです。

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

- include_tasks: mysql.yml
  when: my_pause.user_input | bool

この役割を実行すると、最初のサーバーだけがスキップされ、MySQL.yml別のサーバーに移動して実行されますMySQL.yml

MySQL.ymlユーザーが応答プロンプトとしてnoと入力すると、‍‍がどのサーバーでも実行されないことを願っています。しかし、noを入力すると再インストールされます! !

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

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

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

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

TASK [ssh : install mysql] ********************************************************************************
ok: [db3]
ok: [db2]

PLAY RECAP ********************************************************************************
db1                        : ok=2    changed=0    unreachable=0    failed=0   
db2                        : ok=3    changed=0    unreachable=0    failed=0   
db3  

編集-1

最初の解決策を使用しましたが、noと入力すると再インストールされます。

task/main.yml:

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

- include_tasks: mysql.yml
  when: hostvars['localhost']['install_mysql']['user_input'] == 'yes'

出力は次のとおりです

[root@anisble ansible]# ansible-playbook playbooks/test.yml 
PLAY [dbs] ********************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [db2]
ok: [db1]
ok: [db3]

TASK [ssh : pause] ********************************************************************************
[ssh : pause]
Do you want to install mysql (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 mysql] ********************************************************************************
  changed: [db1]
changed: [db3]
changed: [db2]

  PLAY RECAP ********************************************************************************
    db1                        : ok=4    changed=1    unreachable=0    failed=0   
    db2                        : ok=3    changed=1    unreachable=0    failed=0   
    db3                        : ok=3    changed=1    unreachable=0    failed=0   

編集2

この方法は効果的です。

- name: confirm
  pause:
    prompt: "Do you want to install mysql (yes/no)?"
  register: install_mysql

- include_tasks: mysql.yml
  when: hostvars[groups['dbs'][0]]['install_mysql']['user_input'] == "yes"

ベストアンサー1

localhostで一時停止を実行する

pauseたとえば、特定のホストでタスクを実行し、localhostホスト変数の配列hostvars['localhost']ここで盗んだ)。

- name: Pause prompt on localhost
  hosts: localhost
  tasks:
    - name: Prompt
      pause:
        prompt: "Do you want to install mysql (yes/no)?"
      register: install_mysql

- name: Get the answer from the hostvars array
  hosts: all  
  tasks:
    - name: Include role when you answered 'yes'
      include_tasks: mysql.yml
      when: hostvars['localhost']['install_mysql']['user_input'] == 'yes'

コンソール変数配列の回答にアクセスするには、そのコンソールで専用ゲームを使用する必要があります。元の要求と同じようにホストグループで一度実行する場合は、最初に処理され、使用されるホストを推測する必要がありますhostvars['firstprocessedhost'](時々hostvars['db1'])。

これを使用すると、タスクdelegate_to: localhostが実行され続け、db1答えがhostvars['db1']

ホストの順序に依存しないでください。一時停止モジュールは、ユーザーデータの入力を求める代わりにプレイブックを一時停止するように設計されています。

変数プロンプト

vars_prompt可能であれば、ドラマセクションを活用してください。

- name: A play with a vars_prompt section
  hosts: all  
  vars_prompt:
    - name: install_mysql
      prompt: "Do yo want to install mysql (yes/no)?"

  tasks:
    - name: Include role when you answered 'yes'
      include_tasks: mysql.yml
      when: install_mysql == 'yes'

おすすめ記事