第4章 さまざまな言語での API リクエスト
curl、Ruby、または Python から Red Hat Satellite に API リクエストを送信する次の例を確認できます。
4.1. curl での API の呼び出し リンクのコピーリンクがクリップボードにコピーされました!
Satellite API で curl を使用して、さまざまなタスクを実行できます。
Red Hat Satellite は HTTPS と、デフォルトではホストの識別用に証明書を使用する必要があります。「SSL 認証の概要」 の記載どおりに Satellite Server の証明書を追加していない場合には、--insecure オプションを使用して証明書チェックを省略することができます。
ユーザー認証の場合は、--user オプションを使用して、Satellite ユーザー認証情報を --user My_User_Name:_My_Password の形式で指定できます。パスワードを指定しないと、コマンドによりパスワードの入力が求められます。または、パスワードを含めない場合には、コマンドでパスワードを入力するようにプロンプトが表示されます。このセクションの例には、簡素化の目的でのみパスワードを含めています。
--silent オプションを使用する場合は、curl で進捗メーターやエラーメッセージは表示されない点に注意してください。
この章の例では、Python json.tool モジュールを使用して出力をフォーマットしています。
4.1.1. API 要求への JSON データの指定 リンクのコピーリンクがクリップボードにコピーされました!
データを API 要求で Satellite Server に渡すことができます。このデータは、JSON 形式でなければなりません。--data オプションで、JSON データを指定する場合には、--header オプションを使用して、以下の HTTP ヘッダーを設定する必要があります。
--header "Accept:application/json" \
--header "Content-Type:application/json"
以下のオプションのいずれかを使用して、--data オプションでデータを追加します。
JSON 形式の文字列
引用符で囲まれた JSON 形式のデータを中括弧 {} で囲みます。JSON タイプのパラメーターの値を渡す場合には、バックスラッシュ \ を使用して、引用符 " をエスケープする必要があります。たとえば、中括弧内では "Example JSON Variable" は \"Example JSON Variable\" のような形式にする必要があります。
--data {"id":44, "smart_class_parameter":{"override":"true", "parameter_type":"json", "default_value":"{\"GRUB_CMDLINE_LINUX\": {\"audit\":\"1\",\"crashkernel\":\"true\"}}"}}
JSON 形式のファイル
引用符なしの JSON 形式のデータは、@ マークとファイル名を指定します。以下に例を示します。
--data @file.json
JSON 形式データの外部ファイルを使用すると、以下のような利点があります。
- 任意のテキストエディターを使用できる
- 構文チェッカーを使用してミスを特定し、回避できる
- ツールを使用して JSON データの妥当性を確認して、再フォーマットができる
json_verify ツールを使用して、JSON ファイルの妥当性を確認します。
$ json_verify < file.json
4.1.2. リソースリストの取得 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Satellite 6 API で curl を使用して Satellite から情報を要求する方法を説明します。これらの例には、要求と応答の両方が含まれます。デプロイメントごとに、異なる結果が得られることが想定されます。
4.1.2.1. ユーザーのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、Satellite リソース (今回の例では、Satellite ユーザー) のリストを返す基本的な要求です。このような要求では、メタデータでラップされたデータリストを返しますが、他の要求タイプでは実際のオブジェクトが返されます。
API 要求
$ curl \
--request GET \
--user My_User_Name:My_Password \
https://satellite.example.com/api/users \
| python3 -m json.tool
API 応答
{
"page": 1,
"per_page": 20,
"results": [
{
"admin": false,
"auth_source_id": 1,
"auth_source_name": "Internal",
"created_at": "2024-09-21 08:59:22 UTC",
"default_location": null,
"default_organization": null,
"description": "",
"effective_admin": false,
"firstname": "",
"id": 5,
"last_login_on": "2024-09-21 09:03:25 UTC",
"lastname": "",
"locale": null,
"locations": [],
"login": "test",
"mail": "test@example.com",
"organizations": [
{
"id": 1,
"name": "Default Organization"
}
],
"ssh_keys": [],
"timezone": null,
"updated_at": "2024-09-21 09:04:45 UTC"
},
{
"admin": true,
"auth_source_id": 1,
"auth_source_name": "Internal",
"created_at": "2024-09-20 07:09:41 UTC",
"default_location": null,
"default_organization": {
"description": null,
"id": 1,
"name": "Default Organization",
"title": "Default Organization"
},
"description": "",
"effective_admin": true,
"firstname": "Admin",
"id": 4,
"last_login_on": "2024-12-07 07:31:09 UTC",
"lastname": "User",
"locale": null,
"locations": [
{
"id": 2,
"name": "Default Location"
}
],
"login": "admin",
"mail": "admin@example.com",
"organizations": [
{
"id": 1,
"name": "Default Organization"
}
],
"ssh_keys": [],
"timezone": null,
"updated_at": "2024-11-14 08:19:46 UTC"
}
],
"search": null,
"sort": {
"by": null,
"order": null
},
"subtotal": 2,
"total": 2
}
4.1.3. リソースの作成および変更 リンクのコピーリンクがクリップボードにコピーされました!
curl を使用して、Satellite Server のリソースを操作できます。Satellite への API 呼び出しには、json 形式のデータが必要です。詳細は、「API 要求への JSON データの指定」 を参照してください。
4.1.4. ユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
この手順を使用してユーザーを作成します。
API 要求
$ curl \
--header "Accept:application/json" \
--header "Content-Type:application/json" \
--request POST \
--user My_User_Name:My_Password \
--data "{\"firstname\":\"Test Name\",\"mail\":\"test@example.com\",\"login\":\"test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users \
| python3 -m json.tool
4.1.5. ユーザーの変更 リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、API 要求 で作成した test_user のログインと名を変更します。
API 要求
$ curl \
--header "Accept:application/json" \
--header "Content-Type:application/json" \
--request PUT \
--user My_User_Name:My_Password \
--data "{\"firstname\":\"New Test Name\",\"mail\":\"test@example.com\",\"login\":\"new_test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users/8 \
| python3 -m json.tool