포스트

[K8S Deploy Study by Gasida] - Ansible 기초 - 반복문

[K8S Deploy Study by Gasida] - Ansible 기초 - 반복문

ansible.builtin.service

단순 반복문

  • loop 키워드를 작업에 추가하면 작업을 반복해야 하는 항목의 목록을 값으로 사용.
  • 해당하는 값을 사용하려면 item 변수를 이용할 수 있다.
1
2
3
4
5
6
7
8
9
10
---
- hosts: all
  tasks:
  - name: Check sshd and rsyslog state
    ansible.builtin.service:
      name: ""
      state: started
    loop:
      - vboxadd-service  # ssh
      - rsyslog

실행 하기

1
ansible-playbook check-services.yml

결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PLAY [all] ****************************************************************************

TASK [Gathering Facts] ****************************************************************
ok: [tnode2]
ok: [tnode1]
ok: [tnode3]

TASK [Check sshd and rsyslog state] ***************************************************
ok: [tnode3] => (item=vboxadd-service)
ok: [tnode1] => (item=vboxadd-service)
ok: [tnode2] => (item=vboxadd-service)
ok: [tnode3] => (item=rsyslog)
ok: [tnode1] => (item=rsyslog)
ok: [tnode2] => (item=rsyslog)

PLAY RECAP ****************************************************************************
tnode1                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
tnode2                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
tnode3                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

loop문에 사용하는 아이템을 변수에 저장하기

1
2
3
4
5
6
7
8
9
10
11
12
13
---
- hosts: all
  vars:
    services:
      - vboxadd-service  # ssh
      - rsyslog

  tasks:
  - name: Check sshd and rsyslog state
    ansible.builtin.service:
      name: ""
      state: started
    loop: ""

실행하기

1
ansible-playbook check-services.yml

ansible.builtin.file

여러 항목을 loop 문에서 사전 목록으로 사용할 수 도 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
- hosts: all

  tasks:
    - name: Create files
      ansible.builtin.file:
        path: ""
        mode: ""
        state: touch
      loop:
        - log-path: /var/log/test1.log
          log-mode: '0644'
        - log-path: /var/log/test2.log
          log-mode: '0600'

ansible.builtin.shell

Register 변수 사용

  • Register 변수는 반복 실행되는 작업의 출력을 캡처할 수 있다. 이 키워드를 이용하여 실행 결과를 result 변수에 저장한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
---
- hosts: localhost
  tasks:
    - name: Loop echo test
      ansible.builtin.shell: "echo 'I can speak '"
      loop:
        - Korean
        - English
      register: result

    - name: Show result
      ansible.builtin.debug:
        var: result

결과

  • 아래와 같이 result에 결과 가 저장되어있는 것을 볼 수 있다.
  • 하지만 그중에서 우리는 results값만 뽑아내고 싶다.

파일 수정

  • debug 모듈에 loop 키워드를 사용하여 result.results를 아이템 변수로 사용한다.
  • 해당 아이템의 stdout의 값을 출력할 때는 item.stdout이라는 변수로 결과값을 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
- hosts: localhost
  tasks:
    - name: Loop echo test
      ansible.builtin.shell: "echo 'I can speak '"
      loop:
        - Korean
        - English
      register: result

    - name: Show result
      ansible.builtin.debug:
        msg: "Stdout: "
      loop: ""

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.