Infra/ansible

플레이북

집 밖은 위험해 2024. 5. 22. 10:02

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