Skip to main content

Ansible. Loop

Ansible Ansible

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСмС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ansible. Π’ простом случаС, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ user, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Boris:

ΠŸΠ»Π΅ΠΉΠ±ΡƒΠΊ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСмС​

- name: create users
hosts: localhost
tasks:
- user: name=Boris state=present

Если Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список loop, ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ всС ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² этом спискС:

ΠŸΠ»Π΅ΠΉΠ±ΡƒΠΊ для создания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² систСмС​

- name: create users
hosts: localhost
tasks:
- user: name='{{ item }}' state=present
loop:
- Boris
- David
- Gordon
- Tony

Если Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько свойств для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ dictionary. Π’ этом случаС, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя свойства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ item.name ΠΈ item.uid:

ΠŸΠ»Π΅ΠΉΠ±ΡƒΠΊ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с нСсколькими свойствами​

- name: create users
hosts: localhost
tasks:
- user: name='{{ item.name }}' state=present uid='{{ item.uid }}'
loop:
- { name: Boris, uid: 1010 }
- { name: David, uid: 1011 }
- { name: Gordon, uid: 1012 }
- { name: Tony, uid: 1013 }

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ синтаксис для создания списка словарСй:

ΠŸΠ»Π΅ΠΉΠ±ΡƒΠΊ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с нСсколькими свойствами (сокращСнный синтаксис)​

- name: create users
hosts: localhost
tasks:
- user: name='{{ item.name }}' state=present uid='{{ item.uid }}'
loop:
- { name: Boris, uid: 1010 }
- { name: David, uid: 1011 }
- { name: Gordon, uid: 1012 }
- { name: Tony, uid: 1013 }

Ansible Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт нСсколько встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ with_items для выполнСния задания со списком, ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ with_file для выполнСния задания с Ρ„Π°ΠΉΠ»ΠΎΠΌ:

ΠŸΠ»Π΅ΠΉΠ±ΡƒΠΊ для выполнСния задания со списком​

- name: Install packages with items
hosts: localhost
tasks:
- yum:
name: "{{ item }}"
state: present
with_items:
- httpd
- libaio
- make

ΠŸΠ»Π΅ΠΉΠ±ΡƒΠΊ для выполнСния задания с файлом​

- name: Copy file to hosts
hosts: all
tasks:
- copy:
src: "{{ item }}"
dest: "/tmp/"
with_file:
- "/etc/hosts"
- "/etc/resolv.conf"
note

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому, Ansible Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ with_mongodb, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для выполнСния Π·Π°Π΄Π°Π½ΠΈΠΉ с MongoDB.