2016-06-09 1 views
0

저는 제품 및 응용 프로그램의 구성 파일, 유지 관리 스크립트의 배포 등과 같은 다양한 종류의 응용 프로그램을 관리하기 위해 Anipal을 구현하려고했습니다.UNIQUE 사용자/호스트 조합에 대한 유용한 지침서를 실행하십시오.

우리 팀은 무의미한 이름을 가진 300 개 이상의 호스트가 있기 때문에 "호스트 이름"을 사용하지 않습니다. 그 때문에, 나는 Ansible 호스트에 그들을 위해 별칭을 만드는 시작처럼 파일 :

[bpm-i] 
bpm-app1-i1 ansible_user=bpmadmin ansible_host=el1001.bc 
bpm-app1-i2 ansible_user=bpmadmin ansible_host=el1003.bc 

[bpm-u] 
bpm-app1-u1 ansible_user=bpmadmin ansible_host=el2001.bc 
bpm-app1-u2 ansible_user=bpmadmin ansible_host=el2003.bc 

[bpm-all:children] 
bpm-i 
bpm-u 

우리가 "APP1"라는 이름의 BPM의 응용 프로그램이 있고이 통합 테스트에서 두 호스트와 사용자 - 두 개의 호스트에 배포있어 의미 수락 테스트. 여태까지는 그런대로 잘됐다. 이제 (예를 들어) 팀 멤버에 대한 SSH 액세스 (authorized_keys)를 설정하거나 유지 관리 스크립트를 푸는 Ansible 플레이 북을 실행할 수 있습니다. 각 PBT를 각 호스트에서 개별적으로, 모든 호스트 ITT 또는 UAT 또는 심지어 모든 곳에서 실행할 수 있습니다.

그러나 일반적으로 우리는 기존 호스트에 동일한 응용 프로그램을 다시 설치하지만 "교육"환경과는 다른 용도로 사용합니다. 내 반사는이 작업을 수행하는 것입니다 :

[bpm-i] 
bpm-app1-i1 ansible_user=bpmadmin ansible_host=el1001.bc 
bpm-app1-i2 ansible_user=bpmadmin ansible_host=el1003.bc 

[bpm-u] 
bpm-app1-u1 ansible_user=bpmadmin ansible_host=el2001.bc 
bpm-app1-u2 ansible_user=bpmadmin ansible_host=el2003.bc 

[bpm-t] 
bpm-app1-t1 ansible_user=bpmadmin ansible_host=el2001.bc 
bpm-app1-t2 ansible_user=bpmadmin ansible_host=el2003.bc 

[bpm-all:children] 
bpm-i 
bpm-u 
bpm-t 

하지만 ... 실행 PB의 지금 엉망이되고 오류가 발생합니다. 논리적으로 동일한 사용자/호스트 조합 (bpm-app1-u1 및 bpm-app1-t1)에 도달하는 두 개의 별명이 있습니다. 괜찮 았어, 그건 완벽하게 논리적이지만, 만약 내가 새로운 유지 보수 스크립트를 테스트한다면, 나는 먼저 bpm-app1-i1에 테스트를 맡기고, 괜찮 으면 bpm-all에 대해서 PB를 돌릴 것이다. 그러나 일부 별칭에 대해 고유하지 않은 사용자/호스트 조합으로 인해 PB는 동일한 사용자/호스트에서 여러 번 실행됩니다. PB의 동작에 따라 우연히 작동하지만 무시할 수도 있습니다.

Ansible "ALL - UNIQUE 사용자/호스트 조합 실행"을 말할 수있는 방법이 있습니까?

+0

위의 코멘트 : 이것은 양식화 된 예입니다. 별명의 이름을 변경하고 u1과 t1 (및 u2와 t2)을 다른 별명으로 그룹화하는 것은 옵션이 아니며 "t"가없는 "u"만이 옵션이 아닙니다. 중요 사항은 다음과 같습니다. "모든"호스트에 대해 게임을 실행할 때 두 번 사용자/호스트에서 게임 플레이를 실행하지 않는지 확인하십시오. – domi756

+0

"t"호스트가 "u"호스트와 같은 이름을 가져야하는 이유를 이해하지 못했습니다. 호스트 이름은 고유해야합니다. 그러나 일반적으로 서로 다른 환경에 서로 다른 인벤토리 파일을 사용하는 것이 좋습니다. 실수로 잘못된 호스트 집합을 사용하지 못하도록 방지하기위한 추가 예방 조치입니다. 이 원인은 문제를 해결하지 못하지만 다른 호스트 파일을 사용하면 각 인벤토리 파일을 별도로 여러 번 호출 할 수 있습니다. 그러면 고유하지 않은 호스트 이름 문제가 해결됩니다. – udondan

+0

그러나 host_vars를 개별적으로 정의 할 수 없으며 사실 캐싱을 사용할 수 없기 때문에 동일한 이름을 가진 다른 호스트간에 충돌이 발생합니다. – udondan

답변

0

대부분의 작업이 원격 호스트에서 변경되기 때문에 Conditionals을 사용하여 실행 전에 호스트의 변경 사항을 확인할 수 있습니다. 당신의 각본 스크립트 원격 호스트의 파일을 생성 을 실행하는 작업이있는 경우 그 존재를 확인 "파일이 존재하는 경우 작업을 건너"및

예를 들어, 당신은 할 when 절을 추가 할 수 있습니다 파일 앞에 stat 작업이있는 파일을 업로드하십시오.

- Check whether script has run in previous instance by looking for file 
    stat: path=/path/to/something 
    register: something 

- name: Run Script when file above does not exist 
    command: bash myscript.sh 
    when: not something.exists 
+0

힌트를 주셔서 감사합니다, 그것은 주위에 해결로 작동 할 수 있지만 그것은 물론 playbooks에서 할 수있는 더 많은 작업을 의미합니다. 조건을 정의한 다음 Ansible에서 구현할 수 있어야합니다. 전자는 모든 경우에 적용 가능합니다. 후자는 Ansible의 한계를 감안할 때 더 어렵습니다. 아이디어를 주셔서 감사합니다. 확실히 살펴 보겠습니다. – domi756

관련 문제