1. 플레이북이란?
플레이북을 사용하여 대상 호스트 집합에 대해 여러개 복잡한 작업을 쉽고 반복적으로 실행한다.
YAML 형식으로 된 멀티머신 배포 시스템이다.
AD-HOC 명령 VS 플레이북
-> 단순한 명령 / 여러 개의 명령을 간단하게 실행
* 작업 : 하나의 모듈과 모둘의 옵션/ 파라미터 지정
* 플레이 : 하나 이상의 작업을 가짐
* 플레이 : 하나 이상의 플레이를 가짐
- YAML 파일 작성법
1. --- : 시작, ... : 끝 -> 생략이 가능하다.
2. 들여쓰기는 공백문자 2칸을 사용, 탭은 오류를 발생한다.
3. 목록은 - 와 공백으로 시작한다.
4. 키/값 쌍을 가지고 있다.
5. yes = true = True= TRUE
6. no = False = false = FALSE
7. 에러 날 것 같은 문자열은 '', "" 로 묶어줘서 해결한다.
- 플레이북 기본 구조
# 플레이/플레이 이름
# HOST 패턴
# TASKS :
- NAME # 작업 /작업 이름
2. 플레이북 작업 실행
1. Ansible은 기본적으로 호스트의 패턴과 일치하는 모든 시스템에 대해 각 작업을 순서대로 실행한다.
2. 각 작업은 지정한 모듈 옵션을 사용하여 모듈을 실행한다.
3. 하나의 작업이 호스트 패턴과 일치하는 모든 시스템에서 완료되면 다음 작업으로 이동한다.
4. 특정 호스트에서 작업이 실패하면 해당 호스트는 작업이 더 남아 있더라도 제외한다.
3. 변수 및 팩트 관리
특정 호스트나 호스트 그룹, 플레이에 영향을 미치는 변수
ansible 팩트 : ansible의 관리노드의 정보를 담는 변수, ansible 에서 기존에 있는 변수를 의미한다. ex) Gathering Facts : 해당관리노드의 ip, 호스트 이름 등을 가져와서 저장하는 facts 변수
- ansible 10.0.2.4 -m setup : setup 모듈로 facts 변수를 볼 수 있다.
ansible vault: 변수나 파일을 암호화해서 중요한 값을 보호하는 변수이다.
vars : ip:10.10.10.8
hostip : {{ip}}
접속 ip : {{ip}}
설치 ip : {{ip}}
테스트 ip : {{ip}}
{{변수 이름}}
보통 플레이북에 변수를 작성할 때는 vars 키워드를 사용하여 변수를 정의한다.
---
- hosts: webservers
vars:
http_port : 80
vars_files: (파일에서 vars 변수 가져옴 )
- vars/ external_vars.yaml
tasks:
- name :{{http_port}}
런타임 - 옵션
ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"
ansible-playbook release.yml --e "version=1.23.45 other_variable=foo"
- vars_propmt : 민감한 데이터나 자주 변경되는 데이터를 플레이북에 저장하지 않고, 사용자가 입력하도록 하는 것
private : no - 데이터 암호화 안함(평문) private : yes - 데이터 암호화 함
4. 엔서블 볼트
변수나 파일을 암호화해서 중요한 값을 보호하는 변수이다.
엔서블 볼트는 기본적으로 단일 볼트 패스워드를 사용하며, ansible-valut 명령을 실행하면 패스워드를 입력 받는 프롬프트가 나온다.
ansible-vault create secret.yml : secret 파일을 생성하는데 암호화되서 생성
cat secret.yml -> 암호화된 파일로 확인할 수 있다.
4-1. 플레이북에 패스워드 전달하는 법
1. 단일 볼트 패스워드
: 암호화된 파일이 단일 볼트 패스워드를 사용하는 경우 실행하는 방법이다. 패스워드 파일을 하나만 사용하는 경우이다.
ansible-playbook --ask-vault-pass site.yml
: 처음 입력하라고 패스워드를 입력하면 나중에 패스워드 입력할 시 플레이북이 실행된다.
ansible-playbook --valut-password-file/path/to/my/vault-password-file site.yml
: 텍스트 파일에서 패스워드를 제공
2. Vault ID를 사용하는 여러 개의 볼트 패스워드
Vault ID : 개별 볼트 패스워드를 구별하기 위한 레이블이다.
형식 : --vault-id label@source
ansible-vault create --vault-id prod@prompt secret3.yml
ansible-vault create --vault-id dev@dev-password secret4.yml
Valut ID 소스:
파일명: 패스워드가 포함된 텍스트 파일
프롬프트: 패스워드 입력 프롬프트
5. 팩트 관리
ansible 팩트
: ansible이 관리 호스트에서 자동으로 검색한 변수, 관리 호스트의 정보를 가지고 있는 변수
-> ansible_ 로 팩트명을 시작한다.
팩트 변수를 적용하고 싶지 않다면??
yml 파일에
- hosts: all
gather_facts: no -> yml 파일에 넣어주면 playbook 실행 시 팩트 수집 비활성화 할 수 있음
5.1 사용자 정의 팩트
: 관리노드에서 직접 정적 팩트 변수를 선언
5.1.1 set_fact 모듈
: 플레이북의 작업을 실행하는 중에 새 변수를 정의하거나 기존 변수의 값을 재정의
5.2 특수 변수
1) 매직 변수
: 인벤토리의 호스트 및 그룹, 플레이북 및 역할에 대한 다양한 정보가 정의, 이미 만들어져 있는 변수가 많음
: hostvars
: groups
: inventory_hostname
2) 팩트 변수
: ansible_facts
: ansible_local
3) 연결 변수
: ansible_become_user
: ansible_connection
: ansible_host
: ansible_python_interpreter
: ansible_user
'Infra > ansible' 카테고리의 다른 글
ansible facts 실습 (0) | 2024.05.23 |
---|---|
플레이북 실습 (0) | 2024.05.22 |
ansible ad-hoc 실습 (0) | 2024.05.21 |
인벤토리 (0) | 2024.05.21 |
Ansible이란? (0) | 2024.05.21 |