Як детерміновано та відтворювати присвоєння зростаючих номерів портів у Ansible?


12

Я новачок у Ansible, але мені доводиться підтримувати набір ігор, які відповідають послугам, які потрібно налаштувати в заданому середовищі. Їм потрібно призначити порт, сертифікати тощо. Це призводить до отримання багатьох файлів зі списками, по суті завжди однакових імен та присвоєнням їм.

У багатьох випадках я думаю, що я можу легко використовувати службове ім'я як змінну, але під час зіставлення IP-адрес, портів чи інших числових ідентифікаторів я ще не з'ясував спосіб детерміновано призначити їм різні числа способом, який відтворюється, і бажано залишається те саме, навіть коли нові сервіси додаються. Я розглядав можливість використання бази даних SQLite для зберігання служб і генерування значень з їх ідентифікаторів, але я не знаю, як інтегрувати це з Ansible.

Я припускаю, що присвоєння збільшення кількості портів не є чимось абсолютно новим; це щодня багато системних адміністраторів, тому для цього має бути якийсь спосіб.

Редагувати : ми безпосередньо додаємо номери портів тощо group_vars/all.ymlтощо:

ports:
    service1:1024
    service2:1025
    service3:1026

Інвентар генерується автоматично, оскільки ми створюємо додаткові в'язниці (BSD) і залежать від ролей, які будуть виконуватися.


2
Оскільки вам, мабуть, доведеться додати послугу до інвентаря, що зупиняє вас додавати туди певний номер порту вручну? Або якщо ваш інвентар автоматично генерується, ви, ймовірно, повинні вирішити проблему на рівні генерації інвентаря
SztupY

Будь ласка, включіть фрагменти відповіді? Не зрозуміло, чи використовуєте ви group_varsчи додаєте змінні прямо у файли інвентаря. Також незрозуміло, як створюється ваш інвентар.
Лісовий мисливець

Чи обдумали ви використовувати інструмент виявлення сервісу, як-от консул HashiCorp?
CTO Foghorn

Відповіді:


5

Відмова: Я не використовую Ansible.

Що я б робив - це використовувати випадкове "передбачуване" число. Відповідно до Ansible doc, ви можете насіти генератор випадкових чисел:

Відповідно до версії 2.3 відповіді, також можна ініціалізувати генератор випадкових чисел із насіння. Таким чином, ви можете створити випадкові, але ідентифікуючі числа:

"{{59 | random (seed = inven_hostname)}} * * * * root / script / from / cron"

Тож у вашому випадку для номера порту (я вважаю, що він не має права) я б перейшов до змінної з чимось на зразок:

port="{{ 32767 |random(start=1024,seed=service_name) }}"

Макс на 32767, щоб уникнути зіткнення з будь-яким портом, ініційованим клієнтом (див. Причину Ephemeral port ).


Це гарна ідея, яку я вважав, але зростаюча частина робить її неможливою. Маючи певні послуги, які логічно пов'язані з певним діапазоном портів, мабуть, дуже бажано.
середина
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.