2014-10-24 5 views
37

역할에서 역할을 재사용 할 수 있습니까? 나는 역할의 meta/main.yml 파일에 종속성을 정의하는 것을 의미하지 않지만을 포함한 에 의해 다른 역할의 task/main.yml에서의 역할을 직접적으로 의미합니까?책임있는 역할 : 역할에 역할 포함?

예를 들어 롤북에 몇 가지 기본적인 역할을 정의하고 역할에 몇 가지 상위 수준 역할을 정의합니다. 몇 가지 특정 작업 외에도 기본 역할을 포함하는 상위 수준 역할을 원합니다. 플레이 북/역할/webtier/작업/main.yml에서

playbooks/ 

    rolebooks/ 
    some_role/ 

    roles/ 
    webtier/ 
     tasks/ 
     main.yml 

:

답변

11

AFAIK

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

감사합니다, 당신은 할 수 없습니다. 이것이 종속성입니다.

역할을 :

당신이 작업이 관련되어 생각하는 경우 (예를 들어, 두 작업 사이에 실행하도록 '역할 X'를 원하기 때문에), 당신은 각본 자체에서이 작업을 수행 할 수 있습니다 종속성을 피하려면

/webtier/tasks/main.yml :

무엇보다 정확하게 수행하려는 작업에 따라 다릅니다. 그러나 귀하의 예에서 '여전히 바쁜'은 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 
5

을,하지만 당신은 유사한의 어떤 종류의 작업을 수행 할 수 있습니다

물론, 당신은 또한 (이미 할 아마도 것입니다) 마스터 각본에 역할을 시퀀싱 할 수 있습니다. 당신이 일반적인 수입 구조를 사용하지 않을 때문에, 당신은으로 실행할 수 있다는

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

참고 :

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

nginx/tasks/main.yml에서, 당신은 당신의 일반적인 작업을 호출 할 수의 레이아웃에 대한

당신이 표준 방식으로 역할을 이전에 포함시키지 않으면 접근 할 수없는 역할 디폴트 변수와 같은 "이상한"것.

+1

설명했듯이이 기능은 역할 기본값, 처리기 등을 가져 오지 못해 유용성이 심각하게 제한됩니다. – augurar

+0

예, 그 이유가 포함되어 있습니다. 그것들은 휴식들입니다. playbooks 또는'meta/main.yml'은 구조의 단위이기도하지만, 우리 중 일부는이 목적을 더 잘 수행한다고 생각합니다. –

+2

이 솔루션은 역할을 포함하는 방법을 보여주지 않습니다 *. 매우 다른 역할의 주요 플레이 북을 포함하는 방법을 보여줍니다. – marcv81

1

난 당신이 메타가 dependency.yml이 역할의 수를 할 수 있습니다

포함하는/포함하는 역할을 만들 메타 의존하지만 난 때우기 최고의 솔루션이 사용하지 않는 것을 특징으로하는 감사 올바른 순서로

는 allow_duplicates를 설정했는지 확인 : 예

--- 
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'] } 

이 본질적으로 역할에서 역할을 전화로 우리를 할 수 있습니다.

37

이전 질문 BUT 의 경우 : 2.2+를 사용하고 include_role으로가 보는 것이 좋습니다. 바로이 목적을 위해 ... here 문서를 참조하십시오.