ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Ansible 101] 호스트명 설정하기
    IT/Ansible 2024. 2. 4. 05:54
    728x90

    앤서블로 접근하기 위한 대상 서버(tnode1~3)들은 이미 제어 노드(server)의 인벤토리에 등록되어 있습니다.

    - ansible.builtin.hostname 모듈 : 호스트명 설정에 사용합니다.

    - ansible.builtin.lineinfile 모듈 : 호스트명을 hosts 파일에 추가할 때 사용

    - /etc/hosts 에 tnode 정보들을 등록하기 위해 필요한 정보들을 변수로 정의합니다.

     

     

     

     

    1) 프로젝트 디렉터리 생성 및 ansible.cfg, inventory 파일 작성

    chapter_10.2/..

     

    #
    mkdir ~/ansible-project/chapter_10.2
    cd ~/ansible-project/chapter_10.2
    
    # ansible.cfg, inventory 파일 작성
    cat <<EOT> ansible.cfg
    [defaults]
    inventory = ./inventory
    remote_user = ansible
    ask_pass = false
    inject_facts_as_vars = false
    roles_path = ./roles
    
    [privilege_escalation]
    become = true
    become_method = sudo
    become_user = root
    become_ask_pass = false
    EOT
    
    cat <<EOT> inventory
    [tnode]
    tnode1
    tnode2
    tnode3
    EOT

     

    2) 변수 정의 파일 생성

    touch ~/ansible-project/chapter_10.2/vars_hosts_info.yml

     

    chapter_10.2/vars_hosts_info.yml

    tnodes:
      - hostname: tnode1
        fqdn: tnode1.local
        net_ip: 10.10.1.11
      - hostname: tnode2
        fqdn: tnode2.local
        net_ip: 10.10.1.12
      - hostname: tnode3
        fqdn: tnode3.local
        net_ip: 10.10.1.13

     

    3) 메인 플레이북 작성 :

    hostname은 inventory 정보를 통해서 설정,

    /etc/hosts 파일은 내용 추가는 변수 정의 파일에서 반복문을 통해 가져온다.

     

    regexp는 대체(기본값 수정, state=present)하거나 혹은 삭제(state=absent).

    touch ~/ansible-project/chapter_10.2/set_hostname.yml

     

    chapter_10.2/set_hostname.yml

    ---
    - hosts: tnode
      tasks: 
      - name: Set hostname from inventory
        ansible.builtin.hostname:
          name: "{{ inventory_hostname }}"
    
    - hosts: all
      vars_files: vars_hosts_info.yml
    
      tasks: 
      - name: Add host ip to hosts
        ansible.builtin.lineinfile:
          path: /etc/hosts
          line: "{{ item.net_ip }}  {{ item.hostname }} {{ item.fqdn }}"
          regexp: "^{{ item.net_ip }}"
        loop: "{{ tnodes }}"

     

    4) 플레이북 실행

    - 실행 전

    ansible -m shell -a "cat /etc/hosts" tnode

     

     

    -실행 후

    # 문법 체크
    ansible-playbook --syntax-check set_hostname.yml
    
    # 플레이북 실행
    ansible-playbook set_hostname.yml
    ...
    
    # 확인
    ansible -m shell -a "hostname" tnode
    ansible -m shell -a "cat /etc/hosts | grep tnode" tnode
    
    # tnode1에서 다른 노드 통신 확인
    ssh tnode1 ping -c 1 tnode2
    ssh tnode1 ping -c 1 tnode3.local

    플레이북 실행 화면

     

     

    실행 내용 확인 및 통신 확인

     

     

     

     

    728x90
    반응형
Designed by Tistory.