1. 변수
1-1. 변수의 정의
앤서블은 변수를 통해서 사용자, 설치하고자 하는 패키지, 재시작할 서비스, 생성 또는 삭제할 파일명 등 시스템 작업 시 사용되는 다양한 값을 저장할 수 있습니다.
변수를 통해 서비스를 재시작할 수도, 사용자로부터 받은 값도 쉽게 적용할 수 있습니다.
앤서블에서 사용되는 변수는 그룹 변수, 호스트 변수, 플레이 변수, 추가 변수가 있으며 플레이 결과를 저장하기 위한 작업 변수도 있습니다.
1) 그룹 변수
[web]
tnode1
tnode2
[db]
tnode3
[all:children]
web
db
[all:vars]
user=ansible
그룹 변수는 다음과 같이 [all:vars] k:v로 선언되며 해당 내용 적용 시 모든 관리 노드에 적용됩니다.
다음과 같이, 유저 생성 파일을 만들어 보겠습니다.
my-ansible/create-user.yml
---
- hosts: all
tasks:
- name: Create User **{{ user }}**
ansible.builtin.**user**:
name: **"{{ user }}"**
state: present
다른 터미널에서 tail 로그를 확인합니다.
watch -d "ssh **tnode1** tail -n 3 /etc/passwd"
터미널 1에서는 ansible-playbook create-user.yml로 유저를 생성하고,
생성된 유저 정보를 확인합니다.
다시, 대상 노드 1에서 ansible이라는 유저를 삭제합니다.
확인하면, tnode1에서 ansible이 삭제된 것을 확인하실 수 있습니다.
이후 다시 생성 후, 적용된 내용을 확인합니다.
2) 호스트 변수
인벤토리를 다음과 같이 변경합니다.
tnode3에 user=ansible1이라는 내용으로 변경합니다.
[web]
tnode1
tnode2
[db]
tnode3 user=ansible1
[all:children]
web
db
[all:vars]
user=ansible
이 변수는 말 그대로 호스트에 적용되는 변수입니다.
다음과 같이 플레이북을 만들어 보겠습니다.
my-ansible/create-user1.yml
---
- hosts: db
tasks:
- name: Create User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
적용 시 다음과 같이 변경되는데,
대상 노드 3에서 확인하면, ansible1이 생성된 것을 알 수 있습니다.
3) 플레이 변수
다음은 플레이북 내에서 적용되는 변수인 플레이 변수입니다.
---
- hosts: all
vars:
user: ansible2
tasks:
- name: Create User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
마찬가지로 상기 내용을 적용하면, ansible2라는 유저가 모든 대상 노드에 생성되는 것을 확인할 수 있습니다.
4) 추가 변수
추가 변수는 외부에서 ansible-playbook를 실행할 때 함께 파라미터로 넘겨주는 변수를 의미합니다.
---
- hosts: all
vars_files:
- vars/users.yml
tasks:
- name: Create User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
위의 플레이북을 다음과 같이 적용하면,
ansible-playbook -e user=ansible4 create-user3.yml
유저4가 모든 노드에 걸쳐 적용되는 것을 볼 수 있습니다.
위의 변수들을 살펴보면, 변수는 다음의 우선순위를 갖습니다.
추가변수(실행 시 파라미터) > 플레이 변수 > 호스트 변수 > 그룹 변수
'DevOps > Ansible' 카테고리의 다른 글
[Ansible 101] 핸들러 및 작업 실패 처리 (0) | 2024.01.21 |
---|---|
[Ansible 101] 조건문 (0) | 2024.01.21 |
[Ansible 101] 반복문 (2) | 2024.01.21 |
[Ansible 101 스터디] 앤서블 1주차 기본 실습 (인벤토리, 플레이북) (1) | 2024.01.14 |
[Ansible 101 스터디] 왜 앤서블인가, 앤서블 소개, 특징 (1) | 2024.01.14 |