Ansible - Loop 활용 > Ansible 자료실

본문 바로가기

사이트 내 전체검색

뒤로가기 Ansible 자료실

운영 Ansible - Loop 활용

페이지 정보

작성자 AnsibleM 작성일 21-02-05 16:27 조회 11,274 댓글 0

본문

동일한 작업을 여러 번 반복하는 경우 Ansible Loop 를 활용하여 작업을 수행할 수 있습니다. Ansible 에서 Loop를 활용하는 키워드는 loop, with_* 두가지가 있습니다.

1. Loop


1
2
3
4
5
6
7
8
- name: Add several users
  user:
    name: "{{ item }}"
    state: present
    groups: "wheel"
  loop:
     - testuser1
     - testuser2
cs

> 간단한 문자열 목록이 반복되는 loop

1
2
3
4
5
6
7
8
- name: Add several users
  user:
    name: "{{ item.name }}"
    state: present
    groups: "{{ item.groups }}"
  loop:
    - { name: 'testuser1', groups: 'wheel' }
    - { name: 'testuser2', groups: 'root' }
cs
> loop 내에서 하위 키를 참조하여 해쉬 목록을 반복할 수 있습니다.

1
2
3
4
5
6
- name: Register loop output as a variable
  shell: "echo {{ item }}"
  loop:
    - "one"
    - "two"
  register: echo
cs
> loop 출력을 변수로 등록할 수 있습니다.

1
2
3
4
5
6
7
- name: Give users access to multiple databases
  mysql_user:
    name: "{{ item[0] }}"
    priv: "{{ item[1] }}.*:ALL"
    append_privs: yes
    password: "foo"
  loop: "{{ ['alice', 'bob'] |product(['clientdb', 'employeedb', 'providerdb'])|list }}"
cs
>Jinja2 표현식을 사용하여 복잡한 목록을 반복 할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- name: Create servers
  digital_ocean:
    name: "{{ item.name }}"
    state: present
  loop:
    - name: server1
      disks: 3gb
      ram: 15Gb
      network:
        nic01: 100Gb
        nic02: 10Gb
        ...
  loop_control:
    label: "{{ item.name }}"
cs
> loop_control 활용 : 복잡한 데이터 구조를 반복 할 때 작업의 콘솔 출력 표시 제한.


2. with_*


1
2
3
4
5
6
7
8
- name: add several users
  user:
    name: {{ item }}
    state: present 
    groups: wheel
  with_items:
     - testuser1
     - testuser2
cs
> with_items: 기본 loop 지정. loop 내 변수는 {{ item }} 으로 접근 가능.

1
2
3
4
5
6
7
8
9
- name: give users access to multiple databases
  mysql_user:
    name: {{ item[0] }}
    priv: {{ item[1] }}.*:ALL 
    append_privs: yes 
    password: foo
  with_nested:
    - [ 'alice''bob' ]
    - [ 'clientdb''employeedb''providerdb' ]
cs
> with_nested: 중첩 loop 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
- hosts: all
  tasks:
    # create some test users
    - user: name={{ item }} state=present groups=evens
      with_sequence: start=0 end=32 format=testuser%02x
 
    # create a series of directories with even numbers for some reason
    - file: dest=/var/stuff/{{ item }} state=directory
      with_sequence: start=4 end=16 stride=2
 
    # a simpler way to use the sequence plugin
    # create 4 groups
    - group: name=group{{ item }} state=present
      with_sequence: count=4
cs

> with_sequence: 숫자들의 list를 생성(ascending order)해서 loop를 돌릴 때 사용
stride: 증가 폭을 지정하는 step 옵션
format: 출력 형식

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : (주)리눅스데이타시스템 / 대표 : 정정모
서울본사 : 서울특별시 강남구 봉은사로 114길 40 홍선빌딩 2층 / tel : 02-6207-1160
대전지사 : 대전광역시 유성구 노은로174 도원프라자 5층 / tel : 042-331-1161

PC 버전으로 보기