本文へスキップ

ユーザー状態

Equinix Metal™は、プロビジョニングプロセス中にカスタムの状態情報を送信・発信するためのユーザー状態エンドポイントを提供しています。

Equinix Metal発行のオペレーティングシステムイメージでプロビジョニングを設定すると、サーバーハードウェアが起動し、イメージングプロセスが完了した後、サーバーからユーザー状態のエンドポイントにアクセスできるようになります。このセットアップでは、user dataスクリプトでイベントを定義し、ユーザーデータ操作に関する状態情報を送信します。

Custom iPXE を使用してユーザをプロビジョニングする場合、ハードウェアが起動し、プロバイダから提供されたイメージのインストールが開始されると、エンドポイントにアクセスできるようになります。この場合、User State を使用すると、イメージング処理中および処理後に状態情報を送信できます。

ユーザー状態エンドポイントの取得

ユーザー状態のエンドポイントは、サーバーがプロビジョニングされている場所に依存するため、使用する前にサーバーのメタデータから取得する必要があります。例えば、現在プロビジョニングされているサーバに SSH でログインし、メタデータのエンドポイントを cURL で取得した場合:

curl https://metadata.platformequinix.com/metadata | jq -r .user_state_url

はUser StateイベントのURLを返します:

http://tinkerbell.sv15.packet.net/events

プロビジョニングプロセス中にこれを使用するには、User Dataにbashスクリプト(example)を記述して、User Stateエンドポイントを取得し、環境変数として保存します。

カスタムユーザ状態イベントの作成

カスタムユーザ状態イベントを作成したい場合は、ユーザ状態エンドポイントにPOSTリクエストを送信します。

curl -X POST \
http://tinkerbell.sv15.packet.net/events \
-d '{
"state":"running",
"code":1000,
"message":"running the user data script"
}'

POSTリクエストのボディは、以下のフィールドを受け入れることができる:

  • "state" - running, succeeded, or failed.
  • "code" - an integer between 1000 and 1099, inclusive.
  • "message" - can be any string message that you want.

たとえば、これをユーザー データ スクリプトの最後に使用して、サーバーのプロビジョニング後にユーザー データ スクリプトの実行が終了したことを示すことができます。

curl -X POST \
http://tinkerbell.sv15.packet.net/events \
-d '{
"state":"succeeded",
"code":1001,
"message":"done running the user data script"
}'

タイムライン上のイベントを見る

POSTリクエストはサーバーのタイムラインにイベントを追加し、コンソールやAPIから見ることができる。

サーバーの_Timeline_タブに移動します。

Screenshot of the Device Timeline in the Console

Bashスクリプトの例

以下は、カスタムイメージインストールプロセスまたはユーザーデータで使用できるBashスクリプトの例で、ユーザー状態イベントを送信します。

#!/bin/bash
apt-get update && apt-get upgrade -y
apt-get install jq -y
url="$(curl https://metadata.platformequinix.com/metadata | jq -r .user_state_url)"

send_user_state_event() {
data=$(
echo "{}" \
| jq '.state = $state | .code = ($code | tonumber) | .message = $message' \
--arg state "$1" \
--arg code "$2" \
--arg message "$3"
)
curl -v -X POST -d "$data" "$url"
}

send_user_state_event running 1000 "hey im still running"
send_user_state_event succeeded 1001 "hey im done now :)"
このページは役に立ちましたか?