본문 바로가기

Engineering/Ansible

[Ansible] 5. 변수

 

변수

동일한 코드 구문에 입력 값에 따른 동작을 지정하고 재활용하기 위하여 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 모듈을 이용해 출력한 결과이다.

 

 


위에서 언급한 변수들은 서로 우선순위를 가진다. 플레이북에서 실행될 때 아래의 순으로 우선순위가 책정된다.

  1. 추가변수
  2. 플레이변수
  3. 호스트변수
  4. 그룹변수

 

'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