Как передать значения json / list в шаблон в HEAT user_data

необходимо заменить user_data динамическими значениями в группе ресурсов из comma_delimited_list.

% index% не работает.

heat_template_version: 2015-10-15

test_parameter:
type: comma_delimited_list
label: test param  list
description: test descr
default: 'test_param_1,test_param_2'
.......
...... 

type: OS::Heat::ResourceGroup
properties:
.........
.........
user_data:
    str_replace:
      template: |
        get the local value of the instance : $val
      params:
        $val: { get_param: [ test_parameter, %index% ] } 
        
        

Как передать значения json / list в шаблон в HEAT-user_data


person TechieLogs    schedule 26.09.2016    source источник


Ответы (1)


К сожалению, использование aws-cloudformation в некоторой степени ограничено тем, что вы обычно можете делать, а язык, ориентированный на тепло (который по-прежнему основан на aws-cloudformation), имеет те же ограничения.

Как правило, лучшие решения, которые у вас могут быть, - это иметь списки «выбора» в верхней части шаблона и передавать некоторые из выбранных элементов в ваши ресурсы. В следующем примере один из этих вариантов запрашивает установку определенного веб-приложения (из nginx и apache) и передает его как переменную в раздел пользовательских данных вашего шаблона:

heat_template_version: 2015-04-30

description: >
  Hello world HOT template that just defines a single server.
  Contains just base features to verify base HOT support.

parameters:
  key_name:
    type: string
    description: Name of an existing key pair to use for the server
    default: "topcat-01"
    constraints:
      - custom_constraint: nova.keypair
  flavor:
    type: string
    description: Flavor for the server to be created
    default: m1.normal
    constraints:
      - custom_constraint: nova.flavor
  image:
    type: string
    description: Image ID or image name to use for the server
    default: Ubuntu-1404lts-32-Cloud
    constraints:
      - custom_constraint: glance.image
  my_network:
    type: string
    description: Neutron Network
    default: public-internet-access
    constraints:
      - custom_constraint: neutron.network
  application-install:
    type: string
    default: apache
    constraints: 
      - allowed_values: [apache, nginx]
        description: Value must be one of 'apache', or 'nginx'

resources:
  server:
    type: OS::Nova::Server
    properties:
      key_name: { get_param: key_name }
      image: { get_param: image }
      flavor: { get_param: flavor }
      security_groups: 
        - default
      name: test-single-topcat-instance
      networks:
        - network: { get_param: my_network }
      user_data_format: RAW
      user_data:
        str_replace:
          template: |
            #!/bin/bash
            myapp="$selectedapp01"
            echo "MY APP IS $myapp"
            PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
            case $myapp in
            apache)
                echo "INSTALLING APACHE"
                if [ -f /etc/debian_version ]
                then
                   aptitude -y update
                   aptitude -y install apache2
                fi
                if [ -f /etc/redhat-release ]
                then
                   yum -y install httpd
                   chkconfig httpd on
                   echo "" >> /var/www/html/index.html
                   service httpd start
                fi
                ;;
            nginx)
                echo "INSTALLING NGINX"
                if [ -f /etc/debian_version ]
                then
                   aptitude -y update
                   aptitude -y install nginx-full
                fi
                if [ -f /etc/redhat-release ]
                then
                   yum -y install nginx
                   chkconfig nginx on
                   service nginx start
                fi
                ;;
            esac
          params:
            $selectedapp01: {get_param: application-install}

outputs:
  server_networks:
    description: The networks of the deployed server
    value: { get_attr: [server, networks] }

В приведенном выше примере параметр «application-install» (который может быть apache или nginx) будет интерпретироваться как «$ selectedapp01» в конце раздела пользовательских данных и как «$ myapp» (myapp = «$ selectedapp01 ") в начале пользовательских данных.

Это не идеально, но это нормальный способ. Большинство инструментов развертывания облачной информации создают окончательный шаблон из набора «вопросов и ответов», и вы закончили со статическим (полустатическим) шаблоном.

Тот, который я добавил сюда в качестве примера, спросит вас о многих вещах и установит некоторые значения по умолчанию.

Надеюсь, это поможет.

person tigerlinux    schedule 02.10.2016