Heat openstack в примерах
Для дальнейшего удобства ставим алиас:
Далее везде в примерах вместо ‘openstack’ пишем ‘os’.
Пример 01. Создать простую ВМ
Смотрим, какие стеки есть в системе:
os heat list
+--------------------------------------+------------+----------------------------------+-----------------+----------------------+--------------+
| ID | Stack Name | Project | Stack Status | Creation Time | Updated Time |
+--------------------------------------+------------+----------------------------------+-----------------+----------------------+--------------+
| 6876a334-514b-48b8-b524-bec41ba72ad7 | exanple | a18041366a4248039a746220c43f479e | CREATE_COMPLETE | 2020-02-21T10:32:18Z | None |
| ce99e8b0-52fa-4ff0-8f4c-cb5790a7f75b | s11 | ef81be5a4bec40ec85e6d7220583a3e6 | CHECK_COMPLETE | 2019-10-29T12:14:45Z | None |
+--------------------------------------+------------+----------------------------------+-----------------+----------------------+--------------+
Переключим проект:
Находим идентификатор сети provider и записываем его в переменную NET_ID
Посмотрим, какие версии шаблонов поддерживаются в нашей системе:
openstack orchestration template version list
+--------------------------------------+------+------------------------------+
| Version | Type | Aliases |
+--------------------------------------+------+------------------------------+
| AWSTemplateFormatVersion.2010-09-09 | cfn | |
| HeatTemplateFormatVersion.2012-12-12 | cfn | |
| heat_template_version.2013-05-23 | hot | |
| heat_template_version.2014-10-16 | hot | |
| heat_template_version.2015-04-30 | hot | |
| heat_template_version.2015-10-15 | hot | |
| heat_template_version.2016-04-08 | hot | |
| heat_template_version.2016-10-14 | hot | heat_template_version.newton |
| heat_template_version.2017-02-24 | hot | heat_template_version.ocata |
| heat_template_version.2017-09-01 | hot | heat_template_version.pike |
+--------------------------------------+------+------------------------------+
Создаем шаблон демо-стека 01_vm-add.ymll:
heat_template_version: 2017-09-01
description: Launch a basic instance with CirrOS image using the
``m1.tiny`` flavor, ``mykey`` key, and one network.
parameters:
NetID:
type: string
description: Network ID to use for the instance.
resources:
server:
type: OS::Nova::Server
properties:
image: cirros-rebs
flavor: m1.nano
key_name: omega
networks:
- network: { get_param: NetID }
outputs:
instance_name:
description: Name of the instance.
value: { get_attr: [ server, name ] }
instance_ip:
description: IP address of the instance.
value: { get_attr: [ server, first_address ] }
В первой строке ставим свежую подходящую версию.
Создаем стек:
+---------------------+----------------------------------------------------------------------------------------------------------+
| Field | Value |
+---------------------+----------------------------------------------------------------------------------------------------------+
| id | 8e82a9f6-56a9-4066-8897-053011706817 |
| stack_name | demo1 |
| description | Launch a basic instance with CirrOS image using the ``m1.tiny`` flavor, ``mykey`` key, and one network. |
| creation_time | 2021-02-02T12:50:58Z |
| updated_time | None |
| stack_status | CREATE_IN_PROGRESS |
| stack_status_reason | Stack CREATE started |
+---------------------+----------------------------------------------------------------------------------------------------------+
Смотрим параметры созданного стека:
+-----------------------+----------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-----------------------+----------------------------------------------------------------------------------------------------------------------+
| id | 8e82a9f6-56a9-4066-8897-053011706817 |
| stack_name | demo1 |
| description | Launch a basic instance with CirrOS image |
| creation_time | 2021-02-02T12:50:58Z |
| updated_time | None |
| stack_status | CREATE_COMPLETE |
| stack_status_reason | Stack CREATE completed successfully |
| parameters | NetID: d68873fd-42c1-4688-a209-aa876f73d1b2 |
| | OS::project_id: e26e6a43abaa454aaec4c02e58372910 |
| | OS::stack_id: 8e82a9f6-56a9-4066-8897-053011706817 |
| | OS::stack_name: demo1 |
| | |
| outputs | - description: Name of the instance. |
| | output_key: instance_name |
| | output_value: demo1-server-icfjuqyy2kqg |
| | - description: IP address of the instance. |
| | output_key: instance_ip |
| | output_value: 10.0.4.208 |
| | |
| links | - href: http://10.0.4.190:8004/v1/e26e6a43abaa454aaec4c02e58372910/stacks/demo1/8e82a9f6-56a9-4066-8897-053011706817 |
| | rel: self |
| | |
| parent | None |
| disable_rollback | True |
| deletion_time | None |
| stack_user_project_id | fc7d90baf9b54efeafd0b1f827b82300 |
| capabilities | [] |
| notification_topics | [] |
| stack_owner | None |
| timeout_mins | None |
| tags | None |
+-----------------------+----------------------------------------------------------------------------------------------------------------------+
Удаляем стек
Пример 2. Создать проект
Переключаем авторизацию на админскую
Смотрим параметры ресурса OS::Keystone::Project здесь https://documentation.suse.com/external-tree/en-us/soc/9/openstack/admin/html/heat/template_guide/openstack.html#OS::Keystone::Project
Создаем файл YAML-шаблона 02_proj-add.yml
heat_template_version: 2017-09-01
description: New project create
parameters:
ProjName:
type: string
description: Project name
resources:
project:
type: OS::Keystone::Project
properties:
description: REU im.Plekhanov Labaratory
enabled: true
name: { get_param: ProjName }
Запускаем создание стека:
Пошло создание стека:
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| id | 3539aca2-42c9-4d40-b443-680b9d07c851 |
| stack_name | reu |
| description | New project create |
| creation_time | 2021-02-02T14:02:51Z |
| updated_time | None |
| stack_status | CREATE_IN_PROGRESS |
| stack_status_reason | Stack CREATE started |
+---------------------+--------------------------------------+
Проверим, что проект создан:
Пример 3. Добавить пользователя в проект
Для начала посмотрим параметры стека:
openstack stack environment show 3539aca2-42c9-4d40-b443-680b9d07c851
parameters:
ProjName: reu
resource_registry:
resources: {}
parameter_defaults: {}
Здесь мы видим, что кроме имени проекта (reu) ничего нет.
На сей раз мы не будем создавать новый стек, а модифицируем имеющийся, добавив в него пользователя в правами администратора.
Делам новый template 03_usr-add-proj.yml
heat_template_version: 2017-09-01
description: Assign user roles to project
parameters:
UserName:
type: string
description: Username
ProjName:
type: string
description: Project Name
resources:
project:
type: OS::Keystone::UserRoleAssignment
properties:
user: { get_param: UserName }
#roles: [{"project": reu, "domain": omega, "role": admin}]
#roles: [{"project": 085c69cc2d8741d7822e4eb0e899c5eb, "domain": dd168ad9098c42628fd65ff387d384b9, "role": admin}]
roles: [ { "project": {get_param: ProjName}, "role": admin } ]
outputs:
project_name:
description: Name of the project
value: { get_attr: [ project ] }
Здесь надо обратить внимание, что мы передадим имя пользователя в командной строке через функцию get_param.
Еще важный момент - нельзя одновременно задавать и project, и domain - некорректные строки закомментированы.
openstack stack update -t 03_usr-add-proj.yml --parameter="UserName=sani" --parameter="ProjName=reu" reu2
Пример 4. Создать сеть и роутер.
Источники по теме
-
Как запустить сценарий heat: https://docs.openstack.org/heat/pike/install/launch-instance.html
-
Документация heat: https://docs.openstack.org/heat/pike/
- Список функций pike heat: https://docs.openstack.org/heat/pike/template_guide/hot_spec.html#pike
- Template guide: https://documentation.suse.com/external-tree/en-us/soc/9/openstack/admin/html/heat/template_guide/
02.02.2021