Я пишу некоторые сценарии установки / документацию, и я хочу динамически установить IP-адрес прослушивания для службы, учитывая, что я знаю, что конкретный сетевой интерфейс будет в конкретной сети. В моей сети есть несколько сервисов, которые я хотел бы настроить таким образом, поэтому я надеюсь, что это немного упростит мою работу.
Я знаю, что это можно сделать, анализируя заклинания ifconfig
, ip
и т.д., но мне интересно, является ли это каноническим решением.
Из того, что я видел, самый простой способ постоянно получать эту информацию из различных ОС - это использовать фасад.
$ facter | grep ipaddress
ipaddress => 192.168.0.2
ipaddress_eth0 => 192.168.0.2
ipaddress_eth1 => 192.168.0.3
Смотрите также: Ссылка на встроенные факты марионеток.
Если вы хотите портативный, вам в значительной степени придется проанализировать вывод ifconfig. facter
и ip
например, не являются родными для Solaris и, вероятно, других операционных систем, подобных Uinix. Вывод ifconfig также зависит от платформы. Вам действительно нужно будет написать сценарий, который обнаруживает ОС и делает правильные вещи. Собрал несколько лайнеров для разных операционных систем Вот.
Я могу придумать одно каноническое решение, которое должно быть независимым от производителя и работать на многих платформах, включая Linux, * nix, Windows, прошивку маршрутизатора и многие другие системы.
Включите SNMP для всего, а затем возьмите список интерфейсов / IP-адресов через SNMP. Это относительно сложный способ получения информации, отсюда и удаление ip из ifconfig, ip, ipconfig и других инструментов.
Соответствующие разделы для прогулки включают
ifconfig - самый распространенный инструмент, с которым я сталкивался. Если вы уверены, что хотите работать только на уровне оболочки / ifconfig, просто напишите код оболочки для анализа вывода из «ifconfig en0» (вы упомянули, что знаете интерфейс). Проверьте статус: активен, а затем посмотрите в строке «inet», чтобы найти IP-адрес.
Кроме того, если у вас есть службы DNS в этих системах, вы можете просто разрешить вывод команды hostname.
Или даже добавьте дополнительную запись в ваш / etc / hosts (если у вас есть разрешение на основе файлов в миксе), например «selfAddress», и поместите туда IP-адрес коробки - одна вещь, которую нужно установить для каждой системы. Затем в вашем start / documentation / etc просто разрешите это статическое имя, и в каждой системе вы получите IP.