Fe "ansible-galaxy init"를 통해 두 가지 역할(deploy_back 및 배포_front)을 만들었습니다.
나는 또한 playbook.yml 파일을 작성했습니다.
- name: Create cluster
become: yes
hosts: all
roles:
- deploy_front
- deploy_back
"ansible-playbook playbook.yml"을 통해 시작하면 두 서버 모두에 두 가지 역할이 배포됩니다. 플레이북의 다양한 서버에 다양한 캐릭터를 배포하는 방법은 무엇입니까?
playbook.yml을 작성하면
- name: Create cluster
become: yes
hosts: front
roles:
- deploy_front
hosts: db
roles:
- deploy_db
그러면 출력은 "...중복 사전 키 발견(호스트) ...중복 사전 키 발견(역할) ...마지막으로 정의된 값만 사용됨".
답변1
귀하의 hosts:
진술과 다른 진술을 다른 스크립트로 분리해야합니다. 코드는 다음과 같아야 합니다.
- name: Create front cluster
become: yes
hosts: front
roles:
- deploy_front
- name: Create db cluster
become: yes
remote_user: different-db-user
hosts: db
roles:
- deploy_db
답변2
"중복 키" 메시지가 표시되는 이유는 YAML의 구조 때문입니다.
스크립트는 순서가 지정된 목록 형식의 스크립트 모음입니다. 각 재생은 일련의 키워드/값 쌍으로 지정됩니다. 흔한놀다name
키워드는 , hosts
, become
및 입니다 roles
.
YAML에서는 목록의 다른 항목을 지정하기 위해 대시( -
) 문자를 사용할 수 있습니다. 두 예제 스크립트 모두 playbook.xml
가장 왼쪽에 대시 문자만 있습니다. 이는 연극 또는 연극 대본에 대해 하나의 항목 목록만 있다는 것을 의미합니다.
hosts
두 번째 예에서 두 번째 선언 앞에 대시 문자를 추가하면 playbook.yml
이제 두 개의 플레이북이 포함된 유효한 플레이북이 생성됩니다.
- name: Create cluster
become: yes
hosts: front
roles:
- deploy_front
- hosts: db
roles:
- deploy_db
원래 두 번째 예에서는 단일 재생만 정의됩니다. 또한 hosts
및 roles
키워드는 한 번의 일치에서 두 번 정의됩니다. YAML은 hosts
및 키워드에 대해 roles
서로 다른 두 가지 정의가 있다고 불평합니다.