카이도스의 Tech Blog

Ansible 기본4(Facts) 본문

Ansible

Ansible 기본4(Facts)

카이도스 2024. 3. 26. 17:54
728x90
반응형

2024.03.11 - [Ansible] - Ansible 기본1(설치 후 기본 활용)

 

Ansible 기본1(설치 후 기본 활용)

Ansible 실무에 활용 전 vm 통해 테스트하는 방법 안내하도록 하겠습니다. 관련하여 Ansible 사용하실분들은 참고하여 실무에 적용하시면 좋을 것 같습니다. 무작정 따라하시기보다, 내용 변경해가

djdakf1234.tistory.com

2024.03.26 - [Ansible] - Ansible 기본2(변수)

 

Ansible 기본2(변수)

2024.03.11 - [Ansible] - Ansible 기본1(설치 후 기본 활용) Ansible 기본1(설치 후 기본 활용) Ansible 실무에 활용 전 vm 통해 테스트하는 방법 안내하도록 하겠습니다. 관련하여 Ansible 사용하실분들은 참고하

djdakf1234.tistory.com

2024.03.26 - [Ansible] - Ansible 기본3(Ansible Vault)

 

Ansible 기본3(Ansible Vault)

2024.03.11 - [Ansible] - Ansible 기본1(설치 후 기본 활용) Ansible 기본1(설치 후 기본 활용) Ansible 실무에 활용 전 vm 통해 테스트하는 방법 안내하도록 하겠습니다. 관련하여 Ansible 사용하실분들은 참고하

djdakf1234.tistory.com


Ansible 실무에 활용 전 vm 통해 테스트하는 방법 안내하도록 하겠습니다.
관련하여 Ansible 사용하실분들은 참고하여 실무에 적용하시면 좋을 것 같습니다.
무작정 따라하시기보다, 내용 변경해가며 따라하시는걸 추천드립니다.

서버 정보

ansible-control Ubuntu 22.04 4vcore 8GB 80GB 10.10.x.123
ansible1 Ubuntu 22.04 4vcore 8GB 80GB 10.10.x.124
ansible2 Ubuntu 22.04 4vcore 8GB 80GB 10.10.x.125
ansible3 Ubuntu 22.04 4vcore 8GB 80GB 10.10.x.126

설정파일 수정이 많다보니 vscode로 진행했습니다.
DevOps 업무하게 되면 vscode에 익숙해져야 할 것 같네요.

https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com


Facts 자동으로 검색한 변수

Discovering variables: facts and magic variables

- Facts 사용하기 : 기본 활성화로, 플레이북을 실행할 때 자동으로 팩트가 수집됨. ansible_facts 변수로 사용.

  • ansible/facts.yml
---

- hosts: db

  tasks:
  - name: Print all facts
    ansible.builtin.debug:
      var: ansible_facts
  • 실행
