Abstract: Реальная история из жизни реальных администраторов по отлову идиотского бага.
Поучительная часть: Никогда недооценивай зависимости зависимостей.
Вступление
Рядовой апгрейд в лаборатории с Openstack Mitaka до Openstack Newton (более новая версия). Несколько deprecated options, keystone переехал с eventlet на WSGI и поломал существующую конфигурацию с haproxy; из-за типового «ipv6 listen» apache не стал конфликтовать с haproxy за одинаковые используемые порты на звезде (один слушал ipv6, другой ipv4 only), так что запросы уходили в haproxy вместо апача, где умирали с 503, т.к. апстрима не было… Впрочем, история не об этом.
После того, как основные проблемы были пофишкены, Nova (одна из компонент Openstack) при запуске начала падать с ошибкой: ConfigFileValueError: Value for option url is not valid: invalid URI: 'http://neutron-server.example.com:21345'.
. Это было очень странно. С учётом, что в конфиге поменялось 100500 опций, возникло подозрение, что мы используем устаревшую опцию (которую больше не надо использовать). Однако, документация говорила — url = http://controller:9696
.
Отладка
Очевидные шаги отладки:
- Закомментировать опцию — не падает
- Повторить опцию из примера — не падает
- Заменить в опции порт на «наш» — возможно, нельзя использовать слишком большой номер порта — не падает
- Заменить в опции url на наш — падает
- Вернуть «controller» на место — не падает
- Подозрение: не умеет fqdn: заменить controller на controller.dns — не падает
- Подозрение: слишком много точек (у нас в реальном коде было 8 точек в url) — controller.dns1.dns2.dns3.dns4 — не падает
- Оставить из нашего имени только первую часть:
http://neutron-server:9696
— падает! гипотеза уже понятна. - Проверка1:
http://neutronserver:9696
— не падает - Проверка2:
http://with-dashes:9696
— падает!