변수
동일한 코드 구문에 입력 값에 따른 동작을 지정하고 재활용하기 위하여 playbook에서도 변수를 사용할 수 있다.
변수가 선언되는 위치에 따라 그 종류가 달라지고 종류에따라 참조 우선순위가 결정된다.
그룹 변수와 호스트 변수
그룹변수는 인벤토리에 정의된 호스트 그룹에서 적용시키고 사용하는 변수를 의미한다. 따라서 인벤토리에 [GROUP:vars] 형태로 선언을 해야한다. 이때 그룹변수는 해당 그룹에 한해서 참조한다. 중첩그룹도 동일하게 적용된다.
호스트 변수는 그룹변수와 동일한 방식으로 선언하지만 호스트에 한하여 선언된다.
만일 변수가 중복이 됐을때, 그룹변수 < 호스트 변수의 우선순위를 가진다.
[web-server]
web1.ex.com user=ansible1 #web1.ex.com 호스트의 변수
web2.ex.com
[db-server]
db1.ex.com
db2.ex.com
[db-server:vars] #[db-server] 호스트 그룹 내에서 참조할 변수 선언
database=altibase
[all:children] #중첩그룹 [all]
web-server
db-server
[all:vars] #중첩그룹 [all] 내에서 참조할 변수 선언
user=ansible
플레이 변수
플레이 변수는 플레이북 내에서 선언된 변수를 의미한다.
[root@Ansible-Controller ch06]# cat crt_user.yml
---
- hosts: all
vars:
user: ansible2 #플레이북 내에 선언한 플레이 변수
tasks:
- name: Create User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
플레이북에 "vars:" 구문을 추가하고, key-value 형태로 플레이 변수를 선언한다.
추가 변수
추가변수는 ansible-playbook으로 플레이북을 실행할때 파라미터로 넘겨주는 변수이다.
$ ansible-playbook -e user=ansible3 crt_user.yml
위에서 작성한 playbook에 -e 옵션을 사용하여 변수를 할당할 수 있다. -e는 --extra_vars의 약자이다.
작업변수
작업변수는 플레이북의 tasks 수행 결과를 저장한 것을 의미한다. 특정 작업을 수행 후에 그 결과를 가지고 다음 작업에 이어서 사용할때 주로 사용한다. "register: " 구문을 이용하여 사용할 수 있다.
[root@Ansible-Controller ch06]# cat register.yml
---
- hosts: all
gather_facts: True
tasks:
- name: restart http
ansible.builtin.service:
name: httpd
state: restarted
register: result
- name: http_regi_debug
debug:
var: result
ansible.builtin.service 모듈을 이용하여 httpd를 재시작한 결과를 register 구문을 이용하여 "result"라는 변수에 담고, 아래에서 debug 모듈을 이용해 출력한 결과이다.
위에서 언급한 변수들은 서로 우선순위를 가진다. 플레이북에서 실행될 때 아래의 순으로 우선순위가 책정된다.
- 추가변수
- 플레이변수
- 호스트변수
- 그룹변수
'Engineering > Ansible' 카테고리의 다른 글
[Ansible] 7. Ansible Facts 활용 (0) | 2024.09.02 |
---|---|
[Ansible] 6. Ansible Vault (0) | 2024.08.29 |
[Ansible] 4. Playbook 살펴보기 (0) | 2024.08.28 |
[Ansible] 3. Ansible.cfg, Generating SSH key (0) | 2024.08.26 |
[Ansible] 2. Ansible Inventory File (0) | 2024.08.21 |