讀Heat Orchestration Template (HOT) specification

Heat Orchestration Template (HOT) specification
updated: 'Fri Sep 22 14:44:51 2017, commit 31175a5'

這片文章定義了HEAT模板的格式佳遂。HEAT是一個(gè)軟件,用于管理OpenStack的stack。這里的stack承疲,是將各種OpenStack的資源捆綁在一起筛谚,方便創(chuàng)建和刪除浸剩。如果希望對HEAT模板有個(gè)初步和形象的認(rèn)識年碘,可以讀這篇文章:http://www.reibang.com/writer#/notebooks/18275097/notes/19531272

1 HEAT模板格式

heat_template_version: 2016-10-14

description:
  # a description of the template

parameter_groups:
  # a declaration of input parameter groups and order

parameters:
  # declaration of input parameters

resources:
  # declaration of template resources

outputs:
  # declaration of output parameters

conditions:
  # declaration of conditions
1.1 heat_template_version
For example,
heat_template_version: 2013-05-23
heat_template_version: 2014-10-16
heat_template_version: 2015-04-30
heat_template_version: 2015-10-15
heat_template_version: 2016-04-08
heat_template_version: 2016-10-14 (or newton)
heat_template_version: 2017-02-24 (or ocata)
heat_template_version: 2017-09-01 (or pike)
1.2 description
For example,
description: Simple template to deploy a virtual machine.
1.3 parameter_groups (可省略)

通過把有共性的參數(shù)組合在一起嘶伟,增強(qiáng)邏輯性。

1.4 parameter (可省略)

在stack被創(chuàng)建之前写半,這些參數(shù)的值必須被提供岸蜗。參數(shù)的作用是,幫助模板變得靈活叠蝇,適應(yīng)不同的場合璃岳。

1.5 resources

被創(chuàng)建的各種資源,如虛擬機(jī)悔捶,網(wǎng)絡(luò)/子網(wǎng)铃慷,路由器,floating IP等蜕该,都定義在這里犁柜。

1.6 outputs (可省略)

Stack 創(chuàng)建完后,通過下面的命令顯示一些信息堂淡。好像沒太大用處馋缅。

$ heat output-list <stack-name>
$ heat output-show <stack-name>
1.7 conditions (Newton以后版本才支持)

我現(xiàn)在的試驗(yàn)環(huán)境,最新僅支持2016-04-8绢淀,暫時(shí)無法試驗(yàn)conditions相關(guān)的用法萤悴。

2 舉例

例2.1 一個(gè)虛擬機(jī)

在這個(gè)例子中,我們將練習(xí):

  • description 采用多行格式
  • network_name 作為命令行參數(shù)傳入
  • resources 中只有一個(gè)虛擬機(jī)
heat_template_version: 2016-04-08

description: >
   This template will deploy a single virtual machine, and
   this virtual machine will connect to an existing network.
   There are three networks can be selected.

parameters:
   network_name:
      type: string
      constraints:
         - allowed_values:
            - extnet-vxlan-0
            - extnet-vxlan-1
            - extnet-vxlan-2

resources:
   my_virtual_machine:
      type: OS::Nova::Server
      properties:
         image: cirros
         flavor: m1.small
         networks:
            - network: { get_param: network_name }

通過命令行皆的,啟動 stack:

$ heat stack-create -f example_2_1.yaml --parameters "network_name=extnet-vxlan-0" xxx
$ heat stack-list
+--------------------------------------+------------+-----------------+----------------------------+
| id                                   | stack_name | stack_status    | creation_time              |
+--------------------------------------+------------+-----------------+----------------------------+
| 221c247c-0fd4-4283-b0a6-16ff2894f044 | xxx        | CREATE_COMPLETE | 2017-11-13T08:02:13.088757 |
+--------------------------------------+------------+-----------------+----------------------------+
$ nova list
+--------------------------------------+-------------------------------------+--------+------------+-------------+-----------------------------+
| ID                                   | Name                                | Status | Task State | Power State | Networks                    |
+--------------------------------------+-------------------------------------+--------+------------+-------------+-----------------------------+
| db9135aa-8065-44dd-8b46-b825948f4a23 | xxx-my_virtual_machine-v27lqcztcq34 | ACTIVE | -          | Running     | extnet-vxlan-0=10.37.227.35 |
+--------------------------------------+-------------------------------------+--------+------------+-------------+-----------------------------+

