수색…
역할 사용
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.yml
에 allow_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.yml
과 vars/Ubuntu16.04.yml
우리는 이제 Ubuntu Xenial을위한 작업과 변수를 정의 할 수 있습니다.