본문 바로가기
클라우드/AWS

Ansible) 앤서블 변수, register & stat & set_fact 모듈

by 빈스터디 2023. 3. 29.

Ansible - 변수

> inventory 또는 playbook에 작성한다.

> 어디든 변수를 붙여주면 사용할 수 있다.

 

> 변수 사용 예

: 슬레이브에서 마스터 IP를 작성해야할 때, 마스터 IP가 바뀔 수도 있기 때문에,

  파일 내에서 변수로 지정한다. 그리고 변수만 따로 저장한 파일에서 해당 변수의 값을 바꾸면 적용이 된다.

 

> ansible_facts, hostvars은 앤서블을 실행하면서 생성되는 특수 변수이다.

 

변수 실습해보기

- playbook에서 선언한 변수 사용해서 "web"이라는 매니지드 노드에 변수 이름의 파일 생성하기

- vars.yml이라는 따로 변수들만 저장하는 파일을 만들어서 해당 파일 호출해서 변수 사용하기

 

> vars.yml 작성

var03: 30
var04: 40

 

> playbook 작성(vars 파일에 저장한 변수 호출 후 사용)

- hosts: ["web"]
  tasks:
  - name: create file  # 변수이름의 파일 생성
    shell: |
      echo "{{ var01 }}" > /root/"{{ var02 }}"  # 변수 사용시 큰 따옴표로 묶어주기
    become: yes
    
  - name: print
    debug:
      msg: "{{ var01 }}"
    become: yes
  
  - name: load vars  # 파일에서 변수 호출
    include_vars: "[vars 파일 경로]"   # vars.yml까지 작성

  - name: print
    debug:
      msg: "{{ var03 }}"
    become: yes
  
  vars:
    var01: 10
    var02: 20

 

> 결과

 

 

Ansible - register, stat, set_fact 모듈

> register는 모듈 실행 결과를 저장할 때 사용한다.
> set_fact는 동적으로 변수를 저장할 때 사용한다.

> 파일이 있는지 없는지 확인할 때는 stat 모듈을 사용한다.

 

아래의 코드는 위의 3가지 모듈 사용 예이다.

- hosts: ["web"]
  tasks: 
  
  - name: create file
    shell: |
      df -h | grep /dev/mapper/cs-root | awk -F" " '{print $5}' | cut -d'%' -f 1
    register: df_result
    become: yes
    
  - set_fact: var05={{ df_result.stdout }}
  
  - name: print
    debug:
      msg: "{{ var05 }}"
    become: yes
    
  - name: test
    stat:
      path: /root
    register: root_stat
    become: yes

  - name: print
    debug:
      msg: "{{ root_stat }}"

  - name: print
    debug:
      msg: "{{ root_stat.stat.exists }}"

 

> 결과

 

web에서 저 "%" 수치를 가져오고자 한다.

 

잘 가져와 진 듯 하다.

 

다음 코드는 root_stat 출력하고, 그 중에 exist 결과만 출력하기

 

root_stat.stat.exists(파일이 있는지) 출력