第5章 さまざまな言語での API リクエスト
curl、Ruby、または Python から Red Hat Satellite に API リクエストを送信する次の例を確認できます。
5.1. curl での API の呼び出し
Satellite API で curl
を使用して、さまざまなタスクを実行できます。
Red Hat Satellite は HTTPS と、デフォルトではホストの識別用に証明書を使用する必要があります。「SSL 認証の概要」 の記載どおりに Satellite Server の証明書を追加していない場合には、--insecure
オプションを使用して証明書チェックを省略することができます。
ユーザー認証の場合は、--user
オプションを指定して、--user username:password
形式で、Satellite ユーザー認証情報を指定します。または、パスワードを含めない場合には、コマンドでパスワードを入力するようにプロンプトが表示されます。セキュリティーリスクを軽減するには、コマンドの一部としてパスワードを入力すると、シェルの履歴の一部として残ってしまうので、入力しないようにしてください。このセクションの例では、簡素化の目的でのみ、パスワードを含めています。
--silent
オプションを使用する場合は、curl
で進捗メーターやエラーメッセージは表示されない点に注意してください。
この章の例では、Python json.tool
モジュールを使用して出力をフォーマットしています。
5.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
5.1.2. リソースリストの取得
このセクションでは、Satellite 6 API で curl
を使用して Satellite から情報を要求する方法について説明します。これらの例には、要求と応答の両方が含まれます。デプロイメントごとに、異なる結果が得られることが想定されます。
ユーザーのリスト表示
以下の例は、Satellite リソース (今回の例では、Satellite ユーザー) のリストを返す基本的な要求です。このような要求では、メタデータでラップされたデータリストを返しますが、他の要求タイプでは実際のオブジェクトが返されます。
要求例:
$ curl --request GET --user My_User_Name:My_Password \ https://satellite.example.com/api/users | python3 -m json.tool
応答例:
{ "page": 1, "per_page": 20, "results": [ { "admin": false, "auth_source_id": 1, "auth_source_name": "Internal", "created_at": "2018-09-21 08:59:22 UTC", "default_location": null, "default_organization": null, "description": "", "effective_admin": false, "firstname": "", "id": 5, "last_login_on": "2018-09-21 09:03:25 UTC", "lastname": "", "locale": null, "locations": [], "login": "test", "mail": "example@domain.com", "organizations": [ { "id": 1, "name": "Default Organization" } ], "ssh_keys": [], "timezone": null, "updated_at": "2018-09-21 09:04:45 UTC" }, { "admin": true, "auth_source_id": 1, "auth_source_name": "Internal", "created_at": "2018-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": "2018-12-07 07:31:09 UTC", "lastname": "User", "locale": null, "locations": [ { "id": 2, "name": "Default Location" } ], "login": "admin", "mail": "root@example.com", "organizations": [ { "id": 1, "name": "Default Organization" } ], "ssh_keys": [], "timezone": null, "updated_at": "2018-11-14 08:19:46 UTC" } ], "search": null, "sort": { "by": null, "order": null }, "subtotal": 2, "total": 2 }
5.1.3. リソースの作成および変更
curl
を使用して、Satellite Server のリソースを操作できます。Satellite への API 呼び出しには、json
形式のデータが必要です。詳細は、「API 要求への JSON データの指定」 を参照してください。
ユーザーの作成
この例では、必要な情報を --data
オプションに指定してユーザーを作成します。
要求例:
$ 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
ユーザーの変更
以下の例では、ユーザーの作成 で作成した test_user
のログインと名を変更します。
要求例:
$ 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