πŸ“œ Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСскиС ΠΈ динамичСскиС Ρ„Π°ΠΉΠ»Ρ‹ inventory Π² Ansible – Ρ‡Π°ΡΡ‚ΡŒ 4

by itisgood

Π’ этой части 4 части статСй ΠΏΠΎ Ansible ΠΌΡ‹ объясним, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский ΠΈ динамичСский Ρ„Π°ΠΉΠ» inventory ( Π΄Π°Π»Π΅Π΅ ΠΈΠ½Π²Π΅Π½Ρ‚ΠΎΡ€ΠΈ ) для опрСдСлСния Π³Ρ€ΡƒΠΏΠΏ хостов Π² Ansible.

Π’ Ansible управляСмыС хосты ΠΈΠ»ΠΈ сСрвСры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ Ansible, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ, ΠΊΠ°ΠΊ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π€Π°ΠΉΠ» ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ – это тСкстовый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· ΠΈΠΌΠ΅Π½ хостов ΠΈΠ»ΠΈ IP-адрСсов управляСмых хостов ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… сСрвСров.

УправляСмыС хосты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСчислСны ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ записи ΠΈΠ»ΠΈ классифицированы ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

Π’ Ansible Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ: статичСский ΠΈ динамичСский.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ Π² дСйствии.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ установили Ansible Π½Π° своСм ΡƒΠ·Π»Π΅ управлСния ΠΈ настроили SSH-соСдинСниС Π±Π΅Π· пароля с управляСмыми хостами.

БтатичСский Ρ„Π°ΠΉΠ» invetory для Ansible

Π’ Ansible статичСской Ρ„Π°ΠΉΠ» ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ – это простой тСкстовый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит список управляСмых хостов, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ хостов с использованиСм ΠΈΠΌΠ΅Π½ хостов ΠΈΠ»ΠΈ IP-адрСсов.

Имя Π³Ρ€ΡƒΠΏΠΏΡ‹ хостов Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ [group name]

Записи управляСмого хоста ΠΏΠΎΠ·ΠΆΠ΅ пСрСчислСны ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹, каТдая Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС.

Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, хосты пСрСчислСны с использованиСм ΠΈΠΌΠ΅Π½ хостов ΠΈΠ»ΠΈ IP-адрСсов.

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address
Π’ цСлях ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ создадим статичСский Ρ„Π°ΠΉΠ» ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ.
# mkdir test_lab && cd test_lab
# vim hosts
Π‘Π°ΠΌ Ρ„Π°ΠΉΠ»
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΈ Π²Ρ‹ΠΉΠ΄ΠΈΡ‚Π΅.

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ создали 2 Π³Ρ€ΡƒΠΏΠΏΡ‹ хостов: webservers ΠΈ Π±Π°Π·Ρ‹ database_servers. К

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ создали Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ datacenter, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Ρ€ΡƒΠΏΠΏΡƒ Π³Ρ€ΡƒΠΏΠΏ хостов, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ суффиксом Β«: childrenΒ», ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅.

Ansible Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡ‹ хостов ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ½Π²Π΅Π½Ρ‚Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ webservers ΠΈ database_servers Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² datacenter.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ управляСмыС хосты Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ хостов. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° хостов ΠΈΠ»ΠΈ IP-адрСса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

173.82.202.239
172.82.115.165
load_balancer.pnl.com

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ Ansible с ссылкой Π½Π° Ρ„Π°ΠΉΠ» ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ хостов.

Основной синтаксис для управлСния Ρ„Π°ΠΉΠ»ΠΎΠΌ inventory ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:

$ ansible {host-pattern} -i /path/of/inventory/file --list-hosts

НапримСр:

$ ansible all -i /root/test_labs/hosts --list-hosts

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подстановочный Π·Π½Π°ΠΊ * для Π·Π°ΠΌΠ΅Π½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Β«allΒ».

$ ansible * -i /root/test_labs/hosts --list-hosts
Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти список хостов Π² Π³Ρ€ΡƒΠΏΠΏΠ΅, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π³Ρ€ΡƒΠΏΠΏΡƒ хостов вмСсто host-pattern
$ ansible webservers -i /root/test_labs/hosts --list-hosts

ДинамичСский Ρ„Π°ΠΉΠ» invetory для Ansible

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, особСнно Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ AWS, Π³Π΄Π΅ Ρ„Π°ΠΉΠ» ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ постоянно мСняСтся ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΈΠ· эксплуатации сСрвСров, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»Π°Π΄ΠΎΠΊ ΠΎ хостах, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ, становится Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ хоста ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ список хостов с ΠΈΡ… IP-адрСсами становится Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

И Ρ‚ΡƒΡ‚ вступаСт Π² ΠΈΠ³Ρ€Ρƒ динамичСский ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ динамичСский Ρ„Π°ΠΉΠ» ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ?

ДинамичСский Ρ„Π°ΠΉΠ» ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ – это скрипт ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, написанный Π½Π° Python, PHP ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС программирования.

Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π² ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… срСдах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ AWS, Π³Π΄Π΅ IP-адрСса ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ послС остановки ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ запуска Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвСра.

Ansible ΡƒΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» скрипты ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ для общСдоступных ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Google Compute Engine, Amazon EC2, OpenStack, RackSpace, cobbler ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….

ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства динамичСского Ρ„Π°ΠΉΠ»Π° хостов ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со статичСским?

  • ДинамичСский Ρ„Π°ΠΉΠ» inventory ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ чСловСчСских ошибок, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ информация собираСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скриптов
  • Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΌΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ усилия для управлСния хостами.
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный динамичСский Ρ„Π°ΠΉΠ» inventory Π½Π° языкС программирования ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‹Π±ΠΎΡ€Ρƒ.
Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² JSON, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ИспользованиС  динамичСского скрипта inventory

Π‘ΠΊΡ€ΠΈΠΏΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания динамичСского ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ исполняСмым, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ansible ΠΌΠΎΠ³ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ хостах Π²Π½ΡƒΡ‚Ρ€ΠΈ скрипт динамичСской ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, просто запуститС:

# ./script --list
Как ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Π²Ρ‹Π²ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
  • Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°, состоящий ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏ (Ρ‚.Π΅. webservers, database_Servers)
  • Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° со значСниями
ΠœΠ΅Ρ‚Π° дирСктория
  • Π₯осты hostvars
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ продСмонстрировали, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ статичСский ΠΈ динамичСский Ρ„Π°ΠΉΠ» inventory для Ansible.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, статичСский Ρ„Π°ΠΉΠ» inventory – это простой тСкстовый Ρ„Π°ΠΉΠ», содСрТащий список управляСмых хостов ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ², Ρ‡ΡŒΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈ IP-адрСса ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ постоянными.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, динамичСский Ρ„Π°ΠΉΠ» inventory постоянно мСняСтся ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ добавлСния Π½ΠΎΠ²Ρ‹Ρ… хостов ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ· эксплуатации старых.

IP-адрСса хостов Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ динамичСскими ΠΏΡ€ΠΈ остановкС ΠΈ запускС Π½ΠΎΠ²Ρ‹Ρ… хост-систСм.

ΠœΡ‹ надССмся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ нашли этот ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ.

 

You may also like

Leave a Comment