✔️ 모듈(module)
- Ansible에서 작업을 실행할 수 있는 기본 단위이며 Python 코드로 짜여 있다.
- ansible을 설치하면 같이 설치되는 디렉토리에 수많은 모듈들이 있다.
- parameter(변수)를 넣으면 해당되는 변수의 값이 모듈들에게 전송 되어서 원격 시스템에서 실행된다.
- cloud, db(mysql db, mysql user)등 다양한 3307개의 모듈이 있다. (2022년 4월 기준)
✔️ 리눅스 매뉴얼 확인 방법
리눅스(Linux)에서는 man 명령어(유틸리티)를 사용하여 각종 명령어, 프로그램의 사용법(매뉴얼)을 확인한다.
[vagrant@controller ~]$ man [명령어]
✔️ 모듈 목록 조회
인터넷에 연결되어 있지 않아도 모듈의 간단한 정보를 조회할 수 있다.
[vagrant@controller ~]$ ansible-doc -l
✔️ 모듈 상세 정보 확인
ansible-doc module
✔️ ad_hoc 명령
- Ansible을 임시로 실행한다.
- 한번에 하나의 모듈만 실행할 수 있고 하나의 모듈은 하나의 작업을 실행할 수 있다.
ansible <HOST_PATTERN> -m <MODULE> -a <PARAMETER>
✔️ ad_hoc 예제
[vagrant@controller ~]$ ansible all --list-hosts
hosts (4):
ansible_user=ec2-user
192.168.100.11
192.168.100.12
18.210.186.57
[vagrant@controller ~]$ ansible '*' --list-hosts
hosts (4):
ansible_user=ec2-user
192.168.100.11
192.168.100.12
18.210.186.57
[vagrant@controller ~]$ ansible '192.168.100.*' --list-hosts
hosts (2):
192.168.100.11
192.168.100.12
[vagrant@controller ~]$ ansible 192.168.100.11,192.168.100.12 --list-hosts
hosts (2):
192.168.100.11
192.168.100.12
[vagrant@controller ~]$ ansible 192.168.100.11:192.168.100.12 --list-hosts
hosts (2):
192.168.100.11
192.168.100.12
✔️ 정규 표현식 사용
[vagrant@controller ~]$ vi inventory.ini
[vagrant@controller ~]$ cat inventory.ini
[webhost]
ansible_user=ec2-user ansible_host=18.210.186.57 ansible_ssh_private_key_file=~/.ssh/webhost
192.168.100.11
192.168.100.12
18.210.186.57
[web]
weba
webb
[db]
weba
dba
dbb
[vagrant@controller ~]$ ansible web:db --list-hosts
hosts (4):
weba
webb
dba
dbb
[vagrant@controller ~]$ ansible 'web:db' --list-hosts
hosts (4):
weba
webb
dba
dbb
[vagrant@controller ~]$ ansible 'web:!db' --list-hosts
hosts (1):
webb
[vagrant@controller ~]$ ansible 'web:&db' --list-hosts
hosts (1):
weba
! 를 붙이면 실질적으로 뒤의 작업만이 일어난다는 뜻이다.
✔️ Playbook
- YAML 파일이며 하나 이상의 플레이의 모음이다.
- 순서가 지정된 태스크 목록을 저장한다.
- 플레이북을 작성 후 ansible-playbook 명령어를 사용하여 실행한다.
# play
- hosts: host1 # 플레이를 의미
tasks:
# task
- yum:
name: httpd
state: installed
# task
- service:
name: httpd
state: started
enabled: yes
위, 아래 코드는 완전히 같은 코드이다.
ansible host1 -m yum -a 'name=httpd state=installed'
ansible host1 -m service -a 'name=httpd state=started enabled=yes'
✔️ playbook 실행 순서
- Gathering Facts 실행
- 그리고 실제로 모듈명이 나열되고 wp라는 그룹에 작업하는 호스트의 개수만큼 시스템의 변경사항을 출력한다.
- Play RECAP 을 통해 결과가 어떻게 됐는지를 출력한다.
- 앞선 작업에서 오류가 발생하면 뒤로 이어지는 후속 작업들은 모두 실행하지 않는다.
- 같은 playbook을 다시 한번 실행하면 changed = 0가 나온다. (멱등성과 관련된 내용)
✔️ YAML 문법
YAML - YAML Ain't Markup Language --> YAML은 마크업 언어가 아니다.
human readable - 사람이 읽기 쉽고 작성하기 쉽게 하는 것이 목적
(optional)
시작은 --- 끝은 ... 으로 표시한다.
YAML에서는 List에 반드시 -(dash)를 붙이며 반드시 한칸을 띄워야 한다.
데이터의 구조, 데이터의 계층적 형태를 나타내기 위해 사용한다.
✔️ scalar
scalar는 string과 비슷한 개념
YAML에서는 a(한 글자), word(한 단어), I am a girl(한 문장) 모두 scalar이다.
✔️ dictionary
key=value
일반적으로 2칸 띄우기
tab으로 만드는 것은 ASCII가 다르다.
tab으로 만들면 martin 밑에 name, job, skill을 같은 계층으로 인식하는 오류가 발생하므로 사용 X
✔️ 리스트와 딕셔너리의 중첩
martin의 하위 내용은 martin에게 value이며
name의 Martin D'vloper는 scalar
skills는 자신의 value로 list를 가진다.
라인이 너무 길어서져서 가독성이 떨어지는 것이 문제가 된다고 하면
이런 방식이 존재하기는 하나 헷갈리므로 쓰지 않는 편이 좋다.
✔️ boolean 값
참 | 거짓 |
yes | no |
true | false |
True | False |
0 | 1 |
✔️ | 사용
|를 사용하면 모두 value가 된다.
✔️ Gotchas
k : v 을 표현하는 유일한 문자 ':'
간혹 이런 상황이 발생함
value에 :가 들어가는 순간 YAML이 k:v로 인식하기 때문에
아래와 같이 따옴표로 잘 묶어줘야 함
그러나 window의 경로를 지정할 때는 의도적으로 :를 써줌
✔️ vim-enhenced
sudo yum -y install vim-enhanced
[vagrant@controller ~]$ vi .vimrc
[vagrant@controller ~]$ cat .vimrc
syntax on
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 et ai
set cursorline
yaml 파일 형식을 맞누는데 vim의 추가 기능들을 사용할 수 있다.
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] Playbook 실행 (0) | 2022.04.16 |
---|---|
[Ansible] Ad-hoc 명령어로만 Wordpress 배포하기 (0) | 2022.04.15 |
[Ansible] 정적 인벤토리 (0) | 2022.04.15 |
[Ansible] 관리 노드 접속 방법, 권한 상승과 관리 구성 파일 (0) | 2022.04.14 |
[Ansible] Ansible의 기본 개념과 구성 요소 (0) | 2022.04.14 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!