第4章 異なる言語での API 要求
本章では、curl、Ruby および Python を使用して Red Hat Satellite に API 要求を送信する方法を、例と併せて説明します。
4.1. curl を使用した API 要求 リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、Satellite API で curl を使用して、さまざまなタスクを実行する方法を説明します。
Red Hat Satellite は HTTPS と、デフォルトではホストの識別用に証明書を使用する必要があります。「SSL 認証の概要」の記載どおりに Satellite サーバーの証明書を追加していない場合には、--insecure オプションを使用して証明書チェックを省略することができます。
ユーザー認証の場合は、--user オプションを指定して、--user username:password 形式で、Satellite ユーザー認証情報を指定します。または、パスワードを含めない場合には、コマンドでパスワードを入力するようにプロンプトが表示されます。セキュリティーリスクを軽減するには、コマンドの一部としてパスワードを入力すると、シェルの履歴の一部として残ってしまうので、入力しないようにしてください。本セクションの例では、簡素化の目的でのみ、パスワードを含めています。
--silent オプションを使用する場合は、curl で進捗メーターやエラーメッセージは表示されない点に注意してください。
本章の例では、Python json.tool モジュールを使用して出力をフォーマットしています。
4.1.1. API 要求への JSON データの指定 リンクのコピーリンクがクリップボードにコピーされました!
データを API 要求で Satellite Server に渡すことができます。このデータは、JSON 形式でなければなりません。--data オプションで、JSON データを指定する場合には、--header オプションを使用して、以下の HTTP ヘッダーを設定する必要があります。
--header "Accept:application/json,version=2" \ --header "Content-Type:application/json"
--header "Accept:application/json,version=2" \
--header "Content-Type:application/json"
以下のオプションのいずれかを使用して、--data オプションでデータを追加します。
The quoted JSON formatted data enclosed in curly braces
{}. When passing a value for a JSON type parameter, you must escape quotation marks"with backslashes\. For example, within curly braces, you must format"Example JSON Variable"as\"Example JSON Variable\":--date {"id":44, "smart_class_parameter":{"override":"true", "parameter_type":"json", "default_value":"{\"GRUB_CMDLINE_LINUX\": {\"audit\":\"1\",\"crashkernel\":\"true\"}}"}}--date {"id":44, "smart_class_parameter":{"override":"true", "parameter_type":"json", "default_value":"{\"GRUB_CMDLINE_LINUX\": {\"audit\":\"1\",\"crashkernel\":\"true\"}}"}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 引用符なしの JSON 形式のデータは、
@マークとファイル名を指定します。--data @_file_.json
--data @_file_.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow JSON 形式データの外部ファイルを使用すると、以下のような利点があります。
- 任意のテキストエディターを使用できる
- 構文チェッカーを使用してミスを特定し、回避できる
- ツールを使用して JSON データの妥当性を確認して、再フォーマットができる
JSON ファイルの検証
json_verify ツールを使用して、JSON ファイルの妥当性を確認します。
json_verify < test_file.json
$ json_verify < test_file.json
4.1.2. リソース一覧の取得 リンクのコピーリンクがクリップボードにコピーされました!
本セクションは、 Satellite 6 API で curl を使用して、Satellite デプロイメントから情報を要求する方法を説明します。これらの例には、要求と応答の両方が含まれます。デプロイメントごとに、異なる結果が得られることが想定されます。
ユーザーの一覧表示
以下の例は、Satellite リソース (今回の例では、Satellite ユーザー) の一覧を返す基本的な要求です。このような要求では、メタデータでラップされたデータ一覧を返しますが、他の要求タイプでは実際のオブジェクトが返されます。
要求例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite6.example.com/api/users | python -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite6.example.com/api/users | python -m json.tool
応答例:
4.1.3. リソースの作成および変更 リンクのコピーリンクがクリップボードにコピーされました!
本章では、Satellite 6 API で curl を使用して Satellite Server のリソースを操作する方法を説明します。これらの API 呼び出しでは、API 呼び出しの json 形式でデータを渡す必要があります。詳細情報は、「API 要求への JSON データの指定」を参照してください。
ユーザーの作成
以下の例では、--data オプションを使用してユーザーを作成し、必要な情報を指定します。
要求例:
curl --header "Accept:application/json,version=2" \
--header "Content-Type:application/json" --request POST \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"Test Name\",\"mail\":\"test@example.com\",\"login\":\"test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite6.example.com/api/users | python -m json.tool
$ curl --header "Accept:application/json,version=2" \
--header "Content-Type:application/json" --request POST \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"Test Name\",\"mail\":\"test@example.com\",\"login\":\"test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite6.example.com/api/users | python -m json.tool
ユーザーの変更
以下の例では、「ユーザーの作成」で作成した test_user のログインと名前を変更します。
要求例:
curl --header "Accept:application/json,version=2" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"New Test Name\",\"mail\":\"test@example.com\",\"login\":\"new_test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite6.example.com/api/users/8 | python -m json.tool
$ curl --header "Accept:application/json,version=2" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"New Test Name\",\"mail\":\"test@example.com\",\"login\":\"new_test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite6.example.com/api/users/8 | python -m json.tool
4.2. Ruby を使用した API 要求 リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、Satellite API で Ruby を使用して、さまざまなタスクを実行する方法を説明します。
以下は、スクリプトおよびコマンドの例です。以下のスクリプトを慎重にレビューしてから使用するようにしてください。変数、ユーザー名、パスワード、その他の情報は、お使いのデプロイメントに適した値に置き換えてください。
4.2.1. Ruby を使用したオブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下のスクリプトは Red Hat Satellite 6 API と接続して、組織を作成し、その新規組織内に 3 つの環境を作成します。組織がすでに存在する場合には、このスクリプトはその組織を使用します。組織内に環境が 1 つでも存在する場合は、スクリプトによりエラーが送出されて、スクリプトは終了します。
4.2.2. Ruby での Apipie バインディングの使用 リンクのコピーリンクがクリップボードにコピーされました!
Apipie バインディングは、apipie で記述された API 呼び出しの Ruby バインディングです。このバインディングは、Satellite から API 定義を取得してキャッシュし、オンデマンドで API 呼び出しを生成します。以下の例では、組織を作成し、その新規組織内に 3 つの環境を作成します。組織がすでに存在する場合には、このスクリプトはその組織を使用します。組織内に環境が 1 つでも存在する場合は、スクリプトによりエラーが送出されて、スクリプトは終了します。
4.3. Python を使用した API 要求 リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、Satellite API で Python を使用して、さまざまなタスクを実行する方法を説明します。
以下は、スクリプトおよびコマンドの例です。以下のスクリプトを慎重にレビューしてから使用するようにしてください。変数、ユーザー名、パスワード、その他の情報は、お使いのデプロイメントに適した値に置き換えてください。
本セクションのスクリプト例では、REST API との対話に SSL 検証を使用しません。
4.3.1. Python を使用したオブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下のスクリプトは Red Hat Satellite 6 API と接続して、組織を作成し、その新規組織内に 3 つの環境を作成します。組織がすでに存在する場合には、このスクリプトはその組織を使用します。組織内に環境が 1 つでも存在する場合は、スクリプトによりエラーが送出されて、スクリプトは終了します。
4.3.2. Python を使用した APIからの情報要求 リンクのコピーリンクがクリップボードにコピーされました!
以下は、さまざまな API 要求に Pythonを使用するスクリプト例です。