Heat 支持查询 Autoscaling Group 虚拟机列表

引言

OpenStack Mailing List 中有这么一份邮件,内容如下:

[Openstack] heat autoscaling group instance relationships
I‘m trying to figure out how to determine all instances that were created as part of a given autoscaling group. I want to take a given autoscalinggroup and list all of its instances. So far I can‘t figure out how to dothis. The instances themselves have a tag called "AutoScalingGroupName"( mystack-MyServerGroup-f3r72ifsj2jq for example ) but the value of thatdoesn‘t seem to map to anything. A resource-show on the autoscaling groupdoesn‘t seem to show any identifier that maps to the autoscaling groupname.
Any ideas on how I can do this? Thanks!
该邮件大体的意思是,如何通过 Heat API 获取 Autoscaling Group 里的虚拟机列表。

一.需求


以 Heat 推荐的 Autoscaling Group 的 HOT 模板为例子,采用该模板创建 Stack 后,查询该 Stack 包含的 resource 如下,可知 asg 即为 AutoScalingGroup resource。

查询 Nova 发现 Autoscaling Group 旗下有两台虚拟机。继续查询 asg 详情,并无任何和虚拟机相关的信息,而事实上,Autoscaling Group 作为一群虚拟机的集合,用户非常希望能获取 Autoscaling Group 下虚拟机的数量,虚拟机的m名称等等。如果 Heat 未提供该 API,那么用户只能通过 Nova API 查询相关的虚拟机,这对用户来说,无疑增加了操作的复杂程度。

二.关于 nested_stack


在讲解 nested_stack 之前,先问读者一个问题:请问刚刚一共创建了多少个 stack?

一个!明明只有一个嘛!它的名字就叫 fuck !......貌似言之有理,再查询数据库看看,奇葩出现了,咋跑出了四个 stack,而且四个 stack 的名字均以 fuck 开头,有着几分相似和某些规律。再看看 owner_id 和 id 的关系:
1. stack-list 查询到的 stack, 其 owner_id 均未 NULL。
2. nested_stack 的 owner_id 为父 stack 的 id。

这个四个 stack 的关系如下图所示




看,熟悉的虚拟机现身了。从上不难发现另外一条规律,nested_stack 的 id 和父 stack 的某个 resource id 完全一致。事实上,Heat 有以下资源支持 nested_stack:
OS::Heat::InstanceGroup
OS::Heat::ResourceGroup
OS::Heat::AutoScalingGroup
AWS::AutoScaling::AutoScalingGroup。
对于初步了解 heat 的同学来说,nested_stack 比较陌生晦涩,更多的资料请移步wiki:https://wiki.openstack.org/wiki/Heat/NestedStacks。


三. 解决方案


我们可以按照以上方法查询 Autoscaling Group 下得虚拟机信息,但是频繁的 CLI 查询操作繁琐、效率低下,用户体验极差。最好的方式是查询 Autoscaling Group 资源时,可返回其旗下的虚拟机列表。如下

核心代码为

完整的代码请见:
https://github.com/DeliangFan/heat/commit/63d35793c47784b4ff0e980a0148eaf96139c853
时间: 2024-10-06 19:04:12

Heat 支持查询 Autoscaling Group 虚拟机列表的相关文章

Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色. 其中借鉴xiaanming:http://blog.csdn.net/xiaanming/article/details/12684155 下面来看看项目运行后的效果图以及代码结构图: 下面通过代码来实现整个效果. 1.主界面布局activity_main.xml <span style="font-size:18px

启用VTX技术支持启动android的虚拟机 - 报错

第一次启用VTX技术支持启动android的虚拟机,启动时提示如下错误: Starting emulator for AVD 'AVD_for_Android_TV_1080p_by_Google'emulator: WARNING: Requested RAM size of 2048MB is too large for your environment, and is reduced to 1536MB.emulator: device fd:516HAX is working and e

[C++11笔记001]修改通用库中的XDynamicArray,使它可以支持C++11的初始化列表和for循环

今天,有空翻了一下<C++Primer plus(第六版)>,看到里面有介绍新的for循环和初始化列表,但是我实现的动态数组XDynamicArray不支持这些新特性,没办法,只好进行改造了. 首先是for循环,如下面的样式 for(auto e:stList) { cout<<e<<endl; } 是于就各种google,和查找C++11的array的源代码,总结:就是提供一个标准的iterator和begin,end这两个方法,就可以了. 是于定义了一个iterat

SQL查询语句 group by后, 字符串合并

原文:SQL查询语句 group by后, 字符串合并 合并列值 --******************************************************************************************* 表结构,数据如下: id value ----- ------ 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到结果: id values ------ ----------- 1 aa,bb 2 aaa,bbb,ccc 即:gr

MySQL对数据表进行分组查询(GROUP BY)

MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP] 属性名:是指按照该字段的值进行分组. HAVING 条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示. WITH ROLLUP:将会在所有记录的最后加上一条记录.加上的这一条记录是上面所有记录的总和. GROUP BY关键字可以和GROU

Arcgis GDB文件地理数据库、shapefile、coverage 和其他基于文件的数据源所支持的函数的完整列表

函数 以下是文件地理数据库.shapefile.coverage 和其他基于文件的数据源所支持的函数的完整列表.个人地理数据库和 ArcSDE 地理数据库也支持这些函数,但这些数据源可能使用不同的语法或函数名.除了以下这些函数外,个人地理数据库和 ArcSDE 地理数据库还支持一些其他功能.有关详细信息,请参阅 DBMS 文档. 日期函数 功能 描述 CURRENT_DATE 返回当前日期. EXTRACT(extract_fieldFROM extract_source) 返回 extract

列表补充,列表的组合、查询元素是否存在列表,查询元素出现在列表中几次

列表的比较,列表比较只比较第一个元素(下标为0的那个元素) >>> list1=[123] >>> list2=[234] >>> list3=[345] >>> list1>list2 False >>> list1<list2 True >>> 当列表中有多个元素的时候,还是仅仅只比较了第一个元素. >>> list1=[123] >>> list

单表查询: where group by 分组 having distinct 去重 order by 排序 limit 多表查询 子查询 连表查询

今日内容 表查询 单表查询: where group by 分组 having distinct 去重 order by 排序 limit 多表查询 子查询 连表查询 单表查询 前期表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', #大部分是男的 age int(3) u

读书笔记 C# Linq查询之group关键字浅析

在C#中,自从有了Linq查询表达式后,程序员对可被迭代的序列或列表执行一系列的筛选.排序.过滤.分组.查询等操作.本文章所要讲述的是group关键字. Linq查询表达式,是以from关键字开头,以select或group关键字结尾,它们之中可以插入where.orderby.join.let甚至附加的from子句. group子句返回的是一个IGrouping<TKey,TElement>对象序列,请注意,是对象序列,而不是单个对象.由于group查询产生的IGrouping<TKe