Версия - openstack-glance-19.0.0-alt1 Шаги воспроизведения 1. Установить пакеты: # apt-get install -y openstack-glance mariadb-common mariadb-server memcached openstack-keystone python3-module-openstackclient apache2-cgi-bin 2. Запустить сервисы: # systemctl enable --now memcached mysqld.service && sleep 5; systemctl status memcached mysqld.service --no-pager -l 3. Настроить Keystone (от root): echo "CREATE DATABASE keystone;" | mysql -u root echo "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '1';" | mysql -u root echo "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '1';" | mysql -u root awk '/^\[database\]/{p=1} p && /^$/ && !a {print "connection = mysql+pymysql://keystone:1@127.0.0.1/keystone"; a=1} 1' /etc/keystone/keystone.conf > /etc/keystone/keystone.conf.tmp && \mv /etc/keystone/keystone.conf.tmp /etc/keystone/keystone.conf awk '/^\[cache\]/{p=1} p && /^$/ && !a {print "enabled = true\nbackend = dogpile.cache.memcached"; a=1} 1' /etc/keystone/keystone.conf > /etc/keystone/keystone.conf.tmp && \mv /etc/keystone/keystone.conf.tmp /etc/keystone/keystone.conf cat > /etc/my.cnf.d/openstack.cnf <<'EOF' [mysqld] bind-address = 127.0.0.1 default-storage-engine = innodb innodb_file_per_table max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8 EOF sed -i "/skip-networking/d" /etc/my.cnf.d/server.cnf systemctl restart mariadb keystone-manage db_sync keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone keystone-manage bootstrap --bootstrap-password 1 --bootstrap-admin-url http://$(hostname -i):5000/v3/ --bootstrap-internal-url http://$(hostname -i):5000/v3/ --bootstrap-public-url http://$(hostname -i):5000/v3/ --bootstrap-region-id RegionOne chown -R keystone:keystone /etc/keystone systemctl enable --now httpd2.service cat > auth_data <<'EOF' export OS_AUTH_URL=http://127.0.0.1:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_USERNAME=admin export OS_PASSWORD=1 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_REGION_NAME=RegionOne EOF 4. Настроить Glance (от root): . auth_data openstack endpoint create --region RegionOne identity public http://127.0.0.1:5000/v3 openstack endpoint create --region RegionOne identity internal http://127.0.0.1:5000/v3 openstack endpoint create --region RegionOne identity admin http://127.0.0.1:35357/v3 openstack project create --domain default --description TEST service openstack role create user echo "CREATE DATABASE glance;" | mysql -u root echo "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'127.0.0.1' IDENTIFIED BY '1';" | mysql -u root echo "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '1';" | mysql -u root cat > /etc/glance/glance-api.conf <<EOF [DEFAULT] [database] connection = mysql+pymysql://glance:1@127.0.0.1/glance [glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/ [image_format] [keystone_authtoken] auth_uri = http://127.0.0.1:5000 auth_url = http://127.0.0.1:35357 memcached_servers = 127.0.0.1:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = 1 [paste_deploy] flavor = keystone EOF cat > /etc/glance/glance-registry.conf <<EOF [DEFAULT] [database] connection = mysql+pymysql://glance:1@127.0.0.1/glance [keystone_authtoken] auth_uri = http://127.0.0.1:5000 auth_url = http://127.0.0.1:35357 memcached_servers = 127.0.0.1:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = 1 [paste_deploy] flavor = keystone [profiler] EOF cat > admin_openrc << EOF export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=1 export OS_AUTH_URL=http://127.0.0.1:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 EOF . admin_openrc openstack user create --domain default --password 1 glance openstack role add --project service --user glance admin openstack service create --name glance --description TEST image openstack endpoint create --region RegionOne image public http://127.0.0.1:9292 openstack endpoint create --region RegionOne image internal http://127.0.0.1:9292 openstack endpoint create --region RegionOne image admin http://127.0.0.1:9292 5. Выполнить Sync: # glance-manage db_sync 6. Запустить openstack-glance-api: # systemctl start openstack-glance-api # systemctl status openstack-glance-api Ожидаемый результат: в логах сервиса нет ошибки oslo_config.cfg.ConfigDirNotFoundError: Failed to read config file directory: /etc/glance/glance-api.conf.d/ Фактический результат: в логах сервиса есть ошибка дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: Traceback (most recent call last): дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/bin/glance-manage", line 10, in <module> дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: sys.exit(main()) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib/python3/site-packages/glance/cmd/manage.py", line 555, in main дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: config.parse_args(default_config_files=cfg_files) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib/python3/site-packages/glance/common/config.py", line 706, in parse_args дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: CONF(args=args, дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib/python3/site-packages/oslo_config/cfg.py", line 2153, in __call__ дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: self._namespace = self._parse_cli_opts(args if args is not None дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib/python3/site-packages/oslo_config/cfg.py", line 2924, in _parse_cli_opts дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: return self._parse_config_files() дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib/python3/site-packages/oslo_config/cfg.py", line 2960, in _parse_config_files дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: self._oparser.parse_args(self._args, namespace) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib/python3/site-packages/oslo_config/cfg.py", line 1936, in parse_args дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: return super(_CachedArgumentParser, self).parse_args(args, namespace) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib64/python3.9/argparse.py", line 1825, in parse_args дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: args, argv = self.parse_known_args(args, namespace) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib64/python3.9/argparse.py", line 1858, in parse_known_args дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: namespace, args = self._parse_known_args(args, namespace) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib64/python3.9/argparse.py", line 2067, in _parse_known_args дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: start_index = consume_optional(start_index) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib64/python3.9/argparse.py", line 2007, in consume_optional дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: take_action(action, args, option_string) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib64/python3.9/argparse.py", line 1935, in take_action дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: action(self, namespace, argument_values, option_string) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: File "/usr/lib/python3/site-packages/oslo_config/cfg.py", line 1423, in __call__ дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: raise ConfigDirNotFoundError(values) дек 28 09:28:22 server-10-1-x86-64-20231227.localdomain glance-manage[12070]: oslo_config.cfg.ConfigDirNotFoundError: Failed to read config file directory: /etc/glance/glance-api.conf.d/ Решение: создать папку # mkdir -p /etc/glance/glance-api.conf.d