Ошибка работы сервисов при повторной установке контейнеров

cinder keystone endpoints

После того, как сервис cinder (или другой) был переустановлен, появляется ошибка 

Invalid service catalog service: no volume service configured

Команда просмотра endpoints по типам сервиса - выдает следующую ошибку:

Copy
# os endpoint list --service cinderv2 Multiple service matches found for 'cinderv2', use an ID to be more specific.

Это говорит от том, что в таблице keystone.service содержится несколько записей для сервиса, который был переустановлен.

Посмотреть можно таким запросом:

Copy
MariaDB [keystone]> select distinct type,count(*) from service group by type; +---------------------+----------+ | type                | count(*) | +---------------------+----------+ | application-catalog |        4 | | cloudformation      |        4 | | compute             |        4 | | identity            |        1 | | image               |        4 | | metering            |        4 | | metric              |        4 | | network             |        4 | | object-store        |        4 | | orchestration       |        4 | | placement           |        4 | | volumev2            |        4 | | volumev3            |        1 | +---------------------+----------+ 13 rows in set (0.01 sec)

Решить  проблему можно последовательно удалив все лишние записи в этой таблице по их ID.

Например, таким образом:

Copy
delete from service where type="volumev3" and id="0bdf9b88d81443618b71f3b3a22a9980";

Если попытаться удалить сервис, уже привязанный к какой-то endpoint - база не позволит это сделать, т.к. уже определен внешний ключ

Copy
delete from service where type="volumev3" and id="4a5b20d8d5904dfabf4a5e704448f81b"; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`keystone`.`endpoint`, CONSTRAINT `endpoint_service_id_fkey` FOREIGN KEY (`service_id`) REFERENCES `service` (`id`))

Таким образом можно смело запускать удаление всех записей из таблицы keystone.service

Copy
delete from service where id not in (select service_id from endpoint);

После этих действий служба заработает.

17.06.2020