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'

관련 정보