다른 역할의 Ansible 알림 핸들러
다른 역할의 핸들러에게 알릴 수 있습니까? ansible을 찾으려면 어떻게해야합니까?
사용 사례는 예를 들어 일부 서비스를 구성하고 변경된 경우 다시 시작하고 싶습니다. OS마다 편집 할 파일이 다를 수 있으며 파일 형식도 다를 수 있습니다. 그래서 나는 그것들을 다른 역할에 넣고 싶습니다 (파일 형식이 다를 수 있기 때문에 group_vars를 설정하여 수행 할 수 없습니다). 그러나 서비스를 다시 시작하는 방법은 service
모듈을 사용하여 동일 합니다. 그래서 핸들러 common
역할 을 맡고 싶습니다 .
어쨌든 이것을 달성하는 것입니까? 감사.
종속성 역할의 처리기를 호출 할 수도 있습니다 . 역할 대 역할 관계의 목적으로 플레이 북에 파일을 포함하거나 역할을 명시 적으로 나열하는 것보다 더 깔끔 할 수 있습니다. 예 :
roles / my-handlers / handlers / main.yml
--- - name: nginx restart service: > name=nginx state=restarted
roles / my-other / meta / main.yml
--- dependencies: - role: my-handlers
roles / my-other / tasks / main.yml
--- - copy: > src=nginx.conf dest=/etc/nginx/ notify: nginx restart
핸들러 파일을 포함하면 그렇게 할 수 있습니다.
예:
handlers:
- include: someOtherRole/handlers/main.yml
그러나 나는 그것이 우아하다고 생각하지 않습니다.
더 우아한 방법은 다음과 같이 두 역할을 모두 관리하는 연극을하는 것입니다.
- hosts: all
roles:
- role1
- role2
이렇게하면 두 역할이 다른 핸들러를 호출 할 수 있습니다.
그러나 다시 한 번 모든 것을 하나의 역할과 별도의 파일로 만들고 조건부 포함 http://docs.ansible.com/playbooks_conditionals.html#conditional-imports를 사용하는 것이 좋습니다.
도움이되는 희망
비슷한 문제가 있었지만 다른 종속 역할에서 많은 조치를 취해야했습니다.
따라서 핸들러를 호출하는 대신 다음과 같은 사실을 설정했습니다.
- name: install mylib to virtualenv
pip: requirements=/opt/mylib/requirements.txt virtualenv={{ mylib_virtualenv_path }}
sudo_user: mylib
register: mylib_wheel_upgraded
- name: set variable if source code was upgraded
set_fact:
mylib_source_upgraded: true
when: mylib_wheel_upgraded.changed
그런 다음 다른 역할에서 :
- name: restart services if source code was upgraded
command: /bin/true
notify: restart mylib server
when: mylib_source_upgraded
YourRole/handlers/main.yml
을 사용하여 파일 에서 추가 처리기를 가져올 수 있습니다 import_tasks
.
So, if MyRole
needs to call handlers in some OtherRole
, roles/MyRole/handlers/main.yml
will look like this:
- import_tasks: roles/OtherRole/handlers/main.yml
Of course roles/MyRole/handlers/main.yml
may include additional handlers as well.
This way if I want to run MyRole
without running tasks from the OtherRole
, ansible will be able to correctly import and run handlers from the OtherRole
참고URL : https://stackoverflow.com/questions/22649333/ansible-notify-handlers-in-another-role
'Programing' 카테고리의 다른 글
패키지 관리자에 액세스 할 수 없습니다. (0) | 2020.11.18 |
---|---|
crontab을 사용하여 MySQL 데이터베이스의 압축 파일을 올바르게 생성하기위한 mysqldump 및 gzip 명령 (0) | 2020.11.18 |
개체의 모든 메서드를 인쇄하는 방법이 있습니까? (0) | 2020.11.18 |
Python의 전용 변수 및 메서드 (0) | 2020.11.18 |
javascript int를 float로 변환 (0) | 2020.11.18 |