November 6th, 2013

404

Первое WTF openstack/neutron

Симптом:
Перестала выдаваться аренда.

Диагностика: запрос уходит в физическую сеть с compute-node (завёрнут в GRE), приходит на network-node (аналогично), доходит до интерфейса внутри namespace'а.
Его видит и игнорирует dnsmasq, сообщая, что нет лиза для такого мака.

Вспомогательный симптом: после удаления сетей содержимое /var/lib/neutron/dhcp не изменяется и не очищается.

Процесс /usr/bin/neutron-dhcp-agent запущен.

Добавление опций в конфиге не изменяют ситуацию.

Причина: опечатка в конфиге (пробел перед именем параметра в начале) - демон падал при старте. А то, что висело в памяти - обслуживало старые сети не хотело завершаться, потому что копия, которая их завершить должна была, не могла запуститься из-за кривого конфига.

Реальное описание проблемы - в /var/log/upstart/neutron-dhcp-agent:
Traceback (most recent call last):
  File "/usr/bin/neutron-dhcp-agent", line 10, in 
    sys.exit(main())
  File "/usr/lib/python2.7/dist-packages/neutron/agent/dhcp_agent.py", line 590, in main
    cfg.CONF(project='neutron')
  File "/usr/lib/python2.7/dist-packages/oslo/config/cfg.py", line 1632, in __call__
    else sys.argv[1:])
  File "/usr/lib/python2.7/dist-packages/oslo/config/cfg.py", line 2133, in _parse_cli_opts
    return self._parse_config_files()
  File "/usr/lib/python2.7/dist-packages/oslo/config/cfg.py", line 2148, in _parse_config_files
    return self._oparser.parse_args(self._args, namespace)
  File "/usr/lib/python2.7/dist-packages/oslo/config/cfg.py", line 1496, in parse_args
    return super(_CachedArgumentParser, self).parse_args(args, namespace)
  File "/usr/lib/python2.7/argparse.py", line 1688, in parse_args
    args, argv = self.parse_known_args(args, namespace)
  File "/usr/lib/python2.7/argparse.py", line 1720, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "/usr/lib/python2.7/argparse.py", line 1926, in _parse_known_args
    start_index = consume_optional(start_index)
  File "/usr/lib/python2.7/argparse.py", line 1866, in consume_optional
    take_action(action, args, option_string)
  File "/usr/lib/python2.7/argparse.py", line 1794, in take_action
    action(self, namespace, argument_values, option_string)
  File "/usr/lib/python2.7/dist-packages/oslo/config/cfg.py", line 1062, in __call__
    ConfigParser._parse_file(values, namespace)
  File "/usr/lib/python2.7/dist-packages/oslo/config/cfg.py", line 1252, in _parse_file
    raise ConfigFileParseError(pe.filename, str(pe))
oslo.config.cfg.ConfigFileParseError: Failed to parse /etc/neutron/dhcp_agent.ini: at /etc/neutron/dhcp_agent.ini:33, Unexpected continuation line: ' use_namespaces = True'


Не рекорд, конечно, но ~7 часов отладки (большая часть которых ушла на изучение того, как оно там внутри устроено) заняло. Особенно всё было осложнено тем, что service neutron-dhcp-agent restart ни на что такое не ругался и после операции бинарник был запущен (то есть предполагалось, что если сервис завершился и запустился, то всё хорошо, а он на самом деле даже не завершался).

Предыдущий "пробел года" у меня был в конфиге ietd'а в 2010 году: http://amarao-san.livejournal.com/1920480.html
404

куриная разница

Разницу в культуре понимаешь, положив кусок курицы на сковордку. Вы в курсе, что нормальная курица не создаёт лужиц непонятной жидкости при нагревании? (И это благотворно сказывается на стоимости комплекта для еды).

Сколько я искал в Питере - нешприцванной курятины не было вообще. А тут - в любом магазине, торгующим мясом.

А вот овощи, на удивление, хуже. В том смысле, что многое местное и, соответственно, фиг знает какой степени зрелости. Начиная от зелёных лимонов и заканчивая "типа помидоры" (и никаких черри). Вероятнее всего, они на самом деле лучше, просто менее презентабельные.