다른 서버의 프롬프트에 어떻게 액세스하고 응답할 수 있나요? 나의 주인:
[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'