Openstack Heat - 单独的模板

问题描述 投票:0回答:3

我正在寻找通过多个单独步骤创建堆栈的最佳方法。

我想在第一个模板中,仅启动计算节点和网络配置。

在第二个模板中,我想创建存储节点并将它们附加到现有的计算节点。

您认为最好的方法是什么?

openstack openstack-heat openstack-cinder
3个回答
1
投票

以下是一种可能的方法。

1) 为您的计算节点和网络配置定义第一个模板。但在第一个模板中定义输出以公开您的计算节点 ID。例如,如果您创建名为 mynode1 的 OS::Nova::Server,则可以将其 ID 公开为该模板的输出,如下所示:

outputs:
  mynode1_id:
    description: ID of mynode1
    value: {getattr: [mynode1, id]}

使用第一个模板实例化热堆栈(例如 mystack1)后,您可以按如下方式访问 mynode1 的 ID:

heat output-show mystack1 mynode1_id

2) 使用步骤 1 中的计算节点 ID 作为输入参数,创建第二个存储模板。例如:

parameters:
  mynode1_id:
    type: string
    description: ID for mynode1

然后您可以在“资源:”部分中使用它,如下所示:

resources:
  ...
  ...
  my_volume_attach:
    type: OS::Cinder::VolumeAttachment
    properties:
      instance_uuid: {get_param: mynode1_id}
      ...

3) 按如下方式调用第二个热堆栈创建:

heat stack-create -f second-template.yaml -P mynode1_id=`heat output-show mystack1 mynode1_id` mystack2

0
投票

您可能还想使用 depends_on 属性定义资源之间的依赖关系。 从您的描述来看,使用多个模板似乎不是正确的解决方案。

例如 - 如果您希望在对象 1,2 之后创建对象 3,4,您可以按如下方式定义模板:

heat_template_version: '2015-10-15'
parameters:
   param1:
        type: string
        description: just an example of parameter
resources:
 object1:
  type: OS::Neutron::XXX
  properties:
     property: XXX
  description: object1
 object2:
  type: OS::Neutron::XXX
  properties:
     property: XXX
  description: object2
 object3:
  type: OS::Nova::XXX
  properties:
     property: XXX
  description: object3
  depends_on: object1
 object4:
  type: OS::Nova::XXX
  properties:
     property: XXX
  description: object4
  depends_on: object1

0
投票

我尝试使用这样的资源组功能;但它会抛出这个错误: 错误:服务器无法满足请求,因为请求格式错误或不正确。

heat_template_version: 2021-04-16

description: >
  HOT template to create 3 servers (ranger, deputy, handler) with customizable parameters.

parameters:
  key_name:
    type: string
    description: Name of keypair to assign to servers.
    default: darwin
  stack_name:
    type: string
    description: Name of the stack to be appended as a suffix.
    default: OCR_services
  private_cidr:
    type: string
    description: Private CIDR block for subnet.
    default: 172.168.100.0/27
  image_id:
    type: string
    description: ID of the image to use for the servers.
    default: db1bc18e-81e3-477e-9067-eecaa459ec33 # ubuntu22.04
  flavor_name:
    type: string
    description: Name of the flavor to use for the servers.
    default: gx1.2c4r
  external_network:
    type: string
    description: External network for floating IPs.
    default: ntnu-internal
  security_group_rules:
    type: json
    description: Security group rules for the servers.
    default:
      - protocol: icmp
        port_range_min: null
        port_range_max: null
        remote_ip_prefix: 0.0.0.0/0
      - protocol: tcp
        port_range_min: 22
        port_range_max: 22
        remote_ip_prefix: 0.0.0.0/0
      - protocol: tcp
        port_range_min: 80
        port_range_max: 80
        remote_ip_prefix: 0.0.0.0/0
      - protocol: tcp
        port_range_min: 443
        port_range_max: 443
        remote_ip_prefix: 0.0.0.0/0
  server_names:
    type: comma_delimited_list
    description: Names of the servers to be created.
    default: ranger,deputy,handler

resources:
  private_net:
    type: OS::Neutron::Net

  private_subnet:
    type: OS::Neutron::Subnet
    properties:
      network_id: { get_resource: private_net }
      cidr: { get_param: private_cidr }

  router:
    type: OS::Neutron::Router
    properties:
      external_gateway_info:
        network: { get_param: external_network }

  router_interface:
    type: OS::Neutron::RouterInterface
    properties:
      router_id: { get_resource: router }
      subnet_id: { get_resource: private_subnet }

  server_security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      description: Security group rules for server.
      rules: { get_param: security_group_rules }

  servers:
    type: OS::Heat::ResourceGroup
    properties:
      count: { get_param: server_names }
      resource_def:
        type: OS::Nova::Server
        properties:
          name: 
            list_join: ['', ['stack', {get_param: 'stack_name'}, '_', {get_param: 'server_names'}]]
          image: { get_param: image_id }
          flavor: { get_param: flavor_name }
          key_name: { get_param: key_name }
          networks: 
            - port: { get_resource: server_port }
          # security_groups: 
          #   - { get_resource: server_security_group }

© www.soinside.com 2019 - 2024. All rights reserved.