ユーザー状態
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, orfailed."code"- an integer between1000and1099, 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から見ることができる。
- Console
- API
サーバーの_Timeline_タブに移動します。

GET リクエストを /devices/{id}/events エンドポイントに送信します。
curl -X GET -H 'X-Auth-Token: <API_TOKEN>' \
https://api.equinix.com/metal/v1/devices/{id}/events
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 :)"