운영 Ansible - Loop 활용
페이지 정보
본문
동일한 작업을 여러 번 반복하는 경우 Ansible Loop 를 활용하여 작업을 수행할 수 있습니다. Ansible 에서 Loop를 활용하는 키워드는 loop, with_* 두가지가 있습니다.
> 간단한 문자열 목록이 반복되는 loop
> loop 내에서 하위 키를 참조하여 해쉬 목록을 반복할 수 있습니다.
> loop 출력을 변수로 등록할 수 있습니다.
>Jinja2 표현식을 사용하여 복잡한 목록을 반복 할 수 있습니다.
> loop_control 활용 : 복잡한 데이터 구조를 반복 할 때 작업의 콘솔 출력 표시 제한.
> with_items: 기본 loop 지정. loop 내 변수는 {{ item }} 으로 접근 가능.
> with_nested: 중첩 loop 사용
> with_sequence: 숫자들의 list를 생성(ascending order)해서 loop를 돌릴 때 사용
stride: 증가 폭을 지정하는 step 옵션
format: 출력 형식
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 |
1 2 3 4 5 6 | - name: Register loop output as a variable shell: "echo {{ item }}" loop: - "one" - "two" register: echo | cs |
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 |
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 |
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 |
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 |
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: 출력 형식
- 이전글Ansible - 작업 실행 위치 제어( Delegation/Local Action ) 21.02.26
- 다음글Ansible - tags 활용 21.01.28
댓글목록
등록된 댓글이 없습니다.