全部产品
Search
文档中心

Resource Orchestration Service:ALIYUN::ROS::WaitConditionHandle

更新时间:Jun 26, 2025

ALIYUN::ROS::WaitConditionHandle digunakan untuk menerima sinyal. Anda dapat menggunakannya bersama dengan ALIYUN::ROS::WaitCondition untuk mengelola proses eksekusi suatu stack. Saat membuat instance Elastic Compute Service (ECS), sebuah sinyal dikirim selama eksekusi data pengguna.

Sintaksis

{
  "Type": "ALIYUN::ROS::WaitConditionHandle",
  "Properties": {
    "Mode": String,
    "Count": Integer
  }
}

Properti

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Mode

String

Tidak

Ya

Mode di mana sistem menghapus sinyal yang ada sebelum sumber daya diperbarui.

Nilai valid:

  • Increment: Sistem menghapus semua sinyal yang ada sebelum sumber daya diperbarui.

    Catatan

    Jumlah sinyal yang ditunggu oleh ALIYUN::ROS::WaitCondition selama pembaruan dihitung berdasarkan rumus berikut: Jumlah sinyal = Nilai properti Count dalam ALIYUN::ROS::WaitCondition.

  • Full: Jika properti Count berlaku, sistem menghapus sinyal yang ada sebelum sumber daya diperbarui. Jika tidak, sistem tidak menghapus sinyal yang ada sebelum sumber daya diperbarui.

    Catatan

    Jumlah sinyal yang ditunggu oleh ALIYUN::ROS::WaitCondition selama pembaruan dihitung berdasarkan rumus berikut: Jumlah sinyal = Nilai properti Count dalam ALIYUN::ROS::WaitCondition - Jumlah sinyal tersisa setelah sinyal yang ada dihapus.

Count

Integer

Tidak

Ya

Jika Anda menetapkan properti Mode ke Full, sistem menghapus sinyal yang ada yang ID-nya adalah bilangan bulat lebih besar dari nilai properti Count sebelum sumber daya diperbarui.

Nilai default: -1.

Properti Count berlaku ketika kondisi berikut terpenuhi:

  • Properti Mode disetel ke Full.

  • Properti Count disetel ke nilai lebih besar dari atau sama dengan 0.

Jika properti Count berlaku, sistem menghapus sinyal yang ada yang ID-nya adalah bilangan bulat lebih besar dari nilai properti Count sebelum sumber daya diperbarui. Jika sinyal yang ID-nya bukan bilangan bulat ada, sumber daya gagal diperbarui.

Catatan

Dalam skenario di mana Anda ingin melakukan skalabilitas elastis dengan memperbarui stack, kami sarankan Anda menetapkan properti Count dalam ALIYUN::ROS::WaitConditionHandle ke nilai properti Count dalam ALIYUN::ROS::WaitCondition.

Nilai kembali

