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

cinder keystone endpoints

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

Invalid service catalog service: no volume service configured

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

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

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

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

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.

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

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

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

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

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

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

17.06.2020