Ansible 플레이 북과 역할


98

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.cfgAnsible 서버에있는 것 외에도 사용 가능한 플레이 북 / 역할을 사용하여 Ansible을 추가 / 구성하려면 어떻게해야합니까? 예를 들어를 실행할 때 ansible-playbook someplaybook.yamlAnsible은 해당 플레이 북을 찾을 수있는 위치를 어떻게 알 수 있습니까?

1
역할은 필요에 따라 모든 플레이 북에서 사용할 수있는 일반화 된 "라이브러리"에 기능을 넣어 플레이 북의 코드를 재사용 할 수 있도록하는 방법입니다.
Juan Jimenez

tasks물건을. playbooks작업을 구성하고 시작합니다. roles특정 기능을 수행하는 작업, 핸들러 등의 묶음을 구성합니다. (s) playbook를 시작하려면 일부 가 필요합니다 role. roles및 컬렉션을 무엇이라고 부르 playbooks겠습니까? 예를 들어 귀하의 사이트에있는 모든 호스트의 구성을 관리하는 업체가 있습니까?
fbicknel

답변:


111

플레이 북 vs 역할 vs [데이터베이스] 및 / etc / ansible / hosts의 유사한 항목

[databases]호스트 그룹의 단일 이름입니다. 단일 이름으로 여러 호스트를 참조 할 수 있습니다.

역할은 특정 역할 을 수행하도록 호스트를 구성하기위한 일련의 작업 및 추가 파일 입니다.

플레이 북은 호스트와 역할 간의 매핑입니다.

문서의 예제 는 예제 프로젝트를 설명합니다. 여기에는 두 가지가 포함됩니다.

  • 플레이 북. site.yml, webservers.yml, fooservers.yml플레이 북이다.
  • 역할 : roles/common/roles/webservers/정의 포함 commonwebservers역할에 따라 있습니다.

