- hosts: 192.168.56.101
vars:
user: user
home: /home/user
- hosts: 192.168.56.101
vars_files:
- vars.yml
- vars2.yml
—
vars.yml
user: user
home: /home/user
<aside> 🏓 변수 사용 예제
user@master ~]$ mkdir vars
[user@master ~]$ cd vars
[user@master vars]$ vim inventory
>> inventory 파일 안에 작성
localhost
192.168.56.101
[user@master vars]$ vim ansible.cfg
>> ansible.cfg 파일 안에 작성
[defaults]
inventory = ./inventory
[user@master vars]$ vim playbook.yml
>> playbook.yml 파일 안에 작성
---
- name: vars check
hosts: all
vars:
user: user
home: /home/user
tasks:
- name: print user variable
debug:
var: user
- name: print home varialbe
debug:
var: home
[user@master vars]$ vim vars.yml
>> vars.yml 파일 안에 작성
user: user
home: /home/user
[user@master vars]$ cp playbook.yml playbook2.yml # 다시 만들기 귀찮아서 그냥 복사하고 내용 수정
[user@master vars]$ vim playbook2.yml
>> playbook2.yml 파일 안에 작성
---
- name: vars check
hosts: all
vars_files: # var file 불러오기
- vars.yml # 파일의 이름만 작성하면 안에 내용 불러옴
tasks:
- name: print user variable
debug:
var: user
- name: print home variable
debug:
var: home
[user@master ~]$ mkdir vars2
[user@master ~]$ cd vars2
[user@master vars2]$ vim ansible.cfg
>> ansible.cfg 파일 안에 작성
[defaults]
inventory = ./inventory
[user@master vars2]$ vim inventory
>> inventory 파일 안에 작성
[server]
localhost
192.168.56.101 hostname=worker # hostname=worker는 ip주소를 변수로 지정
[server:vars]
user=hello
[user@master vars2]$ vim playbook2.yml
>> playbook2.yml 파일 안에 작성
---
- name: vars check
hosts: [localhost,192.168.56.101]
tasks:
- name: print inventory vars
debug:
var: user
<aside> 🎄 플레이북에 serverc를 호스트로 지정하고 sesac 변수를 불러오기 실습
# ansible.cfg 파일
[defaults]
inventory = ./inventory
# inventory 파일
[servera]
localhost
[serverb]
192.168.56.101 hostname=worker
[serverc:children]
servera
serverb
[serverc:vars]
sesac=hello
# playbook 파일
---
- name: get var
hosts: serverc
tasks:
- name: print sesac
debug:
var: sesac
</aside>
<aside> 🚖 group_vars, host_vars 실습
[user@master ~]$ mkdir vars3
[user@master ~]$ cd vars3
[user@master vars3]$ vim inventory
>> inventoy 파일 안에 작성
[servera]
localhost
[serverb]
192.168.56.101 hostname=worker
[serverc:children]
servera
serverb
[user@master vars3]$ vim ansible.cfg
>> ansible.cfg 파일 안에 작성
[defaults]
inventory=./inventory
[user@master vars3]$ mkdir group_vars
[user@master vars3]$ cd group_vars/
[user@master group_vars]$ vim servera # 파일이름은 서버와 일치해야함
>> servera 파일 안에 작성
package: httpd
[user@master group_vars]$ vim serverb
>> serverb 파일 안에 작성
package: mariadb-server
[user@master group_vars]$ vim serverc
>> serverc 파일 안에 작성
package: net-tools
[user@master group_vars]$ cd ..
[user@master vars3]$ mkdir host_vars
[user@master vars3]$ cd host_vars/
[user@master host_vars]$ vim 192.168.56.101
>> 192.168.56.101 파일 안에 작성
user: apache
[user@master host_vars]$ cd ..
[user@master vars3]$ vim playbook.yml
>> playbook.yml 파일 안에 작성
---
- name: group_vars host_vars check
hosts: servera
tasks:
- name: servera's group_vars check
debug:
var: package
- name: group_vars host_vars check
hosts: serverb
tasks:
- name: serverb's group_vars check
debug:
var: package
- name: group_vars host_vars check
hosts: 192.168.56.101
tasks:
- name: 192.168.56.101's group_vars check
debug:
var: user
</aside>
만약 group_vars와 host_vars를 따로 지정하고 싶으면?
→ ansible.cfg 파일에 host_vars와 group_vars 직접 지정하기
[defaults]
inventory = ./inventory
host_vars = /home/user/vars3/host_vars
group_vars = /home/user/vars3/group_vars
[user@master ~]$ mkdir vars4
[user@master ~]$ cd vars4
[user@master vars4]$ vim inventory
>> inventory 파일 안에 작성
192.168.56.101
[user@master vars4]$ vim ansible.cfg
>> ansible.cfg 파일 안에 작성
[defaults]
inventory = ./inventory
[user@master vars4]$ vim playbook.yml
>> playbook.yml 파일 안에 작성
---
- name: new variable
hosts: 192.168.56.101
tasks:
- debug:
var: user
# 그냥 실행할 때
[user@master vars4]$ ansible-playbook playbook.yml
PLAY [new variable] **********************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************
ok: [192.168.56.101]
TASK [debug] *****************************************************************************************************************************
ok: [192.168.56.101] => {
"user": "VARIABLE IS NOT DEFINED!" # 변수가 정의되어 있지 않다고 나옴
}
PLAY RECAP *******************************************************************************************************************************
192.168.56.101 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
# 명령어에 변수 지정했을 때
[user@master vars4]$ ansible-playbook playbook.yml **-e** "user=hello sesac=good"
PLAY [new variable] **********************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************
ok: [192.168.56.101]
TASK [debug] *****************************************************************************************************************************
ok: [192.168.56.101] => {
"user": "hello" # 변수에 넣은 값 출력
}
PLAY RECAP *******************************************************************************************************************************
192.168.56.101 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
<aside> ❗ 명령줄에 지정할 때는 맨 뒤에 -e 옵션 쓰고 뒤에 변수 지정해주기!
</aside>