728x90

 

 

안녕하세요, 오늘은 CloudNet Ansible 101 2주 차 도전과제 내용을 작성해 보았습니다.

 

# 1. linux user1~10(10명) 를 반복문을 통해서 생성 후 확인 후 삭제를 해보자.

 

1) 사용자 생성을 위한 플레이북 생성

ch1.yml

- hosts: localhost
  become: yes
  tasks:
    - name: 사용자 생성
      ansible.builtin.user:
        name: "user{{ item }}"
        state: present
      loop: "{{ range(1, 11) | list }}"

 

2) 실행

 

3) 사용자 확인을 위한 플레이북 생성

ch1-2.yml

---
- hosts: localhost
  become: yes
  tasks:
    - name: 사용자 존재 여부 확인
      command: "id user{{ item }}"
      loop: "{{ range(1, 11) | list }}"
      ignore_errors: yes
      register: check_users

    - name: 확인 결과 출력
      debug:
        msg: "{{ item.stdout }}"
      loop: "{{ check_users.results }}"
      when: item.rc == 0

 

4) 실행

 

5) 사용자 삭제를 위한 플레이북 생성

---
- hosts: localhost
  become: yes
  tasks:
    - name: 사용자 삭제
      ansible.builtin.user:
        name: "user{{ item }}"
        state: absent
      loop: "{{ range(1, 11) | list }}"

 

 

#2. loop 반복문 중 sequence 를 이용하여 /var/log/test1 ~ /var/log/test100 100개 파일(file 모듈)을 생성 확인 후 삭제 진행해 보자.

1) log 파일 생성을 위한 플레이북 생성

ch2.yml

---
- hosts: localhost
  become: yes
  tasks:
    - name: 파일 생성
      ansible.builtin.file:
        path: "/var/log/test{{ item }}"
        state: touch
      loop: "{{ range(1, 101) | list }}"

 

2) 로그 파일 확인을 위한 플레이북 생성

ch2-1.yml

---
- hosts: localhost
  become: yes
  tasks:
    - name: 파일 존재 여부 확인
      ansible.builtin.stat:
        path: "/var/log/test{{ item }}"
      loop: "{{ range(1, 101) | list }}"
      register: file_stat

    - name: 확인 결과 출력
      ansible.builtin.debug:
        msg: "파일 /var/log/test{{ item.item }} 존재: {{ item.stat.exists }}"
      loop: "{{ file_stat.results }}"

 

3) 실행

 

 

 

# 3. Ubuntu OS이면서 fqdn으로 tnode1인 경우, debug 모듈을 사용하여 OS 정보와 fqdn 정보를 출력해 보자.

1) 플레이북 생성

---
- hosts: all

  tasks:
    - name: Print os type
      ansible.builtin.debug:
        msg: >-
             fqdn: {{ ansible_facts['fqdn'] }}
             OS: {{ ansible_facts['distribution'] }}
      when: 
        - ansible_facts['fqdn'] == "ip-10-10-1-11.ap-northeast-2.compute.internal" 
        - ansible_facts['distribution'] == "Ubuntu"

 

2) 실행

 

#4. 반복문, 조건문 동시에 사용하기

1) 플레이북 생성

- hosts: all
  tasks:
    - name: Advanced loop and when example
      ansible.builtin.command: echo "{{ item.name }}"
      loop:
        - { name: 'Alice', age: 24 }
        - { name: 'Bob', age: 30 }
      when: item.age > 25

 

2) 실행

 

#5. apache2 패키지를 apt 모듈을 통해서 설치 시, 핸들러를 호출하여 service 모듈로 apache2를 재시작해보자.

 

1) 플레이북 생성

---
- hosts: all
  become: yes
  tasks:
    - name: Install Apache2
      apt:
        name: apache2
        state: present
        update_cache: yes
      notify: Restart Apache2

  handlers:
    - name: Restart Apache2
      service:
        name: apache2
        state: restarted
      notify: Print message after restarting Apache2

    - name: Print message after restarting Apache2
      debug:
        msg: "Apache2가 재시작 되었습니다"

 

2) 실행

 

#6. block rescure always 키워드를 사용한 플레이북을 작성하여 테스트해보자.

1) 플레이북 생성

---
- hosts: all
  tasks:
    - name: 예외 처리 예제
      block:
        - name: 파일 복사
          ansible.builtin.copy:
            src: /tmp/source_file.txt
            dest: /tmp/destination_file.txt

      rescue:
        - name: 복사 실패 시 에러 메시지 출력
          ansible.builtin.debug:
            msg: "파일 복사에 실패했습니다."

      always:
        - name: 항상 실행되는 태스크
          ansible.builtin.debug:
            msg: "이 태스크는 항상 실행됩니다."

 

2) 실행

여기서는 파일 복사가 실패해서, rescue로 넘어가고 always가 동작하는 내용입니다.

 

#7. 작성 중..

728x90
반응형