Назад | Перейти на главную страницу

Как мне найти имя изображения по идентификатору изображения в OpenStack?

Например. ami-00000073 используется в качестве идентификатора изображения. Как найти связанное с ним имя изображения?

Ваш вопрос немного неясен. Каждое изображение в OpenStack содержит:

  • целочисленный идентификатор (используется в качестве ключа базы данных, но обычно не отображается),
  • 36-символьный UUID, например 95e52709-0990-4f52-b192-2ba2c0fa6f7f
  • отображаемое имя

Поскольку ваш пример не является ни целым числом, ни UUID, он должен быть отображаемое имя. Если вы можете предоставить дополнительную информацию (например, «когда я запускаю эту команду, я вижу этот вывод; как мне преобразовать этот вывод в эту другую информацию, которая мне нужна», показывая оба вывода команд, которые вы вводите), мы можем предоставить лучший ответ.

Как правило, вы можете использовать либо nova image-* команды для взаимодействия с изображениями или glance команда. Чтобы просмотреть список доступных изображений, используйте nova:

nova image-list

Или используя glance:

glance index

Вы можете получить подробную информацию о конкретном изображении, используя nova image-show или glance show, что даст вам что-то вроде этого:

$ glance show f66ea2c4-21f2-4a5e-ad8f-9af6d5f8b9d1
URI: http://10.1.1.61:9292/v1/images/f66ea2c4-21f2-4a5e-ad8f-9af6d5f8b9d1
Id: f66ea2c4-21f2-4a5e-ad8f-9af6d5f8b9d1
Public: Yes
Protected: No
Name: CentOS 6 x86_64
Status: active
Size: 1073741824
Disk format: raw
Container format: bare
Minimum Ram Required (MB): 0
Minimum Disk Required (GB): 0
Owner: a1af2e48a97549b787959618998a52f7

То, о чем вы говорите, - это идентификатор AMI, который отличается от идентификатора изображения Glance, который является UUID стандартного формата в более новых версиях OpenStack.

AMI ID предоставляется для совместимости с cloud-init или другими инструментами при использовании уровня совместимости EC2. Доступ к нему осуществляется изнутри экземпляра путем запроса http://169.154.169.154/latest/meta-data/ami-id или извлечение ami-id собственность от metadata.json на диске конфигурации.

nova.api.ec2.ec2utils предоставляет метод под названием image_ec2_id:

def image_ec2_id(image_id, image_type='ami'):
    """Returns image ec2_id using id and three letter type."""
    template = image_type + '-%08x'
    try:
        return id_to_ec2_id(image_id, template=template)
    except ValueError:
        #TODO(wwolf): once we have ec2_id -> glance_id mapping
        # in place, this wont be necessary
        return "ami-00000000"

Итак, AMI ID - это просто шестнадцатеричная версия числового идентификатора изображения S3 (а не UUID) изображения Glance. Насколько мне известно, это значение не отображается через какие-либо инструменты командной строки или серверные API, и его нужно запрашивать напрямую через вашу базу данных. Эти числовые сопоставления хранятся в nova.s3_images:

mysql> SELECT s3_images.id, s3_images.uuid, images.name FROM nova.s3_images INNER JOIN glance.images ON s3_images.uuid = images.id WHERE images.id = 'd12a9b68-0194-4a88-b5dd-2de711dec05e';
+----+--------------------------------------+-------------------------+
| id | uuid                                 | name                    |
+----+--------------------------------------+-------------------------+
| 73 | d12a9b68-0194-4a88-b5dd-2de711dec05e | coreos-stable-v20150728 |
+----+--------------------------------------+-------------------------+
1 row in set (0.00 sec)