하나의 스크립트에서 다른 플레이 북에 다른 호스트를 지정하는 방법


9

알다시피, 각 플레이 북에는 하나의 호스트 항목이 필요합니다. 다른 플레이 북이 포함 된 컨테이너 플레이 북을 만드는 경우 각 플레이 북 포함에 대해 호스트를 매개 변수화 할 수 있다는 것을 알고 싶습니다. 그래서 같은

---
- include playbook_1.yml
    hosts: tag_postgres
- include: playbook_2.yml
    hosts: tag_rabbitmq

모든 다른 플레이 북을 하나의 스크립트에 넣고 호출 할 수는 있지만이 방법으로 하나의 플레이 북에서 다른 플레이 북으로 일부 set_fact를 재사용 할 수 없으므로 많은 작업 복제가 있습니다.

질문의 또 다른 평론은 아마존에서 ec2를 시작할 수 있습니까?

hosts: localhost

기본적으로 인벤토리를 구성 -i ec2.py하고 호스트를 다음과 같이 지정 하는 시작된 ec2의 구성

hosts: tag_<some_tag>

동일한 플레이 북 또는 포함 된 플레이 북 (다른 역할)을 통해 발생합니까?


당신은 hosts:당신의 yaml에 하나 이상의 섹션을 가질 수 있고 본질적으로 인벤토리에 다른 호스트 그룹을 사용하는 여러 플레이 북을 가지고 있다는 것을 알고 있습니까?
Yonsy Solis

답변:


4

실제로 플레이 북당 섹션을 두 개 이상 가질 수 있습니다. 호스트 : 새로운 플레이를 시작한 것으로 보입니다. 예를 들어 http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/를 참조 하십시오 .

이와 같은 것이 저에게 효과적입니다 (2.2 가능).

---
- hosts: localhost 
  connection: local
  roles:
    - { role: ec2,
        tag: 'master',
        instance_type: t2.2xlarge,
        count: 1
      }
  tasks:
  - shell: hostname # reports localhost

- hosts: tag_master
  tasks:
  - shell: hostname # reports instance(s) with tag 'master'

따라서 호스트 :를 include : 다음이 아니라 포함 된 각 .yml의 맨 위에 두십시오.


4

http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts

... 변수를 가져올 수있는 다른 곳이 있지만 사용자가 설정하지 않고 검색된 변수 유형입니다.

사실은 원격 시스템과의 대화에서 파생 된 정보입니다 ...

사실은 원격 호스트에서 파생됩니다. 따라서 * .yml 파일에 여러 플레이 북 이 있을 때 일반적으로 다른 호스트간에 사실 을 공유 할 수있는 이유가 있습니다 .

이제 플레이 북의 다른 부분에서 이와 같은 작업을 수행하면 다른 호스트의 사실에 액세스 할 수 있습니다.

{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}

그러나이 경우에는 이것을 사용 하기 전에 사실을 알아야한다는 것을 기억해야합니다 . 그런 다음 모든 호스트에 대한 모든 팩트를 가져 오거나이를 위해 팩트 캐싱을 사용하는 플레이 북의 첫 번째 부분을 설정할 수 있습니다 ( http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching 참조 ).

이제 플레이 북에서 옵션을 공유하고 싶다면 정보를 다시 생각하여 변수를 넣는 것이 더 좋을 수 있습니다.이를 통해 동일한 include지침으로 변수를 "공유"할 수 있습니다 .

http://docs.ansible.com/ansible/playbooks_variables.html#variables-defined-from-included-files-and-roles


2
내 질문은 일반적인 변수가 아니라 호스트에 매우 구체적이었습니다. 호스트가없는 마스터 플레이 북을 만들 수 있어야하지만 포함 된 각 플레이 북에는 호스트가 포함되어 있거나 매개 변수로 제공 될 수 있습니다. 나는 항상 그것들을 별도의 플레이 북으로 운영 할 수 있지만, 하나에서 얻은 사실은 다음으로 넘어 가지 않기 때문에 많은 중복이 있습니다
Pankaj Lal

위의 내용을 다시 읽으십시오. "이제 플레이 북의 다른 부분에서 이와 같은 작업을 수행하면 다른 호스트의 사실에 액세스 할 수 있습니다.하지만이 경우 사용하기 전에 사실을 얻어야한다는 것을 기억해야합니다. 이 "따라서 예, 마스터 플레이 북에 포함 된 플레이 북간에 사실을 공유 할 수 있습니다.
Yonsy Solis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.