728x90
Ansible에서 사용자 정의 팩트를 정의하고 사용하는 방법
사용자 정의 팩트를 정의하면 플레이북이나 템플릿에서 해당 변수를 사용하여 조건을 설정하거나 동적으로 값을 할당할 수 있습니다. 그룹 변수, 호스트 변수, /etc/ansible/facts.d 디렉토리 등이 있습니다.
node | Server | |
Control node | control1 | |
Managed nodes | centos7 | |
Managed nodes | ubuntu22 |
관리형 노드에서 facts.d 디렉토리 생성
sudo mkdir -p /etc/ansible/facts.d
facts 파일 생성
cat <<EOF | tee /etc/ansible/facts.d/test.fact
[web_server]
web_name=nginx
web_version=1.24.0
[was_server]
was_name=php-fpm
was_version=8.1.27
EOF
$ cat <<EOF | tee /etc/ansible/facts.d/test.fact
> [web_server]
> web_name=nginx
> web_version=1.24.0
> [was_server]
> was_name=php-fpm
> was_version=8.1.27
> EOF
[web_server]
web_name=nginx
web_version=1.24.0
[was_server]
was_name=php-fpm
was_version=8.1.27
제어 노드에서 사용자가 정의한 facts 변수를 ad-hoc 명령어로 확인
ansible -i inventory centos7 -m setup -a 'filter=ansible_local'
centos7 | SUCCESS => {
"ansible_facts": {
"ansible_local": {
"test": {
"was_server": {
"was_name": "php-fpm",
"was_version": "8.1.27"
},
"web_server": {
"web_name": "nginx",
"web_version": "1.24.0"
}
}
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
ansible -i inventory ubuntu22 -m setup -a 'filter=ansible_local'
ubuntu22 | SUCCESS => {
"ansible_facts": {
"ansible_local": {
"test": {
"was_server": {
"was_name": "php-fpm",
"was_version": "8.1.27"
},
"web_server": {
"web_name": "nginx",
"web_version": "1.24.0"
}
}
},
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false
}
제어 노드에서 사용자가 정의한 facts 변수를 플레이북으로 확인
플레이북 작성
vim local_facts_get.yml
---
- name: 그룹 변수가 있는 플레이북 예제(Group Variables)
hosts: zdocker
gather_facts: true
tasks:
- name: Print local facts
debug:
msg: "{{ ansible_local }}"
- name: "Web Server"
debug:
msg: "{{ ansible_local['test']['web_server']['web_name'] }} {{ ansible_local['test']['web_server']['web_version'] }}"
- name: "Middleware Server"
debug:
msg: "{{ ansible_local.test.was_server.was_name }} {{ ansible_local.test.was_server.was_version }}"
### Ansible Playbook Execute
# ansible-inventory -i inventory --graph
#
# ansible-playbook -i inventory tmp/ansible_local.yml
플레이북 실행
ansible-playbook -i inventory tmp/local_facts_get.yml
$ ansible-playbook -i inventory tmp/local_facts_get.yml
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
PLAY [그룹 변수가 있는 플레이북 예제(Group Variables)] ****************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [ubuntu22]
ok: [centos7]
TASK [Print local facts] *******************************************************************************************
ok: [centos7] => {
"msg": {
"test": {
"was_server": {
"was_name": "php-fpm",
"was_version": "8.1.27"
},
"web_server": {
"web_name": "nginx",
"web_version": "1.24.0"
}
}
}
}
ok: [ubuntu22] => {
"msg": {
"test": {
"was_server": {
"was_name": "php-fpm",
"was_version": "8.1.27"
},
"web_server": {
"web_name": "nginx",
"web_version": "1.24.0"
}
}
}
}
TASK [Web Server] **************************************************************************************************
ok: [centos7] => {
"msg": "nginx 1.24.0"
}
ok: [ubuntu22] => {
"msg": "nginx 1.24.0"
}
TASK [Middleware Server] *******************************************************************************************
ok: [centos7] => {
"msg": "php-fpm 8.1.27"
}
ok: [ubuntu22] => {
"msg": "php-fpm 8.1.27"
}
PLAY RECAP *********************************************************************************************************
centos7 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ubuntu22 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
제어 노드에서 사용자가 정의한 facts 변수를 정의하고 확인하는 플레이북
플레이북 작성
vim local_facts_set.yml
---
- name: 예제 플레이북 (그룹 변수 포함)
hosts: zdocker
become: yes
gather_facts: true
tasks:
- name: Create facts directory
file:
state: directory
dest: "/etc/ansible/facts.d/"
recurse: yes
tags: debug_facts_set
- name: Create facts file
file:
state: touch
dest: "/etc/ansible/facts.d/test.fact"
tags: debug_facts_set
- name: Edit facts file
copy:
content: |
[web_server]
web_name=nginx
web_version=1.24.0
[was_server]
was_name=php-fpm
was_version=8.1.27
[cache_server]
cache_name=redis
cache_version=6.1.27
dest: "/etc/ansible/facts.d/test.fact"
tags: debug_facts_set
- name: Print local facts
debug:
msg: "{{ ansible_local | safe }}"
tags: debug_facts_get
- name: "Web Server"
debug:
msg: "{{ ansible_local['test']['web_server']['web_name'] }} {{ ansible_local['test']['web_server']['web_version'] }}"
tags: debug_facts_get
- name: "Middleware Server"
debug:
msg: "{{ ansible_local.test.was_server.was_name }} {{ ansible_local.test.was_server.was_version }}"
tags: debug_facts_get
- name: "Cache Server"
debug:
msg: "{{ ansible_local.test.cache_server.cache_name }} {{ ansible_local.test.cache_server.cache_version }}"
tags: debug_facts_get
플레이북 실행
ansible-playbook -i inventory tmp/local_facts_set.yml
$ ansible-playbook -i inventory tmp/local_facts_set.yml
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
PLAY [예제 플레이북 (그룹 변수 포함)] *******************************************************************************
TASK [Gathering Facts] **********************************************************************************************
ok: [ubuntu22]
ok: [centos7]
TASK [Create facts directory] ***************************************************************************************
ok: [ubuntu22]
ok: [centos7]
TASK [Create facts file] ********************************************************************************************
changed: [ubuntu22]
changed: [centos7]
TASK [Edit facts file] **********************************************************************************************
ok: [ubuntu22]
ok: [centos7]
TASK [Print local facts] ********************************************************************************************
ok: [centos7] => {
"msg": {
"test": {
"cache_server": {
"cache_name": "redis",
"cache_version": "6.1.27"
},
"was_server": {
"was_name": "php-fpm",
"was_version": "8.1.27"
},
"web_server": {
"web_name": "nginx",
"web_version": "1.24.0"
}
}
}
}
ok: [ubuntu22] => {
"msg": {
"test": {
"cache_server": {
"cache_name": "redis",
"cache_version": "6.1.27"
},
"was_server": {
"was_name": "php-fpm",
"was_version": "8.1.27"
},
"web_server": {
"web_name": "nginx",
"web_version": "1.24.0"
}
}
}
}
TASK [Web Server] ***************************************************************************************************
ok: [centos7] => {
"msg": "nginx 1.24.0"
}
ok: [ubuntu22] => {
"msg": "nginx 1.24.0"
}
TASK [Middleware Server] ********************************************************************************************
ok: [ubuntu22] => {
"msg": "php-fpm 8.1.27"
}
ok: [centos7] => {
"msg": "php-fpm 8.1.27"
}
TASK [Cache Server] *************************************************************************************************
ok: [centos7] => {
"msg": "redis 6.1.27"
}
ok: [ubuntu22] => {
"msg": "redis 6.1.27"
}
PLAY RECAP **********************************************************************************************************
centos7 : ok=8 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ubuntu22 : ok=8 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
728x90
'리눅스' 카테고리의 다른 글
fio 도구를 사용하여 디스크 I/O 성능을 측정하는 방법 (0) | 2024.01.18 |
---|---|
[draft] SSH 호스트 키가 변경되었을 때 발생하는 경고 메시지를 해결하는 방법 (0) | 2024.01.16 |
Ansible Facts (0) | 2024.01.15 |
ICMP Ping 테스트를 수행하는 Python 스크립트 (0) | 2024.01.14 |
CentOS 7에서 nginx-module-vts 모듈을 추가하는 방법 (0) | 2024.01.12 |