본문 바로가기

DevOps/Ansible

[Ansible] Ansible 실습 - Playbook에 변수사용하기

플레이북 변수 사용하기

  • Ansible 에서도 변수 설정이 가능하다.
  • 기존의 ansible.cfg, inventory를 가지고 있어야한다.
mkdir test_variable
cd test_variable

vim test_vars.yml

---
- name: variable examples
  hosts: localhost
  gather_facts: no
  vars:
   - vars01: abc
  tasks:
    - debug:
        msg: vars01

# 로컬 호스트에서 진행을 할 것이고 vars01 라는 변수에 abc라는 문자열을 넣을 것이다.

# debug 모듈을 통해 vars01을 출력

# 위의 명령어대로 변수에 괄호를 넣지 않을 경우 vars01이 그대로 출력됨을 볼 수 있다.

 

  • 단독으로 쓰일 때 괄호를 써보자
---
- name: variable examples
  hosts: localhost
  gather_facts: no 
  vars:
   - vars01: abc
  tasks:
    - debug:
        msg: "{{ vars01 }}"

# 원하는 결과값인 vars01변수의 값 abc가 출력됨을 볼 수 있다.


문자열과 함께 변수를 출력하기

  • 문자열과 함께 변수를 출력해보겠다.
---
- name: variable examples
  hosts: localhost
  gather_facts: no 
  vars:
   - vars01: abc
  tasks:
    - debug:
        msg: This is variable "{{ vars01 }}"

# 앞 뒤로 큰따옴표까지 출력이 되었다.

 

  • 문자와 함께 출력할 땐 아래와 같이 수정한다.
---
- name: variable examples
  hosts: localhost
  gather_facts: no # 팩트값 수집 x
  vars:
   - vars01: abc
  tasks:
    - debug:
        msg: This is variable {{ vars01 }}


변수를 문자열의 맨 앞에 포함해서 출력하기

  • 변수를 문자열의 맨 앞에 포함해서 출력해보겠다.
---
- name: variable examples
  hosts: localhost
  gather_facts: no # 팩트값 수집 x
  vars:
   - vars01: abc
  tasks:
    - debug:
        msg: {{ vars01 }} is variable

# 기나긴 오류가 뜬다. 문자열의 맨 앞에 변수가 입력될 경우 큰따옴표가 필요하다.

 

  • 하지만 아래와 같은 형식으로도 다시 오류가 뜬다.
---
- name: variable examples
  hosts: localhost
  gather_facts: no # 팩트값 수집 x
  vars:
   - vars01: abc
  tasks:
    - debug:
        msg: "{{ vars01 }}" is variable

 

# 그렇다. 문자열의 앞에 위치할 경우 따옴표를 ["변수" 문자열 ]이 아닌["변수 문자열"]로 해주어야 한다.

 

  • 변수와 문자열을 따옴표로 묶어준다.
---
- name: variable examples
  hosts: localhost
  gather_facts: no # 팩트값 수집 x
  vars:
   - vars01: abc
  tasks:
    - debug:
        msg: "{{ vars01 }} is variable "

# 원하는 결과값이 출력됨을 알 수 있다.


배열 출력하기

  • 배열 형식일 경우 사용법은 {{ 배열명.[0] }}
---
- name: variable examples
  hosts: localhost
  gather_facts: no # 팩트값 수집 x
  vars:
   - vars01: abc
   - vars02:
       - 123
       - 456
       - 789
  tasks:
    - debug:
        msg: "{{ vars01 }} is variable 
    - debug:
        msg: "{{ vars02[0] }} is variable"
    - debug:
        msg: "{{ vars02[1] }} is variable "

# vars01변수에는 abc의 값을 넣었고

# vars02배열에는 각각 123, 456, 789 값을 넣었다.


변수 파일 지정하기

  • 변수가 많아지면 많아질수록 플레이북이 복잡해진다.
  • 이러한 경우를 위해 vars_file 을 지정한다.
vim test_vars.yml

---
- name: variable examples
  hosts: localhost
  gather_facts: no 
  vars_files:
    - variable_file.yml 
  vars:
    - vars01: abc
  tasks:
    - debug:
        msg: This is normal variable {{vars01}}
    - debug:
        msg: "{{ vars02[0] }} is first index variable"
    - debug:
        msg: "{{ vars02[1] }} is last index variable"
vim variable_file.yml

- vars01: abc
- vars02:
	- 123
	- 456
	- 789

 

* 변수 파일의 우선순위는 vars_file > 플레이북 내 vars > inventory 순서이다.