수색…


역할 사용

Anabilities는 역할 의 개념을 사용하여 모듈 코드를 더 잘 허용하고 반복하지 않도록합니다.

역할은 단순히 Anipal이 vars 파일, 작업 및 핸들러를 어디에서로드 할 것인지를 아는 폴더 구조입니다. 예를 들면 다음과 같습니다.

apache/
├── defaults
│   └── main.yml
├── files
│   ├── mod-pagespeed-stable_current_i386.deb
│   ├── mod-pagespeed-stable_current_i386.rpm
│   ├── mod-pagespeed-stable_current_amd64.deb
|   └── mod-pagespeed-stable_current_x86_64.rpm
├── tasks
│   ├── debian.yml
│   ├── main.yml
│   └── redhat.yml
├── templates
│   ├── httpd.conf.j2
│   └── sites-available
│       └── virthualhost.conf.j2
└── vars
    ├── debian
    └── redhat

그러면 다음과 같이 기본 플레이 북과 함께 역할을 사용할 수 있습니다.

- hosts: webservers
  roles:
     - apache

이 게임 가이드에 대해 Anabilities를 실행하면 webservers 그룹의 모든 호스트를 대상으로하고 위에 정의 된 apache 역할을 실행하여 역할에 대한 기본 변수를 자동으로로드하고 tasks/main.yml 포함 된 모든 작업을 실행합니다. 또한 책임있는 위치에서 특정 유형의 파일을 찾는 것이 좋습니다.

  • roles / x / tasks / main.yml이 존재하면 거기에 나열된 작업이 연극에 추가됩니다

  • roles / x / handlers / main.yml이 존재하면 거기에 나열된 핸들러가 play에 추가됩니다

  • roles / x / vars / main.yml이 있으면 그 안에 나열된 변수가 재생에 추가됩니다

  • roles / x / meta / main.yml이 있으면 그 안에 나열된 모든 역할 종속성이 역할 목록에 추가됩니다 (1.3 이상)

  • 역할에있는 모든 복사, 스크립트, 템플릿 또는 포함 작업은 상대적으로 또는 절대적으로 경로를 지정하지 않고 / x / {파일, 템플릿, 작업} / (작업에 의존하는) 역할의 파일을 참조 할 수 있습니다

역할 의존성

역할을 사용하면 dependencies 블록이있는 meta/main.yml 파일을 작성하여 다른 역할을 종속성으로 정의 할 수 있습니다.

dependencies:
  - role: common

종속 롤의 매개 변수 / 변수에 값을 전달할 수도 있습니다.

dependencies:
  - { role: common, some_parameter: 3 }

또는 조건부로 종속 역할을 실행할 수도 있습니다.

dependencies:
  - { role: common, some_parameter: 3 }
  - { role: sshd, enable_sshd: false,
                         when: environment == 'production' }

종속 역할은 항상 종속 역할을 수행하기 전에 실행됩니다. 또한 한 번만 실행됩니다. 두 개의 역할이 종속성과 동일한 역할을하는 경우 처음 실행됩니다.

folling meta/main.yml 과 함께 역할 role1, role2 및 role3을 상상해보십시오.
role1 / meta / main.yml :

dependencies:
    - role: role3

role2 / meta / main.yml :

dependencies:
    - role: role3

동일한 시나리오 (role1이 role2보다 먼저 호출 됨)에서 role1과 role2를 실행할 때 실행 순서는 다음과 같습니다.

role3 -> role1 -> role2

role1과 role2의 meta/main.ymlallow_duplicates: yes 를 지정 allow_duplicates: yes 동작을 무시할 수 있습니다. 결과 실행 순서는 다음과 같습니다.

role3 -> role1 -> role3 -> role2

역할 내에서 배포 특정 작업 및 변수 분리

우리는 배포 전용 작업과 변수를 다른 전용 .yml 파일로 쉽게 분리 할 수 ​​있습니다. {{ ansible_distribution }}{{ ansible_distribution }}{{ ansible_distribution_version }} 통해 타겟 호스트 배포를 자동으로 식별 할 수있게 도와주기 때문에 적절하게 배포 된 .yml 파일의 이름을 지정해야합니다.

Ubuntu Xenial의 경우 기본 역할 dir tree는 다음과 같이 보입니다.

role
├── tasks
│   ├── main.yml
│   └── Ubuntu16.04.yml
└── vars
    └── Ubuntu16.04.yml

tasks/main.yml 안에는 대상 호스트 배포에 대한 적절한 변수와 작업이 자동으로 포함될 수 있습니다.

tasks / main.yml

---

- name: include distribution specific vars
  include_vars: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"

- name: include distribution specific install
  include: "{{ ansible_distribution }}{{ ansible_distribution_version }}.yml"

tasks/Ubuntu16.06.ymlvars/Ubuntu16.04.yml 우리는 이제 Ubuntu Xenial을위한 작업과 변수를 정의 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow