/
앤서블(ansible)에서 변수(variables) 사용하기

앤서블(ansible)에서 변수(variables) 사용하기

앤서블 변수

앤서블은 플레이북에서 재활용할 수 있도록 변수(variable)를 지원합니다.

변수는 다음과 같이 반복적이거나 동적인 값을 관리할 때 편리합니다.

  • 여러 사용자를 생성
  • 여러 패키지를 설치
  • 여러 서비스를 재시작

변수 정의하기

변수를 정의하기 좋은 부분중 하나는 플레이북으로 이 안에 변수를 정의할 경우 시작 위치에 있는 vars 블록에 변수를 정의합니다.


다음은 sysctl 로 여러 가지 커널 설정을 변경하기 위해 설정 항목과 설정 값을 변수로 정의한 예제입니다.

- name: increase kernel open file max
  hosts: webservers
  vars: 
    my_domain: ec2-user
    sysctl_file_max: '524288'
    user_file_max:  '262144'
    user_nproc_max: '10240'


변수를 별도의 파일로 관리하고 이를 참조하는 것도 좋은 방법이며 이럴 경우 vars 키워드 대신 vars_files 키워드를 사용합니다.

- name: increase kernel open file max
  hosts: webservers
  vars_files: 
    - vars/sysctl_params.yml


이제 vars/sysctl_params.yml 에는 다음 내용을 추가해 주면 됩니다.

my_domain: ec2-user
sysctl_file_max: '524288'
user_file_max:  '262144'
user_nproc_max: '10240'


변수 사용하기

ansible playbook 에서 변수를 사용하려면 변수 이름을 두 개의 중괄호로 묶어주면 됩니다.

다음은 "{{ sysctl_file_max }}" 이 변수 값인 524288 으로 교체됩니다.

- name: Set kernel file max
    ansible.posix.sysctl:
        name: fs.file-max
        value: "{{ sysctl_file_max }}"
        sysctl_set: yes
        state: present
        reload: yes


여러 개의 변수를 사용할 경우 loop 키워드와 함께 list 내 변수에 접근하기 위한 키를 사용하면 됩니다.

아래처럼 list 형식일 경우 각 항목은 "{{ item }}" 에 접근하면 값을 얻을 수 있습니다.

- name: ensure user file max the large number
    pam_limits:
        domain: "{{ my_domain }}"
        limit_type: "{{ item }}"
        limit_item: nofile
        value:  "{{ user_file_max }}"
    loop:
        - hard
        - soft


runtime 에 변수 덮어쓰기

플레이북에 있는 변수를 수정해야 할 경우 파일을 고쳐도 되지만 런타임에 -e 옵션을 사용해서 해당 변수 값을 파라미터로 넘겨줘도 됩니다.

런타임 파라미터가 플레이북에 지정한 변수보다 우선 순위가 높으므로 ansible 은 이렇게 동일 변수가 정의되어 있으면 우선 순위가 높은 쪽의 변수를 사용합니다.


다음은 user_file_max 변수 값을 수정하는 예제입니다.

$ ansible-playbook main.yml -e "user_file_max=1234"


또는 json 형식으로 지정할 수도 있는데 조금 더 번거롭습니다.

$ ansible-playbook main.yml -e '{"user_file_max":"1234"}'

여러 변수 지정

여러 변수를 지정하려면 공백을 구분자로 해서 변수를 적어주면 됩니다.

$ ansible-playbook main.yml -e "user_file_max=1234 user_nproc_max=1024"


json 형식을 사용할 경우 comma 를 구분자로 써주면 됩니다.

$ ansible-playbook main.yml -e '{"user_file_max":1234,"user_nproc_max":1024}'

파일 사용

여러 변수를 지정하거나 json 형식을 사용할 경우 번거로우므로 변수를 파일에 설정하고 파일을 넘겨주는게 좋습니다.

파일을 사용할 경우 파일명 앞에 @를 붙이면 됩니다.

$ ansible-playbook main.yml -e '@sysctl.json'


Ref

Related content

ansible ad-hoc(앤서블 애드혹) 명령어 사용법
ansible ad-hoc(앤서블 애드혹) 명령어 사용법
More like this
ansible playbook command line 주요 옵션
ansible playbook command line 주요 옵션
More like this
Laravel 의 BluePrint 를 수정해서 Oracle 의 NVARCHAR 2 사용하기
Laravel 의 BluePrint 를 수정해서 Oracle 의 NVARCHAR 2 사용하기
More like this
ansible yum module 사용법
ansible yum module 사용법
More like this
ansible setup 모듈로 facts 수집하기
ansible setup 모듈로 facts 수집하기
More like this
ansible ping 모듈 사용법
ansible ping 모듈 사용법
More like this