Stack 也可以在 OpenStack 的 Dash-board 中被啟動覆履,這時(shí)候 network_name 這個(gè)參數(shù)被顯示在網(wǎng)頁中,很容易輸入祭务。

image.png
例2.2 兩個(gè)虛擬機(jī)+一個(gè)網(wǎng)絡(luò)

在這個(gè)例子中内狗,我們將練習(xí):parameter_groups 看它是如何工作的。

image.png
heat_template_version: 2016-04-08

description: ...

parameter_groups:
- label: network parameters
  parameters:
      - network_name
      - subnet_name
      - subnet_cidr

parameters:
   network_name:
      type: string

   subnet_name:
      type: string

   subnet_cidr:
      type: string

resources:
   simple_net:
      type: OS::Neutron::Net
      properties:
         name: { get_param: network_name }

   simple_subnet:
      type: OS::Neutron::Subnet
      properties:
         network_id: { get_resource: simple_net }
         name: { get_param: subnet_name }
         cidr: { get_param: subnet_cidr }

   VM1:
      type: OS::Nova::Server
      properties:
         name: VM1
         image: cirros
         flavor: m1.small
         networks:
            - network: { get_resource: simple_net }

   VM2:
      type: OS::Nova::Server
      properties:
         name: VM2
         image: cirros
         flavor: m1.small
         networks:
            - network: { get_resource: simple_net }
$ heat stack-create -f example_2_2.yaml --parameters "network_name=GREEN;subnet_name=10_10_10;subnet_cidr=10.10.10.0/24" xxx
$ heat stack-list
+--------------------------------------+------------+-----------------+----------------------------+
| id                                   | stack_name | stack_status    | creation_time              |
+--------------------------------------+------------+-----------------+----------------------------+
| 5bbac33f-fc54-4dbc-a622-cc27acb13b88 | xxx        | CREATE_COMPLETE | 2017-11-14T00:53:45.609428 |
+--------------------------------------+------------+-----------------+----------------------------+

$ neutron net-list --name GREEN
+-------------------------------+-------+-------------------------------+
| id                            | name  | subnets                       |
+-------------------------------+-------+-------------------------------+
| 6f356b52-f2ab-                | GREEN | e5903726-080f-4b3a-bc1f-      |
| 4c73-8221-cf0f7d827d8d        |       | 77c1235cef20 10.10.10.0/24    |
+-------------------------------+-------+-------------------------------+

$ nova list
+--------------------------------------+------+--------+------------+-------------+------------------+
| ID                                   | Name | Status | Task State | Power State | Networks         |
+--------------------------------------+------+--------+------------+-------------+------------------+
| 0c07eb32-efab-4582-a77c-ce4c9689f9ae | VM1  | ACTIVE | -          | Running     | GREEN=10.10.10.4 |
| 35c9d4b7-b4b8-4267-aba8-df8fe7e62c54 | VM2  | ACTIVE | -          | Running     | GREEN=10.10.10.3 |
+--------------------------------------+------+--------+------------+-------------+------------------+

$ heat stack-delete xxx

通過dash-board啟動stack义锥,也沒有看到 parameter_groups柳沙。

image.png

結(jié)論: parameter_groups 好像沒有什么用?

例2.3 虛擬機(jī)的metadata

這個(gè)例子拌倍,我們練習(xí)一下赂鲤,每個(gè)虛擬機(jī)的metadata是如何工作的。

語法:

resources:
  <resource ID>:
    type: <resource type>
    properties:
      <property name>: <property value>
       metadata:
         <resource specific metadata>
heat_template_version: 2016-04-08

description: Simple template to deploy a network with two VMs.

