하나의 플레이북을 사용하여 다양한 서버에 다양한 역할 배포

하나의 플레이북을 사용하여 다양한 서버에 다양한 역할 배포

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모두에 대해 두 가지 다른 정의가 있다고 불평합니다 . hostsroles

관련 정보