ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Ansible 101] 2주차 도전과제
    IT/Ansible 2024. 1. 21. 08:57
    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
    반응형
Designed by Tistory.