ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Ansible 101 스터디] 앤서블 1주차 기본 실습 (변수)
    IT/Ansible 2024. 1. 14. 06:39
    728x90

    1. 변수

    1-1. 변수의 정의

     

    앤서블은 변수를 통해서 사용자, 설치하고자 하는 패키지, 재시작서비스, 생성 또는 삭제할 파일명 등 시스템 작업 시 사용되는 다양한 값을 저장할 수 있습니다.

     

    변수를 통해 서비스를 재시작할 수도, 사용자로부터 받은 값도 쉽게 적용할 수 있습니다.

    앤서블에서 사용되는 변수는 그룹 변수, 호스트 변수, 플레이 변수, 추가 변수가 있으며 플레이 결과를 저장하기 위한 작업 변수도 있습니다.

     

    1) 그룹 변수

    [web]
    tnode1
    tnode2
    
    [db]
    tnode3
    
    [all:children]
    web
    db
    
    [all:vars]
    user=ansible

     

    그룹 변수는 다음과 같이 [all:vars] k:v로 선언되며 해당 내용 적용 시 모든 관리 노드에 적용됩니다.

     

    다음과 같이, 유저 생성 파일을 만들어 보겠습니다.

    my-ansible/create-user.yml

    ---
    
    - hosts: all
      tasks:
      - name: Create User **{{ user }}**
        ansible.builtin.**user**:
          name: **"{{ user }}"**
          state: present
    

     

    다른 터미널에서 tail 로그를 확인합니다. 
    watch -d "ssh **tnode1** tail -n 3 /etc/passwd"

     

    터미널 1에서는 ansible-playbook create-user.yml로 유저를 생성하고,
    생성된 유저 정보를 확인합니다.

     

    다시, 대상 노드 1에서 ansible이라는 유저를 삭제합니다.

     

    확인하면, tnode1에서 ansible이 삭제된 것을 확인하실 수 있습니다.

     

    이후 다시 생성 후, 적용된 내용을 확인합니다.

     

    2) 호스트 변수

     

    인벤토리를 다음과 같이 변경합니다.

    tnode3에 user=ansible1이라는 내용으로 변경합니다.

    [web]
    tnode1
    tnode2
    
    [db]
    tnode3 user=ansible1
    
    [all:children]
    web
    db
    
    [all:vars]
    user=ansible

     

     

    이 변수는 말 그대로 호스트에 적용되는 변수입니다.


    다음과 같이 플레이북을 만들어 보겠습니다.

    my-ansible/create-user1.yml

    ---
    
    - hosts: db
      tasks:
      - name: Create User {{ user }}
        ansible.builtin.user:
          name: "{{ user }}"
          state: present

     

    적용 시 다음과 같이 변경되는데,

     

    대상 노드 3에서 확인하면, ansible1이 생성된 것을 알 수 있습니다.

     

    3) 플레이 변수

     

    다음은 플레이북 내에서 적용되는 변수인 플레이 변수입니다.

    my-ansible/create-user2.yml

     

     
     
    ---
    
    - hosts: all
      vars:
        user: ansible2
    
      tasks:
      - name: Create User {{ user }}
        ansible.builtin.user:
          name: "{{ user }}"
          state: present

     

    마찬가지로 상기 내용을 적용하면, ansible2라는 유저가 모든 대상 노드에 생성되는 것을 확인할 수 있습니다.

     

     

    4) 추가 변수

    추가 변수는 외부에서 ansible-playbook를 실행할 때 함께 파라미터로 넘겨주는 변수를 의미합니다.

     

    my-ansible/create-user3.yml
     
    ---
    
    - hosts: all
      vars_files:
        - vars/users.yml
    
      tasks:
      - name: Create User {{ user }}
        ansible.builtin.user:
          name: "{{ user }}"
          state: present

     

    위의 플레이북을 다음과 같이 적용하면,

     

    ansible-playbook -e user=ansible4 create-user3.yml

     

    유저4가 모든 노드에 걸쳐 적용되는 것을 볼 수 있습니다.

     

    위의 변수들을 살펴보면, 변수는 다음의 우선순위를 갖습니다.

     

    추가변수(실행 시 파라미터) > 플레이 변수 > 호스트 변수 > 그룹 변수

    728x90
    반응형
Designed by Tistory.