2017-01-27 11 views
0

두 가지 역할이 모두 작업 목록과 함께 있습니다.책임있는 DRY (반복하지 말것)

- name: Ensure bible server is running 
    command: npm run forever 
    args: 
    chdir: ~/bible-server 
    when: "foreverlist.stdout.find('bibleServer.js') == -1" 

예 역할 B 태스크 :

그러나 일부 (전부) 역할 A의 태스크 역할 B

예 역할 태스크의 태스크 거의 동일

- name: Ensure certs server is running 
    command: npm run forever 
    args: 
    chdir: ~/certs-server 
    when: "foreverlist.stdout.find('certsServer.js') == -1" 

함수를 선언하고 인수를 전달하는 것처럼 내가 태스크를 선언 할 수 있도록 태스크를 매개 변수화 할 수 있습니까?

+0

그게 바로 변수입니다. 나는 그 질문에 완전히 혼란 스럽다. – techraf

+0

하나의 작업을 정의하고이를 다른 역할에서 호출하는 것이면 그것은 정당한 문제입니다. 어쨌든 코드에서 콜론을 여러 번 반복합니다. – techraf

답변

2

예, 가능하면 인벤토리의 대상입니다. 인벤토리에서 구성을 변수로 지정하십시오. 두 역할이 동일한 호스트에있는 경우 사전을 사용할 수 있습니다. 그런 다음 사전을 반복하여 각 구성에서 작업을 반복합니다. inventory에서

: 작업에서 다음

servers: 
    - path: bible-server 
    script: bibleServer.js 
    - path: cert-server 
    script: certServer.js 

:

높은 수준의 개요를의
- name: Ensure Servers are running 
    command: npm run forever 
    args: 
    chdir: "~/{{ item.path }}" 
    when: "foreverlist.stdout.find('{{ item.script }}') == -1" 
    with_items: "{{ servers }}" 

. 나는 그것이 사용의 핵심 원칙 Anabilities 있기 때문에 inventory에서 읽기를 적극 권장합니다. loops에서 읽으십시오.

+0

그러나 OP에는 두 가지 역할이 있습니다. 모든 역할이 아닌 일부 작업이 동일합니다. 어떻게 대답할까요? – techraf