resources:
   simple_net:
      type: OS::Neutron::Net
      properties:
         name: GREEN

   simple_subnet:
      type: OS::Neutron::Subnet
      properties:
         network_id: { get_resource: simple_net }
         name: 10_10_10
         cidr: 10.10.10.0/24

   VM1:
      type: OS::Nova::Server
      properties:
         name: VM1
         image: cirros
         flavor: m1.small
         networks:
            - network: { get_resource: simple_net }
         metadata:
            param_1: value_1

   VM2:
      type: OS::Nova::Server
      properties:
         name: VM2
         image: cirros
         flavor: m1.small
         networks:
            - network: { get_resource: simple_net }
         metadata:
            param_1: value_2
$ heat stack-create -f example_2_3.yaml xxx
$ openstack server show VM1 | grep properties
| properties | param_1='value_1' 

$ openstack server set VM1 --property param_1=xxx
$ openstack server show VM1 | grep properties
| properties | param_1='xxx' 

在虛擬機(jī)中得到這個(gè)參數(shù):

$ curl http://169.254.169.254/openstack/latest/meta_data.json
image.png

參考文獻(xiàn)

1 Heat Orchestration Template (HOT) specification
2 Heat Orchestration Template (HOT) Guide
3 OpenStack document - Environments

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柱恤,一起剝皮案震驚了整個(gè)濱河市数初,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梗顺,老刑警劉巖泡孩,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寺谤,居然都是意外死亡仑鸥,警方通過查閱死者的電腦和手機(jī)吮播,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眼俊,“玉大人意狠,你說我怎么就攤上這事〈郑” “怎么了环戈?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澎灸。 經(jīng)常有香客問我院塞,道長,這世上最難降的妖魔是什么击孩? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任迫悠,我火速辦了婚禮鹏漆,結(jié)果婚禮上巩梢,老公的妹妹穿的比我還像新娘。我一直安慰自己艺玲,他們只是感情好括蝠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饭聚,像睡著了一般忌警。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秒梳,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天法绵,我揣著相機(jī)與錄音,去河邊找鬼酪碘。 笑死朋譬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兴垦。 我是一名探鬼主播徙赢,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼探越!你這毒婦竟也來了狡赐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钦幔,失蹤者是張志新(化名)和其女友劉穎枕屉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲤氢,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搀擂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年拐纱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哥倔。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秸架,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咆蒿,到底是詐尸還是另有隱情东抹,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布沃测,位于F島的核電站缭黔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蒂破。R本人自食惡果不足惜馏谨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望附迷。 院中可真熱鬧惧互,春花似錦、人聲如沸喇伯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稻据。三九已至艾猜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捻悯,已是汗流浹背匆赃。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留今缚,地道東北人算柳。 一個(gè)月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像荚斯,于是被迫代替她去往敵國和親埠居。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第一章 OpenStack基礎(chǔ) OpenStack管理的資源及提供的服務(wù)OpenStack做為一個(gè)操作系統(tǒng)事期,...
    sgt_tiger閱讀 12,942評論 4 72
  • Why Heat 關(guān)于Heat是什么東西滥壕,我已經(jīng)在前面的文章《在Keystoen v2的Mitaka上部署HEAT...
    魔哈Moha閱讀 4,121評論 4 5
  • OpenStack簡介 OpenStack版本發(fā)展 OpenStack版本系列字母以A~Z命名,從2010年發(fā)布的...
    糯米藕閱讀 5,040評論 0 17
  • 一兽泣、在控制節(jié)點(diǎn)上安裝和配置部署編排服務(wù)Heat 1. 為Heat創(chuàng)建數(shù)據(jù)庫(在控制節(jié)點(diǎn)) 提示:以下操作在控制節(jié)點(diǎn)...
    野狗子嗷嗷嗷閱讀 2,918評論 0 2
  • 孔子說:死生亦大矣绎橘。但人之生,不知何因;人之死称鳞,不知何時(shí)涮较。這兩個(gè)人生最大之事都是莫名其妙的,所以說冈止,人生狂票,本就是一...
    疏食遨游客閱讀 1,274評論 3 6