
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
원래 두 번째 예에서는 단일 극만 정의됩니다. 게다가 해당 극에서는 the hosts
와 키워드가 두 번 정의됩니다. YAML은 및 키워드 roles
모두에 대해 두 가지 다른 정의가 있다고 불평합니다 . hosts
roles