플레이 북 ( 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은 그와 관련이 없습니다.


감사합니다 @Yaroslav Admin (+1)-한 가지 빠른 후속 질문 : 역할이 디렉토리 내부에 정의되어 있다고 말했지만 실제로 역할을 설정하는 것은 무엇입니까? 즉, webservers.yml플레이 북은 [webservers]호스트를 commonwebservers역할에 매핑합니다 . 그러나 common역할에 정확히 무엇이 포함 됩니까? 디렉토리에서 정의 할 방법이 없습니다. 일반적으로 "역할 디렉토리"내에 YAML 파일이 있습니까? 다시 한 번 감사드립니다!
smeeb

@smeeb 예, 맞습니다. 역할은 해당 디렉터리 내의 파일에 의해 정의됩니다. 대부분 YAML이지만 다른 유형의 파일도 포함 할 수 있습니다. 자세한 내용은 업데이트 된 답변을 참조하십시오.
Yaroslav Admin

36

플레이 북 vs 역할 vs [데이터베이스] 및 / etc / ansible / hosts의 유사한 항목

역할은 작업을 하나의 컨테이너로 그룹화하는 방법입니다. MySQL 설정 역할, Postfix 설정 역할 등이있을 수 있습니다.

각본을 정의 무슨 일이 일어나고 . 호스트 (호스트 그룹, 아래 참조) 및 해당 호스트에 적용될 역할을 정의하는 곳입니다.

[databases]인벤토리의 다른 항목은 호스트 그룹입니다. 호스트 그룹은 플레이가 실행될 호스트 세트를 정의합니다.

연극은 플레이 북 내의 일련의 작업 또는 역할 (또는 둘 다)입니다. 대부분의 경우 (및 예) 플레이 북에는 단일 플레이 만 포함됩니다. 하지만 원하는만큼 가질 수 있습니다. 즉, 당신은 역할을 실행하는 작전 할 수 postfixhostgroup에 mail_servers와 역할 mysqlhostgroup에를 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


13

용어 / 의미 적 질문입니다. 기준선 정의가 있더라도 주관적 일 수 있습니다.

내 견해는 다음과 같습니다.

모든 구성 관리 / 배포 시스템에는 다음이 포함됩니다.

  1. source data -대상 호스트의 구성을 만드는 데 사용되는 데이터
  2. target data -대상 호스트를 식별하는 데 사용되는 데이터
  3. config changes- source data대상 호스트에 적용되는 규칙 / 작업 목록 / 세트target data

Ansible 용어 :

  1. source data-우리가 데이터를 넣을 수있는 다양한 장소입니다- group_vars, playbookvars, rolevars 등. 이러한 장소는 우선 순위에 영향을 미칩니다. ansible/ ansible-playbook실행 중 변수
  2. target data -인벤토리입니다 (또한 인벤토리 내부에 인벤토리 / 호스트 그룹 변수를 정의 할 수도 있습니다!)
  3. config changes -ansible에는 4 가지 수준의 추상화가 있습니다.
    1. 작업-단일 작업
    2. 작업 목록-작업 목록
    3. role-동일한 '주체'별로 그룹화 된 작업 목록 (또는 목록 목록), 일반적으로 모든 대상이 동일한 호스트 / 호스트 그룹에서 작동합니다.
    4. 플레이 북-각기 다른 호스트 그룹에서 작동하는 플레이 목록, 여러 roles / tasks / 작업 목록 (및 같은 특수 작업 handlers)을 적용합니다.

'소프트웨어'측면에서 역할은 재사용 할 수있을만큼 일반적이어야합니다 .

또한 일부 (다소 큰) 조직에서는 '역할'이 그룹 A에 의해 제공되고 그룹 B가 유지 관리하는 플레이 북에 사용됩니다.

요약

위의 모든 기능을 통해 유사한 구성을 role. 관련 하위 시스템 / 구성 요소를 하나로 그룹화합니다 playbook. 또한, 언급 할만큼 가치, 각본 1 개 YAML 항목 (포함 hosts:및 하나 또는 tasks, pre_tasks, post_tasks, roles불리는한다)play

이제 귀하의 질문에 대해 :

예, 처음에는 혼란 스럽습니다.

일반적으로 source data역할의 의미 체계에 연결하므로 해당 역할 setup_db이 연극에서 관련 호스트 그룹에 적용되는 것을 볼 때 (예 :) db_hosts그러나 a play는 여러 호스트 그룹의 결합에서 실행될 수 있습니다. 그것은 단지 관습과 유연성의 문제입니다.

추신

이것이 혼란을 더했는지 또는 명확히했는지 답장 해주세요. 감사.


1

또한 다른 역할에 영향을주는 메타 파일이 사용되는 경우 플레이 북이 둘 이상의 역할을 호출 할 수 있다는 점을 기억하십시오.

예제 플레이 북 : 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

1

간단히 말해서:

플레이 북은 메인 프로그램과 같으며 작업을 완료하기위한 완전한 지침을 담고 있습니다. 그러나 큰 프로젝트의 경우 실제로 모든 세부 사항을 입력하는 것은 바람직하지 않습니다. 따라서 역할이 필요합니다.

역할은 서브 루틴이며 일반적으로 데이터베이스 서버 설정과 같은 하나의 목표를 달성합니다. 당신은 그것을 넣을 수 있습니다 roles/디렉토리, 또는에서 URI를 제공하여 제 3 자 역할을 다운로드 rolesfile.yml물어 ansible - 은하계를 당신을 위해 그 (것)들을 다운로드 할 수 있습니다.

[database]에 정의 된 호스트 그룹 인벤토리 파일 목록 호스트합니다에 속하는 것으로 database그룹. 다음과 같이 지정하여 웹 서버 그룹을 지정할 수도 있습니다.

[web]
web1.example.com
web2.example.com

그룹화 web하거나 database그런 다음 플레이 북 또는 역할에서 사용하여 적용 할 호스트를 지정할 수 있습니다.

그룹은 명령 ansible에서 임시 명령 을 실행 하는 데 사용할 수도 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.