본문 바로가기

리눅스

Ansible setup 모듈(setup module)을 사용하는 방법

728x90

Ansible setup 모듈(setup module)을 사용하는 방법

Ansible의 setup 모듈은 대상 호스트의 시스템 정보를 수집하여 Ansible 플레이북에서 사용할 수 있는 팩트(사실)를 생성합니다. 이는 호스트의 운영 체제, 하드웨어, 네트워크 정보 등 다양한 정보를 확인하는 데 사용됩니다.

ansible facts

ansible facts는 운영체제, IP주소, 연결된 파일시스템 등을 포함하여 원격시스템과 관련된 데이터

setup 모듈 사용 방법

ansible -i inventory/hosts localhost -m setup
$ ansible -i inventory/hosts -m setup localhost
bvm41 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.56.11",
            "192.168.101.199"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::a00:27ff:fe9d:eae8",
            "fe80::480e:72fa:8856:aff9"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "12/01/2006",
        "ansible_bios_version": "VirtualBox",
        "ansible_cmdline": {
            "BOOT_IMAGE": "/vmlinuz-3.10.0-1160.25.1.el7.x86_64",
            "LANG": "en_US.UTF-8",
            "crashkernel": "auto",
            "quiet": true,
            "rhgb": true,
            "ro": true,
            "root": "UUID=ad62d3f6-1579-471d-8d9f-7be9d4dab178"
        },
        "ansible_date_time": {
            "date": "2021-06-03",
            "day": "03",
            "epoch": "1622687020",
            "hour": "11",
            "iso8601": "2021-06-03T02:23:40Z",
            "iso8601_basic": "20210603T112340814113",
            "iso8601_basic_short": "20210603T112340",
            "iso8601_micro": "2021-06-03T02:23:40.814113Z",
            "minute": "23",
            "month": "06",
            "second": "40",
            "time": "11:23:40",
            "tz": "KST",
            "tz_offset": "+0900",
            "weekday": "목요일",
            "weekday_number": "4",
            "weeknumber": "22",
            "year": "2021"
        },
        ...
        "ansible_selinux_python_present": true,
        "ansible_service_mgr": "systemd",
        "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAF6dl8y1Iw7wTYsQMoPsfIDphwEi3NN7vZLE7sKgk2yFpwwp0fsJ5ZEBZPoTMPnspnsv1Dl+9iTJ6mUMT1fyu0=",
        "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIAuOF7DbOMaGF92QID1TRQ/TW7JjPlRVilIeb8v/rd+O",
        "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCzrs0I+bLAivb+aN2s9+hMwPM9lR2EmQdLrUuelA4VY0WQ3wqkh5Vb1+mhCT9w2mPA/qniKxwhneANKKrYgGXCeJhhnhvxhAnwm82qSI+Cis2yNSQIaejauaozlIXRmmgjLRq6L+3nceCsHMzTOkKTDs4oRRy/gYkmzy7cvhL9Ck4XY0sZw3dVTJm022QQxRtW07hbyT1U0ET5sMFJdYlm7j/cF7eM8datdMEfs1X/Woa9mOKvjnzY7UKSqGZUubdiRNVQe1046LtogGTtpgr8Xd85VzXSB7RQW7oRhRU7u0dCy0lYWIVhDWoLSOG/Z6uVWc3gQza0uZwR2eMO2yoJ",
        "ansible_swapfree_mb": 4095,
        "ansible_swaptotal_mb": 4095,
        "ansible_system": "Linux",
        "ansible_system_capabilities": [
            ""
        ],
        "ansible_system_capabilities_enforced": "True",
        "ansible_system_vendor": "innotek GmbH",
        "ansible_uptime_seconds": 9916,
        "ansible_user_dir": "/home/ec2-user",
        "ansible_user_gecos": "",
        "ansible_user_gid": 1000,
        "ansible_user_id": "ec2-user",
        "ansible_user_shell": "/bin/zsh",
        "ansible_user_uid": 1000,
        "ansible_userspace_architecture": "x86_64",
        "ansible_userspace_bits": "64",
        "ansible_virtualization_role": "guest",
        "ansible_virtualization_type": "virtualbox",
        "discovered_interpreter_python": "/usr/bin/python",
        "gather_subset": [
            "all"
        ],
        "module_setup": true
    },
    "changed": false
} 

많은 양의 데이터가 출력되므로 필터 파라미터를 사용하여 필요한 데이터만 출력할 수 있다

파라미터

파라미터

IP 주소 및 CPU 정보 출력

ansible -i inventory/hosts localhost -m setup -a "filter=ansible_all_ipv4_addresses"
$ ansible -i inventory/hosts localhost -m setup -a "filter=ansible_all_ipv4_addresses"
bvm41 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.56.11",
            "192.168.101.199"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

 

ansible -i inventory/hosts localhost -m setup -a "filter=ansible_processor"
$ ansible -i inventory/hosts localhost -m setup -a "filter=ansible_processor"
bvm41 | SUCCESS => {
    "ansible_facts": {
        "ansible_processor": [
            "0",
            "GenuineIntel",
            "Intel(R) Core(TM) i7-4558U CPU @ 2.80GHz"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}
728x90

setup 모듈을 사용하여 Ansible에서 호스트 정보를 수집하는 간단한 예제

1. Ansible 플레이북 작성

Ansible 플레이북을 작성합니다. 예를 들어 collect_host_info.yml라는 플레이북 파일을 만듭니다.

---
- name: Collect Host Information
  hosts: your_target_host
  gather_facts: yes  # setup 모듈 사용을 위해 필요한 옵션

  tasks:
    - name: Run setup module
      setup:

여기서 your_target_host는 정보를 수집하려는 대상 호스트의 그룹이나 호스트 이름으로 바꿔주어야 합니다.

2. 플레이북 실행

작성한 플레이북을 실행합니다.

ansible-playbook -i your_inventory_file collect_host_info.yml

여기서 your_inventory_file는 대상 호스트를 지정하는 인벤토리 파일의 경로입니다.

3. 수집된 정보 확인

Ansible이 플레이북을 실행하면, 호스트에서 수집된 정보는 Ansible 팩트로 저장됩니다. 이 정보는 이후의 태스크에서 사용할 수 있습니다.

수집된 정보는 다음과 같이 확인할 수 있습니다.

ansible your_target_host -m setup

your_target_host는 호스트 이름이나 호스트 그룹으로 변경되어야 합니다.

 

이렇게 함으로써 setup 모듈을 사용하여 호스트에서 수집한 정보를 활용할 수 있습니다. 이 정보는 특히 플레이북에서 동적으로 환경에 맞게 동작해야 하는 경우에 유용하게 사용됩니다.

 

참고URL

- https://docs.ansible.com/ansible/2.9/modules/setup_module.html

- https://docs.ansible.com/ansible/latest/user_guide/playbooks_vars_facts.html

 

728x90