Fn::GetAtt

  • CurlCli: Perintah cURL yang dihasilkan dari sumber daya dalam ALIYUN::ROS::WaitConditionHandle. Anda dapat menjalankan perintah ini untuk mengirim hasil eksekusi atau status data pengguna ke Resource Orchestration Service (ROS).

  • WindowsCurlCli: Awalan perintah cURL untuk Windows. Anda dapat menjalankan perintah ini untuk mengirim sinyal yang menunjukkan apakah eksekusi berhasil atau gagal. Windows tidak mendukung perintah cURL secara default, sehingga Anda harus menginstal curl.exe dan menambahkannya ke PATH sebelum menjalankan perintah. Gunakan -d "{\"status\": \" SUCCESS \"} untuk menandakan keberhasilan dan -d "{\"status\": \" FAILURE \"} untuk menandakan kegagalan.

  • PowerShellCurlCli: Awalan perintah cURL untuk PowerShell. Anda dapat menjalankan perintah ini untuk mengirim sinyal yang menunjukkan apakah eksekusi berhasil atau gagal. Cmdlet diperkenalkan pada PowerShell 3.0, sehingga Anda harus menggunakan versi 3.0 atau lebih baru. Gunakan $PSVersionTable.PSVersion untuk memeriksa nomor versi PowerShell. Tambahkan -Body '{"status": " SUCCESS "} untuk menandakan keberhasilan dan -Body '{"status": " FAILURE "} untuk menandakan kegagalan.

  • Headers: Header permintaan HTTP POST. Anda dapat menggunakan header ini untuk mengirim sinyal yang menunjukkan apakah eksekusi berhasil atau gagal ke program Anda.

  • URL: URL permintaan HTTP POST. Anda dapat menggunakan URL ini untuk mengirim sinyal yang menunjukkan apakah eksekusi berhasil atau gagal ke program Anda.

Catatan
  • Dalam badan permintaan CurlCli, WindowsCurlCli, dan PowerShellCurlCli, Anda dapat menggunakan parameter id dalam format STRING untuk menentukan ID sinyal.

    Contoh: -d "{\"status\": \" SUCCESS \", \"id\": \"test\"}".

    Jika sinyal memiliki ID yang sama, sinyal terbaru akan menimpa sinyal sebelumnya.

    Jika Anda tidak menentukan ID sinyal, ROS akan menggunakan bilangan bulat sebagai ID sinyal. ID sinyal dihitung berdasarkan rumus berikut: ID Sinyal = Jumlah sinyal yang ada + 1.

  • Dalam badan permintaan CurlCli, WindowsCurlCli, dan PowerShellCurlCli, Anda dapat menggunakan parameter reason dalam format STRING untuk menentukan alasan keberhasilan atau kegagalan eksekusi sinyal. Alasan tersebut akan muncul dalam acara stack yang mencatat notifikasi sinyal.

    Contoh: -d "{\"status\": \" SUCCESS \", \"reason\": \"nginx is installed successfully.\"}".

    Setelah menentukan bidang reason, konten yang diminta akan muncul dalam acara stack yang mencatat notifikasi sinyal.

  • Dalam badan permintaan CurlCli, WindowsCurlCli, dan PowerShellCurlCli, Anda dapat menggunakan parameter data dalam format STRING untuk menentukan data yang terkait dengan sinyal. Anda dapat menggunakan properti Data, ErrorData, atau JoinedErrorData dalam nilai kembali ALIYUN::ROS::WaitCondition untuk menanyakan data tersebut.

    Contoh: -d "{\"id\" : \"ssh_pub_key\", \"data\" : \"$pub_key\"}".

  • Anda dapat menggunakan parameter status untuk menentukan tipe sinyal, seperti SUCCESS, FAILURE, dan WARNING. Informasi berikut menggambarkan tipe sinyal dalam urutan prioritas menurun, serta hubungan antara tipe sinyal dan hasil operasi pada sumber daya:

    • Jika sinyal yang diterima adalah tipe FAILURE, operasi gagal dilakukan pada sumber daya.

    • Jika jumlah sinyal yang diterima kurang dari nilai properti Count dalam rentang waktu tertentu, operasi pada sumber daya habis waktu.

    • Jika jumlah sinyal yang diterima lebih besar dari atau sama dengan nilai properti Count dan semua sinyal adalah tipe WARNING, operasi gagal dilakukan pada sumber daya.

    • Dalam kasus lain, operasi pada sumber daya berhasil.

Contoh

  • YAML Format

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
      InstanceId:
        Type: String
        AssociationProperty: ALIYUN::ECS::Instance::InstanceId
    Resources:
      InstallNginx:
        Type: 'ALIYUN::ECS::RunCommand'
        Properties:
          Type: RunShellScript
          CommandContent:
            Fn::Sub: |
                #!/bin/sh
                yum install -y nginx
                systemctl restart nginx
                if [[ $? -eq 0 ]];
                then
                ${InstallNginxWaitConditionHandle.CurlCli} --data-binary "{\"status\": \"SUCCESS\", \"data\": \"Nginx is installed successfully.\"}"
                else
                ${InstallNginxWaitConditionHandle.CurlCli} --data-binary "{\"status\": \"FAILURE\", \"reason\": \"Failed to install and start nginx.\"}"
                fi
          Name: InstallNginxScript
          InstanceIds:
            - Ref:
                InstanceId
          Timeout: 60
      InstallNginxWaitConditionHandle:
        Type: 'ALIYUN::ROS::WaitConditionHandle'
      InstallNginxWaitCondition:
        Type: 'ALIYUN::ROS::WaitCondition'
        Properties:
          Handle:
            Ref: InstallNginxWaitConditionHandle
          Timeout: 60
    Outputs:
      InstallNginxData:
        Description: Menerima data yang dikirim oleh ecs pertama, dict JSON serial yang berisi data terkait dengan sinyal kondisi tunggu yang dikirim ke handle.
        Value:
          Fn::GetAtt:
          - InstallNginxWaitCondition
          - Data
  • JSON Format

    {
      "ROSTemplateFormatVersion": "2015-09-01",
      "Parameters": {
        "InstanceId": {
          "Type": "String",
          "AssociationProperty": "ALIYUN::ECS::Instance::InstanceId"
        }
      },
      "Resources": {
        "InstallNginx": {
          "Type": "ALIYUN::ECS::RunCommand",
          "Properties": {
            "Type": "RunShellScript",
            "CommandContent": {
              "Fn::Sub": "#!/bin/sh\nyum install -y nginx\nsystemctl restart nginx\nif [[ $? -eq 0 ]];\nthen\n${InstallNginxWaitConditionHandle.CurlCli} --data-binary \"{\\\"status\\\": \\\"SUCCESS\\\", \\\"data\\\": \\\"Nginx is installed successfully.\\\"}\"\nelse\n${InstallNginxWaitConditionHandle.CurlCli} --data-binary \"{\\\"status\\\": \\\"FAILURE\\\", \\\"reason\\\": \\\"Failed to install and start nginx.\\\"}\"\nfi\n"
            },
            "Name": "InstallNginxScript",
            "InstanceIds": [
              {
                "Ref": "InstanceId"
              }
            ],
            "Timeout": 60
          }
        },
        "InstallNginxWaitConditionHandle": {
          "Type": "ALIYUN::ROS::WaitConditionHandle"
        },
        "InstallNginxWaitCondition": {
          "Type": "ALIYUN::ROS::WaitCondition",
          "Properties": {
            "Handle": {
              "Ref": "InstallNginxWaitConditionHandle"
            },
            "Timeout": 60
          }
        }
      },
      "Outputs": {
        "InstallNginxData": {
          "Description": "Menerima data yang dikirim oleh ecs pertama, dict JSON serial yang berisi data terkait dengan sinyal kondisi tunggu yang dikirim ke handle.",
          "Value": {
            "Fn::GetAtt": [
              "InstallNginxWaitCondition",
              "Data"
            ]
          }
        }
      }
    }