AWS Ansible 4

sundays·2022년 9월 23일
0

반복문

  • Task를 반복해서 동작 시킬 때 사용
  • 모듈의 키워드( keyword, Attribute 성격 )로 사용
  • with_* 키워드와 loop 키워드 사용
    • with_item
    • with_nested
    • with_sqeuenc
  • 패키지 관련 모듈은 반복문을 사용하지 않는 것을 권장
  • 반복문에서 제공되는 목록을 참조하는 변수명은 항상 item 사용

조건문( 선택문 )

  • Task가 특정 조건에만 작업을 수행하도록 구성할 때 사용
  • when 키워드 사용
  • 조건에 대한 표현식을 테스트문 또는 필터 사용
  • 조건문에 변수를 참조할 때 “{{ 변수명 }}” 사용하지 않고 바로 변수명 사용
  • 테스트문
    • 테스트는 표현식을 평가하고 True / False 반환
    • when: 변수 연산 -> 변수를 테스트하기 위한 테스트문
    • <변수> is failed - 작업 실패
    • <변수> is changed - 작업 성공적 실행 및 변경 수행
    • <변수> is succeeded - 작업 성공적 실행
    • <변수> is skipped - 조건문에 의해 실행되지 않았다.
  • 필터
    • when: <변수 | ( 자료형 )> <조건 연산자> 값
    • 변수 | ( 자료형 ) 표현은 변수 형 변환을 의미하고 | 다음에 형변환을 원하는 자료형 기입, 숫자형으로 변환할 때 사용
---
- name: condition tet
  hosts: private

  tasks:
    - name: shell command - /usr/bin/foo
      shell: python3 --version
      #shell: py3 --version
      register: result
      ignore_errors: True

    #- debug:
    #    var : ansible_facts

    - debug:
        msg : "{{ result.stderr }}"
      when: result is failed

    - debug:
        msg : "{{ result.stdout }}"
      when: result is change

---
- name: web server package install
  hosts: private 
  gather_facts: True
  become: yes

  tasks:
    - name: collect only selected facts
      setup:
        filter:
          - 'ansible_distribution'

    - debug:
        var: ansible_facts

    - name: Ubuntu - Install Apache2
      apt:
        upgrade: yes
        update_cache: yes
        name : apache2
        state: present
      ignore_errors: True
      when: ansible_facts['distribution'] == "Ubuntu"

    - name: Amazon Linux - Install httpd
      yum:
        name: httpd
        state: present
      when: ansible_facts['distribution'] == "Amazon"

  • 필터

    • when: <변수 [ | ( 자료형 ) ]> <조건 연산자> 값
    • 변수 | ( 자료형 ) 표현은 변수 형 변환을 의미하고 | 다음에 형변환을 원하는 자료형 기입, 숫자형으로 변환할 때 사용
    • 조건 연산자 - >, <, >=, <=, ==, !=
  • include( 포함 )

    • Playbook의 내용이 많아지거나 복잡한 경우 더 작은 단위로 나누면 관리 편의성이 높아진다.
    • 모듈식으로 여러 개의 Playbook을 main Playbook에 결합하거나 파일의 task를 play에 포함시킬 수 있다.
    • 이와 같은 방식으로 Playbook를 모듈로 나누면 재사용성이 높아진다.( 모듈화 )
    • Ansible에서 파일이나 role을 특정 Playbook에 읽어들일 때 import / include 2가지 방법중 하나를 사용할 수 있다.
      • import - static( 정적, 고정적 ) re-use
      • include - dynamic( 동적, 유동적 ) re-use
  • 예시

# webserver.yml
---
- name: Install Web Server
  hosts: private
  become: yes
  gather_facts: False

  tasks:
    - name : Ubuntu - Install Apache2
      apt:
        upgrade: yes
        update_cache: yes
        name : apache2
        state: present
      ignore_errors: True
      when: ansible_facts['distribution'] == "Ubuntu"

    - name: Amazon Linux - Install httpd
      yum:
        name: httpd
        state: present
      when: ansible_facts['distribution'] == "Amazon"

# common.yml
---
- name: Install Web Server
  hosts: private

  tasks:
    - name: collect only selected facts
      setup:
        filter: 'ansible_distribution'
    #- debug :
    #    var: ansible_facts

# install_pack_web.yml
---
- import_playbook: common.yml
- import_playbook: webserver.yml

Handler

  • 함수와 비슷한 기능
  • task 의 작업과 같은 기능을 제공
  • 반복 동작에 대해 handler 로 정의
  • Handler 정의
    • Hanlder 섹션에 task 정의 tasks 섹션과 같은 레벨
    • 모듈과 같은 레벨
  • 예시
---
- name: Verify apache installation
  hosts: public
  become: yes
  gather_facts: False

  tasks:
    - name: Ensure apache is at the latest version
      yum:
        name: httpd
        state: latest

    - name: Write the apache config file
      template:
        src: ./httpd.j2
        dest: /etc/httpd.conf2
      notify:
      - Restart apache
      register: result

    - name: Ensure apache is running
      service:
        name: httpd
        state: started
      when: result is change

  handlers:
    - name: Restart apache
      service:
        name: httpd
        state: restarted

Roles

  • include 의 확장 개념
  • 역할에 따라 roles 폴더에 필요한 파일을 별도로 생성하여 사용
  • role에서 다른 role 포함 및 변수 전달 가능
  • Roles 정의
    • roles 이름의 폴더 생성
    • roles 폴더 하위에 필요한 폴더 추가 생성
      • tasks/main.yml - 역할 실행 task 저장 파일
      • handlers/main.yml - handler 저장 파일
      • vars/main.yml - 변수 저장 파일
    • playbook 에 적용할 roles 섹션에 role을 추가

Reference

profile
develop life

0개의 댓글