如何动态更改自动缩放实例名称

时间:2016-10-13 09:16:44

标签: openstack autoscaling openstack-heat

我创建了一个热量堆栈,根据CPU的使用情况进行自动调整。每次创建新实例时,都会为其指定一个随机名称。

有没有办法设置一个特定的名称,并在其末尾添加一个计数器,这样每次创建一个新实例时它会增加1?

E.g。 Myinstance1,Myinstance2,Myinstance3 ... MyinstanceX

提前致谢!

4 个答案:

答案 0 :(得分:0)

如果我理解正确,并且你是面向对象编程:

您正在寻找名为Factory的设计模式,或者更简单地说,创建一个static成员,该成员将在constructor中增加,并将添加到名称{{1已创建的member

答案 1 :(得分:0)

在Openstack HEAT中,堆栈资源名称使用stack_name进行操作,并以short_id为后缀。这就是为什么在每个自动调整的实例上都可以看到实例名称。这是在整个HEAT项目中执行的方式,并且无法定义以增量编号为后缀的实例名称。

答案 2 :(得分:0)

您可以转到Auto Scaling组和标签选项卡,然后使用" Name"的键添加标签来设置自定义名称。以及" MyInstance"的价值。由于您的实例将不断启动和终止,因此编号没有多大意义。

答案 3 :(得分:0)

于21/09/2020更新:

到目前为止,似乎不可能创建一个增量数字,但是我找到了一种解决方法来实现自己的目标,因此请在此处发布,希望可以为您提供一些想法。

心态:
我尝试找到随实例动态创建的东西(即数字),用于扩展,对我来说是OS::Neutron::Port,因此我将IP地址的一部分附加在字符串后,以为每个实例获取一个独特的名称

解决方案:
1.创建端口OS::Neutron::Port
2.使用get_attr获取IP地址。
3.使用str_split将点分隔为点。
4.使用str_replace将地址的一部分附加到字符串上。

示例代码:

lb_server.yaml

resources:
  corey_port:
    type: OS::Neutron::Port
    properties:
      network: { get_param: network }
      fixed_ips:
        - subnet: { get_param: subnet }

  number:
    type: OS::Heat::Value
    properties:
      value:
        # 192.168.xxx.yyy => [192,168,xxx,yyy]
        str_split: ['.', { get_attr: [corey_port, fixed_ips, 0, ip_address] }]

  server:
    type: OS::Nova::Server
    properties:
      name:
        str_replace:
          template: Corey-%last%
          params:
            #  0   1   2   3
            #[192,168,xxx,yyy]
            "last%": { get_attr: [number, value, 3] } 
      flavor: { get_param: flavor }
......

结果应为Corey-168,Corey-50,Corey-254等