2016-12-06 8 views
6

를 호스팅 : ansible 2.3.0 ((STABLE)의 2131eaba0c) I 외부 변수로 내 호스트 변수를 지정하고 플레이 북을 사용하려는Ansible : 각본을 정의하기위한 사용 변수 나는 다음 버전이 설치 한

유사한 이것에 내 group_vars에서

hosts: "{{integration}}" 

/모든 파일 I 다음과 같은 정의 변수가 있습니다

호스트 파일은 다음과 같습니다

[int60] 
hostA 

[int61] 
hostB 

불행하게도이 작동하지 않습니다.

[integration] 
127.0.0.1 ansible_host="{{ integration_env }}" 

을 내 group_vars에 지정된 integration_env/모든 파일이 : 나는 또한 다음과 같은 방법으로 호스트 VAR을 정의하기 위해 노력했다. 이 경우 원하는 작업 환경이 아니라 로컬로 작업을 실행 한 것처럼 보였습니다.

이렇게 할 수 있습니까? 나는이 일을하는 완전히 새로운 방식에 열려있을 것이다. 주요 목표는 단순히 호스트 파일을 var 파일에 정의하는 것입니다.

답변

7

당신이 여분의 변수로 integration 변수를 전달하면이 작동합니다 Ansible가 각본을 구문 분석하기 전에 플레이 "헤더"에 사용

ansible-playbook -e integration=int60 myplaybook.yml 

모든 변수는 정의되어야한다.

예제에서 호스트 사실로 integration을 정의합니다. 사실은 작업 수준에서만 정의되며 재생 수준에서는 정의되지 않습니다.

업데이트 : 그리고 추가 변수를 전달하는 다른 방법을 사용할 수 있습니다. 예 :

- hosts: "{{ lookup('env','DYN_HOSTS') }}" 

도 작동합니다.

+0

빠른 답변 감사드립니다. 나는 그런 해결책을 보았습니다. 그러나 나는 여분의 변수를 넘겨 줄 수없는 젠킨스 직업 (그리고 유력한 플러그인)을 통해 실행할 수 있기 때문에 이것은 저에게 효과적이지 않을 것입니다. 또한, 나는 다음 작업이 다른 환경을 선택할 수 있도록 가능한 작업에서 통합 변수를 변경해야합니다. 다른 솔루션을 알고 있습니까? – Vetemi

+0

다른 답변으로 내 대답을 업데이트했습니다. –

+0

jenkins anipal 플러그인은 추가 변수를 허용합니다. Jenkins에서 Ansible 단계를 만들 때 '고급'옵션 아래에 숨겨져 있습니다. –