알다시피, 각 플레이 북에는 하나의 호스트 항목이 필요합니다. 다른 플레이 북이 포함 된 컨테이너 플레이 북을 만드는 경우 각 플레이 북 포함에 대해 호스트를 매개 변수화 할 수 있다는 것을 알고 싶습니다. 그래서 같은
---
- 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>
동일한 플레이 북 또는 포함 된 플레이 북 (다른 역할)을 통해 발생합니까?
답변
실제로 플레이 북당 섹션을 두 개 이상 가질 수 있습니다. 호스트 : 새로운 플레이를 시작한 것으로 보입니다. 예를 들어 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의 맨 위에 두십시오.
답변
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
지침으로 변수를 “공유”할 수 있습니다 .