카이도스의 Tech Blog

Ansible 기본2(변수) 본문

Ansible

Ansible 기본2(변수)

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

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


변수의 종류와 사용법

ansible.builtin.user 모듈

- 그룹 변수 : 인벤토리에 정의된 호스트 그룹에 적용하는 변수

  • ansible/inventory
[web]
ansible1
ansible2

[db]
ansible3

[all:children]
web
db

[all:vars]
user=ansible
  • ansible/create-user.ym
---

- hosts: all
  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present
  • 실행
# 실행
ansible-playbook create-user.yml
...
TASK [Create User ansible] *********
...

# 한번 더 실행 : 멱등성 확인
ansible-playbook create-user.yml

# ansible1~3에서 ansible 사용자 생성 확인
#ssh ansible1~3 tail -n 3 /etc/passwd
#ssh ansible1~3 ls -l /home
for i in {1..3}; do echo ">> tnode$i <<"; ssh root@ansible$i tail -n 3 /etc/passwd; echo; done
for i in {1..3}; do echo ">> tnode$i <<"; ssh root@ansible$i ls -l /home; echo; done

# ansible 에 ansible 사용자 삭제 후 확인
ssh ansible1 userdel -r ansible
ssh ansible1 tail -n 2 /etc/passwd

# 실행
ansible-playbook create-user.yml

- 호스트 변수 : 말 그대로 해당 호스트에서만 사용할 수 있음

  • ansible/inventory
[web]
ansible1
ansible2

[db]
ansible3 user=ansible1

[all:children]
web
db

[all:vars]
user=ansible
  • ansible/create-user1.yml
cp create-user.yml create-user1.yml

# create-user1.yml 파일 편집
---

- hosts: db
  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present
  • 실행
# (터미널2) 모니터링
watch -d "ssh ansible3 tail -n 3 /etc/passwd"

# 실행
ansible-playbook create-user1.yml
...
TASK [Create User ansible1] *********
...

- 플레이 변수 : 플레이북 내에서 선언되는 변수, 별도 파일 분리

  • ansible/create-user2.yml
cp create-user1.yml create-user2.yml

# create-user2.yml 파일 편집
---

- hosts: all
  vars:
    user: ansible2

  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present
  • 실행
# (터미널2) 모니터링
watch -d "ssh ansible3 tail -n 3 /etc/passwd"

#  인벤토리에 선언한 그룹 변수와 호스트 변수 확인
cat inventory

# 실행
ansible-playbook create-user2.yml
...
TASK [Create User ansible2] *********
...
  • ansible/vars/users.yml
mkdir vars
echo "user: ansible3" > vars/users.yml
  • ansible/create-user3.yml
cp create-user2.yml create-user3.yml

# create-user3.yml 파일 편집
---

- hosts: all
  vars_files:
    - vars/users.yml

  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present
  • 실행
# (터미널2) 모니터링
watch -d "ssh ansible3 tail -n 3 /etc/passwd"

# 플레이 변수 파일 확인
cat vars/users.yml

# 실행
ansible-playbook create-user3.yml
...
TASK [Create User ansible3] *********
...

- 추가 변수 : 외부에서 ansible-playbook를 실행 할 때 함께 파라미터로 넘겨주는 변수를 의미. 앞에 변수 중 우선순위 가장 높음.
→ 실행 시 -e(extra_vars 약자) 옵션으로 추가 변수 선언

  • ansible/create-user3.yml
# (터미널2) 모니터링
watch -d "ssh ansible3 tail -n 3 /etc/passwd"

# 실행
ansible-playbook -e user=ansible4 create-user3.yml
...
TASK [Create User ansible4] *********
...
변수 우선 순위 : 추가변수(실행 시 파라미터) > 플레이 변수 > 호스트 변수 > 그룹 변수

ansible.builtin.debug 모듈

- 작업 변수 : 플레이북의 태스트 수행 결과저장. 특정 작업 수행 후 그 결과를 후속 작업에서 사용할 때 주로 사용됨.

  • ansible/create-user4.yml
cp create-user3.yml create-user4.yml

# create-user4.yml 파일 편집
---

- hosts: db
  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present
    register: result
  
  - ansible.builtin.debug:
      var: result
  • 실행
# (터미널2) 모니터링
watch -d "ssh ansible3 tail -n 3 /etc/passwd"

# 실행 : ok=3의 의미는?
ansible-playbook -e user=ansible5 create-user4.yml
PLAY [db] ***********************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [ansible3]

TASK [Create User ansible5] *****************************************************************************************************************************************************************************************************************
changed: [ansible3]

TASK [ansible.builtin.debug] ****************************************************************************************************************************************************************************************************************
ok: [ansible3] => {
    "result": {
        "changed": true,
        "comment": "",
        "create_home": true,
        "failed": false,
        "group": 1005,
        "home": "/home/ansible5",
        "name": "ansible5",
        "shell": "/bin/sh",
        "state": "present",
        "system": false,
        "uid": 1005
    }
}

PLAY RECAP **********************************************************************************************************************************************************************************************************************************
ansible3                   : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

도전과제1 생성된 user를 ansible.builtin.user 모듈을 통해서 제거해보자

cp create-user4.yml delete-user.yml

# delete-user.yml 파일 편집
---

- hosts: all
  tasks:
  - name: Delete User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: absent
      remove: yes
    register: result
  
  - ansible.builtin.debug:
      var: result

# 실행
ansible-playbook -e user=ansible5 delete-user.yml
ansible-playbook -e user=ansible4 delete-user.yml

도전과제2 관리 대상에 uptime을 ansible.builtin.debug 모듈을 통해서 확인해보자

# uptime.yml 파일 생성
---

- hosts: all
  tasks:    
  - name: Get uptime information
    ansible.builtin.shell: /usr/bin/uptime
    register: result

  - ansible.builtin.debug:
      var: result

# 실행
ansible-playbook uptime.yml
728x90
반응형

'Ansible' 카테고리의 다른 글

Ansible 기본4(Facts)  (0) 2024.03.26
Ansible 기본3(Ansible Vault)  (0) 2024.03.26
Ansible 기본1(설치 후 기본 활용)  (0) 2024.03.11
Comments