-
Ansible: Playbook yaml공부합시다!/Ansible 2022. 7. 6. 10:04728x90
오늘은 ansible 실행에서의 핵심 파일인 playbook에 대해서 살펴보겠습니다.
1. yaml 파일
1.1. "야믈"
1.2. YAML은 markup 보다구조화 된 Data를 표현하기 위한 Test 형식의 Format
1.2.1. 사람이 쉽게 읽을 수 있는 데이터 직렬화 형식
1.2.2. Markup 언어와 다르기 때문에 사람이 읽고, 쓰고, 식별하기 쉽다.
1.2.3. 'Yet Another Markup Language' 공식적인 약자
1.2.4. 설정파일, 데이터 저장 형식, Log파일에 주로 사용
1.2.5. http://www.yaml.org 참조
2. Playbook
2.1. Ansible의 환경 설정, 배포를 가능하게 함.
2.2. yaml 문법을 사용하여 정의
2.3. linux 기반의 권한 관리(user, group) 지원
2.4. 하나의 playbook은 하나 또는 그 이상의 play를 정의
2.5. play의 목적은 여러 호스트들에 잘 정의된 Role과 Task를 매핑하는 역할
2.6. 그 외 기능
2.6.1. 반복 (with_item, with nested, until ....)
2.6.2. 조건 분기 (when, register, .....)
2.6.3. 다른 playbook 참조 (include, role ......)
2.6.4. 외부 정보 참조
2.6.5. 환경 변수, 파일 등 (environment, lookup, vars_prompt.....)
2.6.6. Custom Module을 이용한 확장
2.7. playbook 실행
ansible 명령어 실행 # ansible-playbook i inventory_file playbook.yml
3. playbook 구조
3.1. Task
3.1.1. 정형화 된 작업 열거
3.1.2. Task는 관련 지을 수 있는 Module 호출
3.1.3. Module 은 Python 이나 Bash로 기술
tasks: - name: check instal httpd yum: name=httpd state=latest
3.2. Module
3.2.1. 특정 목적을 위해 작성된 Ansible Backend
3.2.2. 주로 Python으로 구현
3.2.3. 대표적인 Module
3.2.3.1. packgae 관리
- yum, atp
지정 패키지 및 의존 패키지 설치
3.2.3.2. 서비스 제어
- service
서비스 시작 정지
3.2.3.3. 파일처리
- File, copy, fetch, template
파일 배포(copy, template), 파일 수집(fetch)등
3.2.3.4. command 실행
- command, shell
외부 command 실행가 출력 결과 보고 등
3.2.3.5. git, subversion
3.3. 변수 정의(vars)
3.3.1. Tasks 섹션 전에 vars: 섹션으로 변수를 정의
vars: hello: Hello tasks: - name: Hello World debug: msg=”{{ hello }} Ansible
3.4. 조건분기실행
3.4.1. Task에서 Module명 다음 줄에서 "when:"을 기술하여 module의 실행 조건을 정의
3.4.2. 지역 변수나 vars정의된 변수에 대해 등호화 부등호를 이용하여 조건식이 true인 경우에 실행
tasks: - name: install Apache Web server yum: name=httpd state=latest when: ansible_os_family == 'RedHat' - name: install Apache Web server apt: name=apache2 state=latest when: ansible_os_family == 'Debian' or \ ansible_os_family == 'Ubuntu
3.5. Loop 실행(Loops)
3.5.1. Task에서 Module명의 다음 줄에서 "with_000" 기술하여 모듈에 {{item}}변수를 전달
with_items with_nested with_dict with_lines with_indexed_items with_ini with_flattened with_file with_fileglob with_first_found with_together with_subelements with_random_choice with_sequence
3.6. Template
3.6.1. yaml파일 뿐 아니라 모든 파일에서 활용가능
3.6.2. 일반적으로 파일 확장자명을 .j2로 함
3.6.2.1 index.php.j2
3.6.2.2. msyql.j2
3.6.3. Template Task일 때 jinja2 적용 가능(copy tast는 적용 불가)
tasks: - name: deploy my.cnf template: src=my.cnf.j2 dest=/etc/my.cnf filename: my.cnf.j2 [mysqld] user = {{ mysql_user }} port = {{ mysql_port }} datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/lib/mysqld/mysqld.pid
좀 많이 복잡한 듯 하지만 하나하나 설정하시다면 이해하실겁니다.
왜 그렇게 Linux를 열심히 공부했는지
그 티가 나기 시작합니다.
K8S도 Config File을 많이 만들어봐야 하듯 Ansible도 Playbook을 많이 작성해 보셔야 합니다.
Ansible Module 참조 사이트
https://docs.ansible.com/ansible/2.9/index.html
Have a nice day!
728x90'공부합시다! > Ansible' 카테고리의 다른 글
Ansible: web server + php7.3 배포 및 구성 (0) 2022.07.08 Ansible: ssh key 자동 배포 (2023년 1월 11일 Test) (0) 2022.07.07 Ansible: Ad-hoc & Inventory (0) 2022.07.05 Ansible: Ansiable 개요 (0) 2022.07.04 Ansible: IaC개요 (0) 2022.07.03