Ssoon

[ Part-2 ] 앤서블 기본 사용법 - 반복문 본문

Ansible 101 Study

[ Part-2 ] 앤서블 기본 사용법 - 반복문

구구달스 2024. 1. 15. 22:08
CloudNet@ 가시다님이 진행하는 Ansible 101 Study
"앤서블로 시작하는 인프라 자동화" (한빛미디어) 로 진행

반복문

💠 단순 반복문

  • sshd 서비스와 rsyslog 서비스의 상태 체크 playbook
---
- hosts: all
  tasks:
    - name: check sshd service
      ansible.builtin.service:
        name: sshd
        state: started

    - name: check rsyslog state
      ansible.builtin.service:
        name: rsyslog
        state: started
  • ansible-playbook 실행

  • loop 반복문 적용
    • loop 키워드 아래 체크할 서비스 sshd 와 rsyslog 나열
    • service 모듈 name 에는 item 변수 사용
- hosts: all
  tasks:
    - name: check sshd and rsyslog state
      ansible.builtin.service:
        name: "{{ item }}"
        state: started
      loop:
        - sshd
        - rsyslog
  • ansible-playbook 실행

  • loop 문에 사용하는 item 을 변수에 저장하면 loop키워드에 해당 변수 사용 가능
    • 체크한 sshd 와 rsyslog 를 services 라는 변수에 목록으로 저장 
    • 태스크의 loop 문에서는 앞에서 선언한 serviecs 변수 사용
- hosts: all
  vars:
    services:
      - sshd
      - rsyslog

  tasks:
    - name: check sshd and rsyslog state
      ansible.builtin.service:
        name: "{{ item }}"
        state: started
      loop: "{{ services }}"
  • ansible-playbook 실행

💠 사전 목록에 의한 반복문

  • 이름, 패스워드 등의 여러 항목을 loop문에서 사전목록으로 사용
  • loop 키워드 아래에 log-path 변수와 log-made 변수 여러 건 입력
  • ansible.builtin.file 모듈 loop문을 통해 추가한 변수 item['log-path'], item[''log-made"] 참조
- hosts: all

  tasks:
    - name: create files
      ansible.builtin.file:
        path: "{{ item['log-path'] }}"
        mode: "{{ item['log-made'] }}"
        state: touch
      loop:
        - log-path: /var/log/test1.log
          log-made: '0644'
        - log-path: /var/log/test2.log
          log-made: '0600'
  • ansible-playbook 실행

  • 노드에 접속   확인

💠 반복문과 Register 변수 사용

  • Register 변수 : 반복 실행되는 작업의 출력을 캡처 반복 실행되는 작업들 확인
  • ansible.builtin.shell 'i can speak ~" 메시지 출력
  • loop 키워드 korea , english 아이템 나열
  • register 키워드 실행 결과를 result 변수 저장
  • ansible.builtin.debug 모듈로 확인
---
- hosts: localhost
  tasks:
    - name: loop echo test
      ansible.builtin.shell: "echo 'i can speak {{ item }}'"
      loop:
        - korean
        - english
      register: result

    - name: show result
      ansible.builtin.debug:
        var: result
  • ansible-playbook 실행

  • result 내의 results 의 실행 결과 배열 형식
  • results의 특정 값을 플레이북에서 사용 loop문을 이용
  • ansible.builtin.debug 모듈에 loop 키워드 사용 result.results를 아이템 변수로 사용
  • 아이펨의 stdout의 값을 출력할 때는 item.stdout 변수로 결과값 출력
- hosts: localhost
  tasks:
    - name: loop echo test
      ansible.builtin.shell: "echo 'i can speak {{ item }}'"
      loop:
        - korean
        - english
      register: result

    - name: show result
      ansible.builtin.debug:
        msg: "stdout: {{ item.stdout }}"
      loop: "{{ result.results }}"
  • ansible-playbook 실행
  • loop 로 사용된 item 에 저장된 값과 ansible.builtin.debug 모듈을 이용해 출력한 메시지 확인

 

 
Comments