AWS Ansible 3

sundays·2022년 9월 22일
0

Playbook의 play 코드 구조

타깃 부분 - play에 대한 공통 정보, 필수 사항

  • 실행 장비, 사용자 정보등
  • name attribute
    • play가 어떤 목적을 가지는지 설명하는 내용
    • playbook 실행시 출력되는 내용
    • 생략할 수 있다.
  • hosts attribute
    • play가 적용될 managed node에 대한 이름( host 이름 )
    • 인벤토리에 정의된 이름 사용
  • user attribute
    • play를 적용할 사용자 ID
  • become attribute
    • 관리자 권한으로 권한 상승 유무 명시
    • play 차원에서 관리자 권한 상승 유무 명시
  • become_user attribute
    • 관리자 권한을 갖는 사용자 명시
    • play 차원에서 관리자 권한을 갖는 사용자 명시
  • gather_facts attribute
    • managed node에 대한 fact 정보 수집 유무 확인
    • default - gather_facts: True
    • fact 정보 - managed node에 대한 정보
    • managed node에 대한 fact 정보 수집을 활성화 하게 되면 동작 속도가 느려진다.

변수 부분 - 선택 사항

  • play 전체에서 사용하는 변수 목록
  • 변수 부분을 변수 사용시에만 기술 되는 부분
  • vars - 변수 부분
  • vars_files - 변수를 가지고 있는 외부 파일 기술 부분

태스크 부분 - task 목록, 필수 사항

  • 실제 수행할 모듈
  • name task attribute
    • 하나의 태스크 설명
    • name attribute의 내용을 기술하지 않아도 되나 실제로는 항상 기술한다.
  • managed node에서 수행한 모듈 명시

Playbook (play - role 구조)

  • role
    • 불필요하거나 중복되는 소스를 제거하고 자주 사용하는 기능을 재사용하기 위해 사용하는 task 코드 집합
    • 라이브러리( Library )
      • 통상 프로그래밍 언어에서 함수( function )를 모아놓은 파일을 의미
      • role을 라이브러리로 생각할 수 있다.
    • YAML 형식으로 작성

변수와 facts

  • 프로그래밍 언어는 아니지만 프로그래밍 언어의 특성을 갖고 있다
  • 변수 대체 (variable substitutution)
  • playbook 변수
    • vars - key_file: /etc/nginx/ssl/nginx.key
    • var 섹션에 변수 이름과 값 정의
    • vars_files 섹션을 통해 변수로 구성된 파일을 지정
      • nginx.yml -> 변수 저장파일

변수 내용 출력

  • debug 모듈 사용
  • msg 파라미터 사용하여 내용 출력
  • debug 모듈을 이용하여 변수 출력시 "{{변수명}}" 형식으로 사용해야 변수 내용을 출력 할 수 있다
  • 예시 1
---
- name: variable test
  hosts: managed
  gather_facts: false

  vars:
    message: Ansible variable test
  tasks:
    - name: print variable
      debug:
        msg="{{ message }}"
        

  • Task 결과 변수 저장
    • task 동작 결과에 따라 변수를 설정할 때는 모듈을 호출할 때 register 절를 사용하여 변수 생성
    • register parameters include
      • _raw_params, _uses_shell, argv, chdir, creates, executable, removes, stdin, stdin_add_newline, strip_empty_ends, warn
    • ignore_errors : error 발생해도 무시하고 계속 실행
  • 예시 2
---
- name: variable test
  hosts: managed
  gather_facts: false

  vars:
    message: Ansible variable test

  tasks:
    - name: debug module test
      debug:
        msg:
    
    - name: print variable
      debug:
        msg="message variable -> {{ message }}"

- name: task variable test
  hosts: private
  gather_facts: false

  vars:
    file_path: /home/ec2-user/work
  
  tasks:
    - name: current directory
      file:
        path: "{{ file_path }}"
        state: touch
      register: result
      ignore_errors: true

    - name: print result
      debug:
        msg: "{{ result }}"

  • 예제 3 (디렉토리 생성)
---
- name: create directory & change directory
  hosts: private
  gather_facts: False

  tasks:
    - name: create directory
      file:
        path: "/home/ec2-user/{{file_name}}"
        state: directory
      register: result_create

    - name: change directory
      shell: cd "/home/ec2-user/{{file_name}}"

    - name: debug
      debug:
        var: result_create

확인

  • 예제 4 (복사)
---
- name: copy file
  hosts: "{{ host_names }}"
  gather_facts: False
 
  tasks:
    - name: copy file
      copy:
        src: "{{ src_file }}"
        dest: "{{ dest_file }}"
      register: result
    
    - name: confirm copy
      shell: ls -lF "{{ dest_file }}"
      register: result_confirm

    - name: debug
      debug:
        var: result

facts

  • 매니지드 노드에 대한 정보
  • ansible playbook을 실행할때 첫번째 수행 task가 매니지드 노드의 정보를 갖는 팩트를 수집하는 task
  • 매니지드 노드에 대한 모든 종류의 세부 정보를 쿼리 하고 이정보를 ansible_facts에 수집한다
  • gather_facts attribute - 팩트 수집 유무 결정
    • gather_facts: True : 팩트 수집 , default
    • gather_facts: False : 팩트 수집 중단
  • ad-hoc 명령으로 팩트 정보 확인
    • ansible <host 패턴> -m setup
    • ansible <host 패턴> -m setup -a "<filter=하위 facts key>.."
  • playbook 으로 팩트 정보 확인
---
- name: confirm facts
  hosts: private
  gather_facts: True

  tasks:
    - name: ansible facts
      debug:
        msg: "{{ansible_facts['user_id']}}"

Reference

profile
develop life

0개의 댓글