참고 : https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables
- Playbook 이해
Playbook 구조
playbook-play-task 구조
playbook - play의 집합
play
- managed node에 적용할 여러 작업 코드 집합
- 한 번에 일괄적으로 수행할 작업 단위 - task 모음
task - 실제 수행할 작업 내용 - 모듈로 표현
Playbook의 play 코드 구조
- '---' - Playbook 문서 시작
- 타깃 부분
play에 대한 공통 정보, 필수 사항
실행장비, 사용자 정보 등
- name
play가 어떤 목적을 가지는지 설명
playbook 실행시 출력되는 내용
생략가능
- hosts
play가 적용될 managed node에 대한 이름 (host이름)
인벤토리에 정의된 이름 사용
- user
play를 적용할 사용자 id
- become
관리자 권한으로 권한 상승 유무 명시
play 차원에서 관리자 권한 상승 유무 명시
- become_user
관리자 권한을 갖는 사용자 명시
play 차원에서 관리자 권한을 갖는 사용자 명시
- gather_facts
managed node에 대한 fact 정보 수집 유무 확인
default - gather_facts : True
fact 정보 - managed node 에 대한 정보
managed node 에 대한 fact 정보 수집을 활성화하게 되면 동작 속도가 느려진다
- 변수 부분 - 선택사항
play 전체에서 사용하는 변수 목록
변수 부분은 변수 사용시에만 기술 되는 부분
vars - 변수 부분
vars_files - 변수를 가지고 있는 외부 파일 기술 부분
- 태스크 부분 - task 목록, 필수 사항
실제 수행할 모듈
- name
하나의 테스크 설명
name attribute의 내용을 기술하지 않아도 되지만 실무에서는 항상 기술한다고 함
managed node 에서 수행한 모듈 명시
- Playbook - play - role 구조
role
- 불필요하거나 중복되는 소스를 제거하고 자주 사용하는 기능을 재사용하기 위해 사용하는 task 코드 집합
- 라이브러리
통상 프로그래밍 언어에서 함수(function)를 모아놓은 파일을 의미
role 을 라이브러리라고 생각할 수 있다.
- YAML 형식으로 작성함
- Ansible Playbook 을 이용한 managed node 관리를 위한 프로젝트 구조
managed node를 관리하기 위한 코드들을 체계적으로 관리하기 위해 프로젝트 형식으로 디렉토리 조직화
- Ansible 프로젝트 : managed node 에 적용할 환경 구성을 위해 필요한 파일 집합
- group_vars : 공통 변수 저장 파일(YAML) 저장 디렉토리
- hosts : 인벤토리 파일 저장 디렉토리
- playbooks : playbook 파일 저장 디렉토리
- roles : role 파일 저장 디렉토리
ansible example 참고 사이트
https://github.com/ansible/ansible-examples
GitHub - ansible/ansible-examples: A few starter examples of ansible playbooks, to show features and how they work together. Se
A few starter examples of ansible playbooks, to show features and how they work together. See http://galaxy.ansible.com for example roles from the Ansible community for deploying many popular appl...
github.com
- 변수와 fact 이해
참고
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables
Using Variables — Ansible Documentation
You should choose where to define a variable based on the kind of control you might want over values. Set variables in inventory that deal with geography or behavior. Since groups are frequently the entity that maps roles onto hosts, you can often set vari
docs.ansible.com
- 변수 - variable
값을 저장하는 메모리 영역
ansible 은 프로그래밍 언어는 아니지만 일부 프로그래밍 언어의 특징을 가짐
가장 중요한 특징 중 하나는 변수 대체(variable substitution)이다.
play 변수 정의
vars 섹션에 key(변수 이름) 와 value (값) 정의
- play 에서 사용할 수 있는 변수
- key : value 형식으로 정의
- vars : key_file: /etc/nginx/ssl/nginx.key
vars_files 섹션을 이용하여 번수로 구성된 파일을 지정할 수 있다.
- nginx.yml -> 변수 저장 파일 : key_file : /etc/nginx/ssl/nginx.key
- vars_files -> playbook의 vars_files 섹션 - nginx.yml
- 중요 정보가 포함된 변수를 분리하여 관리
- 변수 내용 출력
debug 모듈 사용
msg 파라미터 사용하여 변수 내용 출력
변수 내용을 사용하고자 할땐 "{{변수명}}" 형식으로 사용
debug 모듈을 이용하여 변수 출력시 msg 파라미터에 "{{변수명}}" 형식으로 사용해야 변수 내용을 출력할 수 있다.
- Task 결과 변수 저장
task 동작 결과에 따라 변수를 설정할 때는 모듈을 호출할 때 register 절을 사용하여 변수 생성
- 모듈과 register는 같은 열에 위치해야 함
name: create directory
file:
path: "{{ file_path }}"
state: directory
register: result
- error 발생하더라도 무시하고 계속 실행하고자 한다면 ignore_errors 절에 true 로 설정하면 됨
--- - name: variable test hosts: managed gather_facts: False vars: message: Ansible variable test tasks: - name: debug module test debug: msg: - name: print variable debug: msg: "message variable -> {{ message }}" - name: task variable test hosts: private gather_facts: False vars: file_path: /home/ec2-user/work tasks: - name: create directory file: path: "{{ file_path }}" state: directory register: result ignore_errors: true - name: change directory shell: cmd: cd "{{ file_path }}" register: foo_result ignore_errors: true - name: print result debug: msg: "foo_result-> {{foo_result}} | result -> {{ result }}" |
- 변수를 활용하여 Playbook 동작을 동적으로 수행
--- - name: create directory & change directory hosts: "{{ host_names }}" gather_facts: False tasks: - name: create directory file: path: "{{ file_name }}" state: directory register: result_create - name: change directory shell: cd "{{ file_name }}" - name: debug debug: var: result_create 실행 방법 - ansible-playbook dir_manage.yml -i ./hosts -e "host_names=private file_name=/home/ec2-user/work/temp" |
- Playbook 실습
vsc 로 controler 에 접속해서 코드를 쳐봤는데 들여쓰기가 자동으로 스페이스 2칸으로 조정되는것 같다
편하네
- playbook - ping test
task 안에 - name /n module 순서로 넣으면 차례대로 실행하는것 같다
이번엔 퍼블릭2번 인스턴스를 종료하고 ping 테스트를 해봤다
gathering facts , ping test 에서는 unreachable 이 1이 리턴됬고 pwd 결과는 그냥 출력이 안되는 모습
- playbook - mkdir, cd, copy, rmdir
디렉토리 생성이 state: directory 인가? 대충 느낌이고
register 는 결과를 저장하는 부분인것 같다
create directory task 에서 2개 changed 됬다고 나오고 debug 에 결과가 true 로 되어있다
ad-hoc 명령으로 ls 확인
이번에는 public2 를 실행해서
타깃부분이 2개인 playbook을 만들어보자
ls 도 계속 print 되도록 해볼 생각
위에서부터 순서대로 내려올거임
input ls 명령을 프롬프트에 보여주는 show ls 로 stdout_lines 에서 현재 디렉토리 목록을 볼 수 있었다.
그리고 mkdir 로 public2 에만 디렉토리를 생성해줌
이번 플레이 호스트는 managed 그룹으로 해서
cd 해주고
ls 해줘서
task - show ls 에서 결과값을 출력하는데 역시 stdout_lines 부분에서 현재 디렉토리에 pb-mkdir 파일이 추가된걸 볼 수 있었다.
public2 에서도 추가됬는데
왜 cd 했는데 ls 하니까 ec2-user 디렉토리 결과가 나오나 하고 보니
path 뒤에 / 이걸 안붙여줘서 그런거 같다
이제 새로 만든 pb-mkdir 디렉토리로 controler 에 있는 파일을 카피해보자
컨트롤러에 playbooktext.txt 파일을 만들고
managed node 로 카피해볼꺼다
ls -lF 로 copy 된걸 확인한 모습
- playbook - webserver - install, running, remove
yum 모듈 예제 코드
https://sh-safer.tistory.com/58
[Ansible] yum module 예제 정리
예제 1. httpd 최신 버전의 패키지 설치 - name: install the latest version of Apache yum: name: httpd state: latest 예제 2. 여러 패키지를 한 번에 설치 - name: Install a list of packages yum: name: - n..
sh-safer.tistory.com
public1은 이미 httpd가 설치되어있었나봄
두 아이피 모두 httpd 아파치 서버가 설치된 모습
삭제나 중지는 state 값만 바꾸면 되는데
삭제 됨
- playbook - print variable
위에 vars: 에 선언해주고
key: value 가 되는거고
{{ 변수명 }} 로 호출
- playbook - using variable
변수에 .stdout 으로 간단하게 획인할 수도 있는것 같다
원래 레지스터 디버그 하면 ㅈㄴ길게 나왔는데
이렇게 보니까 편하네
- 팩트 - facts
managed node 에 대한 정보
Ansible Playbook을 실행할 때 첫 번째 수행 Task 가 managed node 의 정보를 갖는 팩트를 수집하는 Task 이다.
Ansible 팩트를 수집할 때는 managed node 에 연결해서 managed node에 대한 모든 종류의 세부 정보를 쿼리하며, 이 정보는 ansible_facts 변수에 저장된다.
gather_facts - 팩트 수집 유무 결정
- gather_facts : True -> 팩트 수집, default
- gather_facts : False -> 팩트 수집 중단
Ad-hoc 명령으로 팩트 정보 확인
- ansible [host 패턴] -m setup -> 전체 팩트 정보 확인
- ansible [host 패턴] -m setup -a "<filter=하위 facts keys>..." -> 특정 key 팩트 정보 확인
ansible_fact 변수의 특성 key 접근 방법
- "{{ansible_fact['key 이름']}}"
'Kubernetes > [구름] 쿠버네티스 전문가 양성 과정 k-digital' 카테고리의 다른 글
[9주-9.26] Docker 이해 (0) | 2022.09.26 |
---|---|
[8주-9.23] playbook 확장 (0) | 2022.09.23 |
[8주-9.21] Ansible - module, YAML, playbook 개요 (0) | 2022.09.21 |
[8주-9.19~20] IaC, CloudFormation, Ansible (1) | 2022.09.20 |
[5주-20일차] (0) | 2022.08.30 |