#
ansible-playbook facts.yml
...
"default_ipv4": {
    "address": "10.10.x.126",
"fqdn": "ansible3",
...
"kernel": "6.5.0-17-generic"
...
  • ansible/facts1.yml
# 파일 복사
cp facts.yml facts1.yml

# facts1.yml 파일 편집
---

- hosts: db

  tasks:
  - name: Print all facts
    ansible.builtin.debug:
      msg: >
        The default IPv4 address of {{ ansible_facts.fqdn }}
        is {{ ansible_facts.default_ipv4.address }}
  • 실행
#
ansible-playbook facts1.yml
...
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [ansible3]

TASK [Print all facts] **********************************************************************************************************************************************************************************************************************
ok: [ansible3] => {
    "msg": "The default IPv4 address of ansible3 is 10.10.x.126"
}

- 변수로 사용할 수 있는 Ansible Facts

  • ansible/facts2.yml
# 파일 복사
cp facts1.yml facts2.yml

# facts2.yml 파일 편집
---

- hosts: db

  tasks:
  - name: Print all facts
    ansible.builtin.debug:
      msg: >
        The node's host name is {{ ansible_hostname }}
        and the ip is {{ ansible_default_ipv4.address }}
  • 실행
#
ansible-playbook facts2.yml
...
TASK [Print all facts] **********************************************************************************************************************************************************************************************************************
ok: [ansible3] => {
    "msg": "The node's host name is ansible3 and the ip is 10.10.x.126"
}
  • ansible.cfg 수정 후 실행
# ansible.cfg 파일 편집
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = false
inject_facts_as_vars = false  ##추가

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

# 실행
ansible-playbook facts2.yml

- Facts 수집 끄기

  • ansible/facts3.yml
# 파일 복사
cp facts1.yml facts3.yml

# facts3.yml 파일 편집
---

- hosts: db
  gather_facts: no

  tasks:
  - name: Print all facts
    ansible.builtin.debug:
      msg: >
        The default IPv4 address of {{ ansible_facts.fqdn }}
        is {{ ansible_facts.default_ipv4.address }}
  • 실행
# 실행 결과 확인 : 팩트를 수집하지 않았는데, 팩트에서 수집해야만 하는 변수를 사용하려고 해서 에러가 발생
ansible-playbook facts3.yml

# 파일 복사
cp facts3.yml facts3-2.yml

# facts3-2.yml 파일 편집
---

- hosts: db
  gather_facts: no

  tasks:
  - name: Print message
    debug:
      msg: Hello Ansible World

# 실행 : TASK [Print all facts] 가 없다!
ansible-playbook facts3-2.yml
PLAY [db] ***************************************************************************

TASK [Print message] ***************************************************************************************
ok: [ansible3] => {
    "msg": "Hello Ansible World"
}
...
  • ansible/facts4.yml
# 파일 복사
cp facts3.yml facts4.yml

# facts4.yml 파일 편집
---

- hosts: db
  gather_facts: no

  tasks:
  - name: Manually gather facts
    ansible.builtin.setup:

  - name: Print all facts
    ansible.builtin.debug:
      msg: >
        The default IPv4 address of {{ ansible_facts.fqdn }}
        is {{ ansible_facts.default_ipv4.address }}
  • 실행
#
ansible-playbook facts4.yml
...
TASK [Manually gather facts] *******************************************************************************
ok: [ansible3]

TASK [Print all facts] *************************************************************************************
ok: [ansible3] => {
    "msg": "The default IPv4 address of ansible3 is 10.10.x.126"
}

도전과제3 Facts를 사용하여 3개의 VM의 ‘커널 버전’과 ‘운영체제 종류’를 출력해보자

 

# 파일 복사
cp facts3.yml facts6.yml

# facts6.yml 파일 편집
---

- hosts: all
  gather_facts: no

  tasks:
  - name: Manually gather facts
    ansible.builtin.setup:

  - name: Print all facts
    ansible.builtin.debug:
      msg: >
        The kernel_version is {{ ansible_facts.kernel }}
        The OS is {{ ansible_facts.lsb.description }}
# 실행
ansible-playbook facts6.yml
TASK [Manually gather facts] ****************************************************************************************************************************************************************************************************************
ok: [ansible3]
ok: [ansible2]
ok: [ansible1]

TASK [Print all facts] **********************************************************************************************************************************************************************************************************************
ok: [ansible1] => {
    "msg": "The kernel_version is 6.5.0-17-generic is Ubuntu 22.04.4 LTS"
}
ok: [ansible2] => {
    "msg": "The kernel_version is 6.5.0-17-generic is Ubuntu 22.04.4 LTS"
}
ok: [ansible3] => {
    "msg": "The kernel_version is 6.5.0-17-generic is Ubuntu 22.04.4 LTS"
}

PLAY RECAP **********************************************************************************************************************************************************************************************************************************
ansible1                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansible2                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansible3                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
728x90
반응형

'Ansible' 카테고리의 다른 글

Ansible 기본3(Ansible Vault)  (0) 2024.03.26
Ansible 기본2(변수)  (0) 2024.03.26
Ansible 기본1(설치 후 기본 활용)  (0) 2024.03.11
Comments