programing

ansible : 역할에 역할 포함?

nasanasas 2020. 12. 12. 11:06
반응형

ansible : 역할에 역할 포함?


역할에서 역할을 재사용 할 수 있습니까? 나는 역할의 메타 / main.yml 파일에 대한 종속성을 정의를 통해 만에 의해 의미하지 않는다 포함한 직접 다른 역할의 작업 / main.yml의 역할을?

예를 들어, 롤북에서 몇 가지 기본 역할을 정의하고 역할에서 더 높은 수준의 역할을 정의합니다. 높은 수준의 역할에 특정 작업 외에 몇 가지 기본 역할이 포함되기를 원합니다.

playbooks/

  rolebooks/
    some_role/

  roles/
    webtier/
      tasks/
        main.yml

playbooks / roles / webtier / tasks / main.yml에서 :

- shell: echo 'hello'
- { role: rolebooks/some_role }
- shell: echo 'still busy'

감사


오래된 질문이지만 기록을 위해 : Ansible 2.2+를 사용하면 괜찮습니다 include_role. 바로이 목적을 위해 ... 여기 문서를 참조 하십시오 .

확인하세요 import_role... 여기에서 문서를 참조 하세요.


AFAIK, 당신은 할 수 없습니다. 이것이 의존성이있는 이유입니다.

종속성을 피하려면 (예를 들어 '역할 X'가 두 작업간에 실행되기를 원하기 때문에) 작업이 관련되어 있다고 생각하면 플레이 북 자체에서이 작업을 수행 할 수 있습니다.

roles / webtier / tasks / main.yml :

- shell: echo 'hello'
- include: webtier.yml
- shell: echo 'role done'

대체로 정확히 무엇을 하려는지에 달려 있습니다. 그러나 귀하의 예에서 '아직 바쁘다'는 rolebooks/some_role것은 아직 실행 중임 을 의미하는 것 같습니다 . 이는 불가능합니다 (여기에는 동시성이 없습니다).

분명히 마스터 플레이 북에서 역할을 순서대로 지정할 수도 있습니다 (아마도 이미 수행 한 작업 일 것입니다).

- name: Polite foo stuff
  hosts: foo_hosts
  roles:
    - say_hello
    - rolebooks/some_role
    - say_bye

- name: Unpolite foo stuff
  hosts: !foo_hosts
  roles:
    - rolebooks/some_role

당신은 할 수 없지만 비슷한 것을 할 수 있습니다.

레이아웃 :

roles/
    ...
    common/tasks/main.yml
    nginx/tasks/main.yml
    ...

에서 nginx/tasks/main.yml일반적인 작업을 호출 할 수 있습니다.

- name: Call the 'common' role to do some general setup
  include: ../../common/tasks/main.yml

Note that because you're not using the typical import structure, you might run into some "weirdness" like role default variables not being accessible unless you included the role in the standard fashion earlier.


I appreciate that you said not using meta dependencies but the best solution I have come up with is to create a role that only contains meta/dependency.yml

This allows any number of roles to be included in the correct order.

Ensure that you set allow_duplicates: yes

---
allow_duplicates: yes
dependencies:
  - { role: app-install-rpms,           tags: ['rpms'] }
  - { role: app-java-config,            tags: ['config'] }
  - { role: app-directories,            tags: ['dirs'] }
  - { role: app-config-site_management, tags: ['site_management'] }
  - { role: app-config-initd,           tags: ['initd'] }
  - { role: tomcat-boapp,               tags: ['config'] }

This allows us to in essence call a role from a role.

참고URL : https://stackoverflow.com/questions/26551422/ansible-include-role-in-a-role

반응형