3

OpenStack の「Heat」のオーケストレーション エンジンは、コンピューティング リソースを展開し、HOT テンプレートと呼ばれるソフトウェアを構成できます。ここの github には多くの例があります: https://github.com/openstack/heat-templates/tree/master/hot

heat テンプレートは YAML で記述されており、この構文でテンプレートをデプロイできます

heat stack-create my_first_stack -f heat_1a.yaml

テンプレート ファイルを OpenStack ダッシュボードに直接アップロードすることもできます。ただし、ここで私の質問です。多くのテンプレートには、デプロイ後に実行される PowerShell スクリプトのシェル スクリプトも含まれます。これらのスクリプトを OpenStack にアップロードして、スタックに含めるにはどうすればよいですか?

たとえば、これは MicroSoft SQL サーバー テンプレートのディレクトリ リストです。

C:\heat-templates\hot\Windows\MSSQLServer>ls
MSSQL.ps1  MSSQL.psm1  MSSQL.yaml  Tests  heat-powershell-utils.psm1

Heat クライアントは YAML ファイルのみを引数として受け取るため、スクリプトをどのように、または何を行うのでしょうか?

ありがとう、ロブ。

4

2 に答える 2

4

heat のテンプレート ガイドを参照してください: http://docs.openstack.org/developer/heat/template_guide/software_deployment.html

基本的に、yaml テンプレート ファイルで定義されたリソースは、指定されたファイル名から文字列を読み取る "get_file" ディレクティブを使用できます。そのため、Heat クライアントの MSSQL.yaml を呼び出すと、Heat クライアントはそれを解析し、引数としてファイル名を使用して「get_file」を検出すると、そのファイルから読み取ります。

上記のリンクから「get_file」を使用した例:

...
the_server:
  type: OS::Nova::Server
  properties:
    # flavor, image etc
    user_data:
      str_replace:
        template: {get_file: the_server_boot.sh}
        params:
          $FOO: {get_param: foo}
于 2016-04-18T22:39:08.857 に答える
1

場合によっては、HEAT テンプレートで提供されるパラメーターに基づいてスクリプトを作成し、スタックが作成されたら実行する必要があります。

この種の要件については、以下のパターン メンションを使用できます。これにより、VM が起動し、cloud-init フェーズになると、スクリプトが作成および実行されます。

services-cloud-init:
    type: OS::Heat::CloudConfig
    properties:
        cloud_config:
            timezone: {get_param: time_zone}
            write_files:
              - path: /tmp/change_password.sh
                owner: root:root
                permissions: '0777'
                content: |
                          #!/bin/bash
                          echo -e "pwd\npwd" | passwd cloud-user

              - path: /run/change_timezone.sh
                owner: root:root
                permissions: '0777'
                content: |
                          #!/bin/bash
                          ln -sf /usr/share/zoneinfo/timezone /etc/localtime

            runcmd:
              - echo "Executing change_timezone"
              - /tmp/change_timezone.sh
              - echo "Executing change_password"
              - /tmp/change_password.sh
              - reboot
            bootcmd:
              - echo "Boot Completed"
于 2018-05-23T14:43:52.977 に答える