6.3. Satellite Server へのコンテンツのアップロード


Satellite API を使用して、大きなファイルを Satellite Server にアップロードおよびインポートできます。このプロセスでは、4 つの手順が含まれます。

  1. アップロード要求を作成します。
  2. コンテンツをアップロードします。
  3. コンテンツをインポートします。
  4. アップロード要求を削除します。

アップロードできるファイルの最大サイズは 2 MB です。大容量のコンテンツのアップロードに関する情報は、API の手順 を参照してください。

手順

  1. パッケージ名を変数 に割り当てます。

    要求例:

    $ export name=jq-1.6-2.el7.x86_64.rpm
    Copy to Clipboard Toggle word wrap
  2. ファイルのチェックサムを変数 チェックサム に割り当てます。

    要求例:

    $ export checksum=$(sha256sum $name|cut -c 1-65)
    Copy to Clipboard Toggle word wrap
  3. ファイルサイズを変数 サイズ に割り当てます。

    要求例:

    $ export size=$(du -bs $name|cut -f 1)
    Copy to Clipboard Toggle word wrap
  4. sizechecksum を使用して、リクエストのアップロード ID を返すアップロードリクエストを作成します。

    要求例:

    $ curl \
    --header 'Content-Type: application/json' \
    --request POST \
    --user My_User_Name:My_Password \
    --data "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads
    Copy to Clipboard Toggle word wrap

    今回の場合は、76 はリポジトリー ID の例です。

    要求例:

    {"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}
    Copy to Clipboard Toggle word wrap
  5. 変数 upload_id にアップロード ID を割り当てます。

    $ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
    Copy to Clipboard Toggle word wrap
  6. アップロードするパッケージのパスを変数 パス に割り当てます。

    $ export path=/root/jq/jq-1.6-2.el7.x86_64.rpm
    Copy to Clipboard Toggle word wrap
  7. コンテンツをアップロードします。データのアップロード時には、正しい MIME タイプを使用していることを確認します。特に明記しない限り、API は Satellite へのリクエストに application/json MIME タイプを使用します。アップロード ID、MIME タイプ、その他のパラメーターを組み合わせてコンテンツをアップロードします。

    要求例:

    $ curl \
    --user My_User_Name:My_Password \
    --header Accept:application/json \
    --header Content-Type:multipart/form-data \
    --request PUT \
    --data-urlencode size=$size \
    --data-urlencode offset=0 \
    --data-urlencode content@${path} \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    Copy to Clipboard Toggle word wrap
  8. Satellite Server にコンテンツをアップロードした後に、適切なリポジトリーにそのコンテンツをインポートする必要があります。この手順を完了するまで、Satellite Server ではこの新しいコンテンツは認識されません。

    要求例:

    $ curl \
    --header "Content-Type:application/json" \
    --request PUT \
    --user My_User_Name:My_Password \
    --data "{\"uploads\":[{\"id\": \"$upload_id\", \"name\": \"$name\", \"checksum\": \"$checksum\" }]}" \
    https://satellite.example.com/katello/api/v2/repositories/76/import_uploads
    Copy to Clipboard Toggle word wrap
  9. コンテンツのアップロードおよびインポートが正常に完了したら、アップロード要求を削除することができます。削除することで、アップロード中にデータが使用した一時的なディスク領域を解放することができます。

    要求例:

    $ curl \
    --header 'Content-Type: application/json' \
    --request DELETE \
    --user My_User_Name:My_Password \
    --data "{}" \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    Copy to Clipboard Toggle word wrap

6.3.1. 2 MB よりも大きいコンテンツのアップロード

以下の例では、大容量のファイルを複数のチャンクに分割して、アップロード要求の作成、個別ファイルのアップロード、Satellite へのインポートを行ってから、アップロード要求を削除する方法を説明しています。この例は、サンプルのコンテンツ、ホスト名、ユーザー名、リポジトリー ID、ファイル名を使用している点に注意してください。

API の手順

  1. パッケージ名を変数 に割り当てます。

    $ export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm
    Copy to Clipboard Toggle word wrap
  2. ファイルのチェックサムを変数 チェックサム に割り当てます。

    $ export checksum=$(sha256sum $name|cut -c 1-65)
    Copy to Clipboard Toggle word wrap
  3. ファイルサイズを変数 サイズ に割り当てます。

    $ export size=$(du -bs $name|cut -f 1)
    Copy to Clipboard Toggle word wrap
  4. 以下のコマンドは、新しいアップロード要求を作成し、サイズチェックサム を使用して要求のアップロード ID を返します。

    要求例:

    $ curl \
    --header 'Content-Type: application/json' \
    --request POST \
    --user My_User_Name:My_Password \
    --data "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads
    Copy to Clipboard Toggle word wrap

    今回の場合は、76 はリポジトリー ID の例です。

    出力例

    {"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}
    Copy to Clipboard Toggle word wrap
  5. 変数 upload_id にアップロード ID を割り当てます。

    $ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
    Copy to Clipboard Toggle word wrap
  6. ファイルを 2MB のチャンクに分割します。

    $ split \
    --bytes 2MB \
    --numeric-suffixes \
    --suffix-length=1 \
    bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm bpftool
    Copy to Clipboard Toggle word wrap

    ファイルのチャンクを表示します。

    $ ls -l bpftool[0-9]
    Copy to Clipboard Toggle word wrap

    出力例:

    -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool0
    -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool1
    -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool2
    -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool3
    -rw-r--r--. 1 root root  868648 Mar 31 14:15 bpftool4
    Copy to Clipboard Toggle word wrap
  7. 分割ファイルの接頭辞を変数パスに割り当てます。

    $ export path=/root/tmp/bpftool
    Copy to Clipboard Toggle word wrap
  8. ファイルのチャンクをアップロードします。オフセットは、最初のチャンクの 0 バイトから始まり、ファイルごとに 2000000 バイトずつ増加します。offset パラメーターを使用して、ファイルサイズと関連付けている点に注意してください。また、インデックスはパス変数の後に使用されます (例: ${path}0、${path}1)。

    要求例:

    $ curl \
    --user My_User_Name:My_Password \
    --header Accept:application/json \
    --header Content-Type:multipart/form-data \
    --request PUT \
    --data-urlencode size=$size \
    --data-urlencode offset=0 \
    --data-urlencode content@${path}0 \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    
    $ curl \
    --user My_User_Name:My_Password \
    --header Accept:application/json \
    --header Content-Type:multipart/form-data \
    --request PUT \
    --data-urlencode size=$size \
    --data-urlencode offset=2000000 \
    --data-urlencode content@${path}1 \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    
    $ curl \
    --user My_User_Name:My_Password \
    --header Accept:application/json \
    --header Content-Type:multipart/form-data \
    --request PUT \
    --data-urlencode size=$size \
    --data-urlencode offset=4000000 \
    --data-urlencode content@${path}2 \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    
    $ curl \
    --user My_User_Name:My_Password \
    --header Accept:application/json \
    --header Content-Type:multipart/form-data \
    --request PUT \
    --data-urlencode size=$size \
    --data-urlencode offset=6000000
    --data-urlencode content@${path}3 \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    
    $ curl \
    --user My_User_Name:My_Password \
    --header Accept:application/json \
    --header Content-Type:multipart/form-data \
    --request PUT \
    --data-urlencode size=$size \
    --data-urlencode offset=8000000 \
    --data-urlencode content@${path}4 \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    Copy to Clipboard Toggle word wrap
  9. 完全なアップロードをリポジトリーにインポートします。

    $ curl \
    --header "Content-Type:application/json" \
    --request PUT \
    --user My_User_Name:My_Password \
    --data "{\"uploads\":[{\"id\": \"$upload_id\", \"name\": \"$name\", \"checksum\": \"$checksum\" }]}" \
    https://satellite.example.com/katello/api/v2/repositories/76/import_uploads
    Copy to Clipboard Toggle word wrap
  10. アップロード要求を削除します。

    $ curl \
    --header 'Content-Type: application/json' \
    --request DELETE \
    --user My_User_Name:My_Password \
    --data "{}" \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id
    Copy to Clipboard Toggle word wrap

6.3.2. 重複コンテンツのアップロード

API 経由で Satellite に重複したコンテンツをアップロードする代わりに、Satellite の既存のコンテンツを再利用できます。

API の手順

  • コンテンツを Satellite にアップロードします。

    $ curl \
    --header 'Content-Type: application/json' \
    --request POST \
    --user My_User_Name:My_Password \
    --data "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
    https://satellite.example.com/katello/api/v2/repositories/76/content_uploads
    Copy to Clipboard Toggle word wrap

    この呼び出しは、以下のようなアップロード ID ではなくコンテンツユニット ID を返します。

    {"content_unit_href":"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/"}
    Copy to Clipboard Toggle word wrap

    この出力をコピーし、インポートアップロードを直接呼び出して、コンテンツをリポジトリーに追加できます。

API 応答

$ curl \
--header "Content-Type:application/json" \
--request PUT \
--user My_User_Name:My_Password \
--data "{\"uploads\":[{\"content_unit_id\": \"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/\", \"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" \
https://satellite.example.com/katello/api/v2/repositories/76/import_uploads
Copy to Clipboard Toggle word wrap

呼び出しが upload_id の使用から content_unit_id の使用に変わることに注意してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat