Ansible 문서에 따르면 플레이 북
은 다음과 같습니다.
… 이미 존재하는 것과는 달리 정말 단순한 구성 관리 및 다중 시스템 배포 시스템의 기초이며 복잡한 응용 프로그램을 배포하는 데 매우 적합합니다.
그리고 동일한 문서에 따르면 역할
은 다음과 같습니다.
… 알려진 파일 구조를 기반으로 특정 vars_files, 작업 및 핸들러를 자동으로로드하는 방법. 역할별로 콘텐츠를 그룹화하면 다른 사용자와 역할을 쉽게 공유 할 수 있습니다.
그러나 이것들과 다른 사용 사례 사이의 차이점은 나에게 즉시 분명하지 않습니다. 예를 들어 내 /etc/ansible/hosts
파일을 다음과 같이 구성하면
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
… 그러면이 ” [databases]
“항목 은 무엇 입니까 … 역할 입니까? 아니면 플레이 북 YAML 파일의 이름이 어딘가? 또는 다른 것?!?
누군가가 이것들의 차이점을 설명해 줄 수 있다면 Ansible에 대한 이해가 크게 향상 될 것입니다!
- 플레이 북 대 역할 대
[databases]
및 유사한 항목/etc/ansible/hosts
- Playbook이 YAML 파일 내부에 정의 된 경우 역할은 어디에 정의됩니까?
ansible.cfg
Ansible 서버에있는 것 외에도 사용 가능한 플레이 북 / 역할을 사용하여 Ansible을 추가 / 구성하려면 어떻게해야합니까? 예를 들어를 실행할 때ansible-playbook someplaybook.yaml
Ansible은 해당 플레이 북을 찾을 수있는 위치를 어떻게 알 수 있습니까?
답변
플레이 북 vs 역할 vs [데이터베이스] 및 / etc / ansible / hosts의 유사한 항목
[databases]
호스트 그룹의 단일 이름입니다. 단일 이름으로 여러 호스트를 참조 할 수 있습니다.
역할은 특정 역할 을 수행하도록 호스트를 구성하기위한 일련의 작업 및 추가 파일 입니다.
플레이 북은 호스트와 역할 간의 매핑입니다.
문서의 예제 는 예제 프로젝트를 설명합니다. 여기에는 두 가지가 포함됩니다.
- 플레이 북.
site.yml
,webservers.yml
,fooservers.yml
플레이 북이다. - 역할 :
roles/common/
및roles/webservers/
정의 포함common
및webservers
역할에 따라 있습니다.
플레이 북 ( webservers.yml
)에는 다음과 같은 내용이 있습니다.
---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
roles: <- this is list of roles to assign to these hosts
- common
- webservers
Playbook이 YAML 파일 내부에 정의 된 경우 역할은 어디에 정의됩니까?
그들은 roles/*
디렉토리 내부에 정의됩니다 . 역할은 주로 YAML 파일을 사용하여 정의되지만 모든 유형 ( files/
, templates/
)의 리소스를 포함 할 수도 있습니다 . 문서 에 따르면 역할 정의는 다음과 같이 구성됩니다.
- roles / x / tasks / main.yml이 존재하면 그 안에 나열된 작업이 연극에 추가됩니다.
- roles / x / handlers / main.yml이 존재하면 여기에 나열된 핸들러가 연극에 추가됩니다.
- roles / x / vars / main.yml이 존재하면 거기에 나열된 변수가 연극에 추가됩니다.
- roles / x / meta / main.yml이있는 경우 여기에 나열된 모든 역할 종속성이 역할 목록 (1.3 이상)에 추가됩니다.
- 모든 복사 작업은 상대적으로 또는 절대적으로 경로를 지정하지 않고도 roles / x / files /의 파일을 참조 할 수 있습니다.
- 모든 스크립트 작업은 상대적으로 또는 절대적으로 경로를 지정하지 않고도 roles / x / files /의 스크립트를 참조 할 수 있습니다.
- 모든 템플릿 작업은 상대적으로 또는 절대적으로 경로를 지정하지 않고도 roles / x / templates /의 파일을 참조 할 수 있습니다.
- 모든 포함 작업은 상대적으로 또는 절대적으로 경로를 지정하지 않고도 roles / x / tasks /의 파일을 참조 할 수 있습니다.
가장 중요한 파일은 roles/x/tasks/main.yml
여기에서 역할이 실행될 때 실행될 작업을 정의합니다.
Ansible 서버에있는 ansible.cfg 외에 사용 가능한 플레이 북 / 역할을 사용하여 Ansible을 추가 / 구성하려면 어떻게해야합니까? 예를 들어 ansible-playbook someplaybook.yaml을 실행할 때 Ansible은 해당 플레이 북을 찾을 위치를 어떻게 알 수 있습니까?
$ ansible-playbook someplaybook.yaml
현재 디렉토리에서 플레이 북을 찾습니다.
$ ansible-playbook somedir/somedir/someplaybook.yaml
somedir/somedir/
디렉토리 에서 플레이 북을 찾습니다 .
모든 플레이 북과 역할이 포함 된 프로젝트를 서버에 배치하는 것은 귀하의 책임입니다. Ansible은 그와 관련이 없습니다.
답변
플레이 북 vs 역할 vs [데이터베이스] 및 / etc / ansible / hosts의 유사한 항목
역할은 작업을 하나의 컨테이너로 그룹화하는 방법입니다. MySQL 설정 역할, Postfix 설정 역할 등이있을 수 있습니다.
각본을 정의 무슨 일이 일어나고 곳 . 호스트 (호스트 그룹, 아래 참조) 및 해당 호스트에 적용될 역할을 정의하는 곳입니다.
[databases]
인벤토리의 다른 항목은 호스트 그룹입니다. 호스트 그룹은 플레이가 실행될 호스트 세트를 정의합니다.
연극은 플레이 북 내의 일련의 작업 또는 역할 (또는 둘 다)입니다. 대부분의 경우 (및 예) 플레이 북에는 단일 플레이 만 포함됩니다. 하지만 원하는만큼 가질 수 있습니다. 즉, 당신은 역할을 실행하는 작전 할 수 postfix
hostgroup에 mail_servers
와 역할 mysql
hostgroup에를 databases
:
- hosts: mail_servers
roles:
- postfix
- hosts: databases
roles:
- mysql
Playbook이 YAML 파일 내부에 정의 된 경우 역할은 어디에 정의됩니까?
Ansible에서는 거의 모든 것이 YAML로 정의되어 있으며 역할과 플레이 북이 중요합니다.
Ansible 서버에있는 ansible.cfg 외에 사용 가능한 플레이 북 / 역할을 사용하여 Ansible을 추가 / 구성하려면 어떻게해야합니까? 예를 들어 ansible-playbook someplaybook.yaml을 실행할 때 Ansible은 해당 플레이 북을 찾을 위치를 어떻게 알 수 있습니까?
AFAIK를 호출 할 때 플레이 북 경로를 제공해야합니다 ansible-playbook
. 따라서 현재 디렉토리에 ansible-playbook someplaybook.yaml
있을 것으로 예상 someplaybook.yaml
됩니다. 그러나 전체 경로를 제공 할 수 있습니다.ansible-playbook /path/to/someplaybook.yaml
답변
용어 / 의미 적 질문입니다. 기준선 정의가 있더라도 주관적 일 수 있습니다.
내 견해는 다음과 같습니다.
모든 구성 관리 / 배포 시스템에는 다음이 포함됩니다.
source data
-대상 호스트의 구성을 만드는 데 사용되는 데이터target data
-대상 호스트를 식별하는 데 사용되는 데이터config changes
–source data
대상 호스트에 적용되는 규칙 / 작업 목록 / 세트target data
Ansible 용어 :
source data
-우리가 데이터를 넣을 수있는 다양한 장소입니다-group_vars
,playbook
vars,role
vars 등. 이러한 장소는 우선 순위에 영향을 미칩니다.ansible
/ansible-playbook
실행 중 변수target data
-인벤토리입니다 (또한 인벤토리 내부에 인벤토리 / 호스트 그룹 변수를 정의 할 수도 있습니다!)config changes
-ansible에는 4 가지 수준의 추상화가 있습니다.- 작업-단일 작업
- 작업 목록-작업 목록
- role-동일한 ‘주체’별로 그룹화 된 작업 목록 (또는 목록 목록), 일반적으로 모든 대상이 동일한 호스트 / 호스트 그룹에서 작동합니다.
- 플레이 북-각기 다른 호스트 그룹에서 작동하는 플레이 목록, 여러
role
s /task
s / 작업 목록 (및 같은 특수 작업handlers
)을 적용합니다.
‘소프트웨어’측면에서 역할은 재사용 할 수있을만큼 일반적이어야합니다 .
또한 일부 (다소 큰) 조직에서는 ‘역할’이 그룹 A에 의해 제공되고 그룹 B가 유지 관리하는 플레이 북에 사용됩니다.
요약
위의 모든 기능을 통해 유사한 구성을 role
. 관련 하위 시스템 / 구성 요소를 하나로 그룹화합니다 playbook
. 또한, 언급 할만큼 가치, 각본 1 개 YAML 항목 (포함 hosts:
및 하나 또는 tasks
, pre_tasks
, post_tasks
, roles
불리는한다)play
이제 귀하의 질문에 대해 :
예, 처음에는 혼란 스럽습니다.
일반적으로 source data
역할의 의미 체계에 연결하므로 해당 역할 setup_db
이 연극에서 관련 호스트 그룹에 적용되는 것을 볼 때 (예 🙂 db_hosts
그러나 a play
는 여러 호스트 그룹의 결합에서 실행될 수 있습니다. 그것은 단지 관습과 유연성의 문제입니다.
추신
이것이 혼란을 더했는지 또는 명확히했는지 답장 해주세요. 감사.
답변
또한 다른 역할에 영향을주는 메타 파일이 사용되는 경우 플레이 북이 둘 이상의 역할을 호출 할 수 있다는 점을 기억하십시오.
예제 플레이 북 : dual_role-playbook.yml
- name: Some Action for two roles
hosts: localhost
vars_files:
- roles/dual_role/meta/main.yml
roles:
- dual_role/container-1
- dual_role/container-2
역할 폴더 및 파일 구성표는 다음과 같습니다.
dual_role-playbook.yml
-- roles
-- dual_role
-- meta/main.yml
-- container-1
-- tasks/main.yml
-- templates/template.j2
-- container-2
-- tasks/main.yml
-- templates/template.j2
답변
간단히 말해서:
플레이 북은 메인 프로그램과 같으며 작업을 완료하기위한 완전한 지침을 담고 있습니다. 그러나 큰 프로젝트의 경우 실제로 모든 세부 사항을 입력하는 것은 바람직하지 않습니다. 따라서 역할이 필요합니다.
역할은 서브 루틴이며 일반적으로 데이터베이스 서버 설정과 같은 하나의 목표를 달성합니다. 당신은 그것을 넣을 수 있습니다 roles/
디렉토리, 또는에서 URI를 제공하여 제 3 자 역할을 다운로드 rolesfile.yml
물어 ansible – 은하계를 당신을 위해 그 (것)들을 다운로드 할 수 있습니다.
는 [database]
에 정의 된 호스트 그룹 인벤토리 파일 목록 호스트합니다에 속하는 것으로 database
그룹. 다음과 같이 지정하여 웹 서버 그룹을 지정할 수도 있습니다.
[web]
web1.example.com
web2.example.com
그룹화 web
하거나 database
그런 다음 플레이 북 또는 역할에서 사용하여 적용 할 호스트를 지정할 수 있습니다.
그룹은 명령 ansible
에서 임시 명령 을 실행 하는 데 사용할 수도 있습니다 .