6.3. Satellite Server へのコンテンツのアップロード
Satellite API を使用して、大きなファイルを Satellite Server にアップロードおよびインポートできます。このプロセスでは、4 つの手順が含まれます。
- アップロード要求を作成します。
- コンテンツをアップロードします。
- コンテンツをインポートします。
- アップロード要求を削除します。
アップロードできるファイルの最大サイズは 2 MB です。大容量のコンテンツのアップロードに関する情報は、2 MB よりも大きいコンテンツのアップロード を参照してください。
手順
パッケージ名を変数
名に割り当てます。要求例:
export name=jq-1.6-2.el7.x86_64.rpm
$ export name=jq-1.6-2.el7.x86_64.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルのチェックサムを変数
チェックサムに割り当てます。要求例:
export checksum=$(sha256sum $name|cut -c 1-65)
$ export checksum=$(sha256sum $name|cut -c 1-65)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルサイズを変数
サイズに割り当てます。要求例:
export size=$(du -bs $name|cut -f 1)
$ export size=$(du -bs $name|cut -f 1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow sizeとchecksumを使用して、リクエストのアップロード ID を返すアップロードリクエストを作成します。要求例:
curl -H 'Content-Type: application/json' -X POST -k \ -u My_User_Name:My_Password \ -d "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploads$ curl -H 'Content-Type: application/json' -X POST -k \ -u My_User_Name:My_Password \ -d "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 今回の場合は、76 はリポジトリー ID の例です。
要求例:
{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変数
upload_idにアップロード ID を割り当てます。export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
$ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4Copy to Clipboard Copied! Toggle word wrap Toggle overflow アップロードするパッケージのパスを変数
パスに割り当てます。export path=/root/jq/jq-1.6-2.el7.x86_64.rpm
$ export path=/root/jq/jq-1.6-2.el7.x86_64.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテンツをアップロードします。データのアップロード時には、正しい MIME タイプを使用していることを確認します。特に明記しない限り、API は Satellite へのリクエストに
application/jsonMIME タイプを使用します。アップロード ID、MIME タイプ、その他のパラメーターを組み合わせてコンテンツをアップロードします。要求例:
curl -u My_User_Name:My_Password -H Accept:application/json -H \ 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$ curl -u My_User_Name:My_Password -H Accept:application/json -H \ 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_idCopy to Clipboard Copied! Toggle word wrap Toggle overflow Satellite Server にコンテンツをアップロードした後に、適切なリポジトリーにそのコンテンツをインポートする必要があります。この手順を完了するまで、Satellite Server ではこの新しいコンテンツは認識されません。
要求例:
curl -H "Content-Type:application/json" -X PUT -u \ My_User_Name:My_Password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" \ https://satellite.example.com/katello/api/v2/repositories/76/import_uploads$ curl -H "Content-Type:application/json" -X PUT -u \ My_User_Name:My_Password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" \ https://satellite.example.com/katello/api/v2/repositories/76/import_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテンツのアップロードおよびインポートが正常に完了したら、アップロード要求を削除することができます。削除することで、アップロード中にデータが使用した一時的なディスク領域を解放することができます。
要求例:
curl -H 'Content-Type: application/json' -X DELETE -k \ -u My_User_Name:My_Password -d "{}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id$ curl -H 'Content-Type: application/json' -X DELETE -k \ -u My_User_Name:My_Password -d "{}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_idCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2 MB よりも大きいコンテンツのアップロード
以下の例では、大容量のファイルを複数のチャンクに分割して、アップロード要求の作成、個別ファイルのアップロード、Satellite へのインポートを行ってから、アップロード要求を削除する方法を説明しています。この例は、サンプルのコンテンツ、ホスト名、ユーザー名、リポジトリー ID、ファイル名を使用している点に注意してください。
パッケージ名を変数
名に割り当てます。export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm
$ export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルのチェックサムを変数
チェックサムに割り当てます。export checksum=$(sha256sum $name|cut -c 1-65)
$ export checksum=$(sha256sum $name|cut -c 1-65)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルサイズを変数
サイズに割り当てます。export size=$(du -bs $name|cut -f 1)
$ export size=$(du -bs $name|cut -f 1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドは、新しいアップロード要求を作成し、
sizeとchecksumを使用して要求のアップロード ID を返します。要求例:
curl -H 'Content-Type: application/json' -X POST -k \ -u My_User_Name:My_Password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploads$ curl -H 'Content-Type: application/json' -X POST -k \ -u My_User_Name:My_Password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 今回の場合は、76 はリポジトリー ID の例です。
出力例
{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変数
upload_idにアップロード ID を割り当てます。export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
$ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルを 2MB のチャンクに分割します。
split --bytes 2MB --numeric-suffixes \ --suffix-length=1 bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm bpftool
$ split --bytes 2MB --numeric-suffixes \ --suffix-length=1 bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm bpftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分割ファイルの接頭辞を変数パスに割り当てます。
export path=/root/tmp/bpftool
$ export path=/root/tmp/bpftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルのチャンクをアップロードします。オフセットは、最初のチャンクの 0 バイトから始まり、ファイルごとに 2000000 バイトずつ増加します。offset パラメーターを使用して、ファイルサイズと関連付けている点に注意してください。また、インデックスはパス変数の後に使用されます (例: ${path}0、${path}1)。
要求例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 完全なアップロードをリポジトリーにインポートします。
curl -H "Content-Type:application/json" -X PUT -u \ My_User_Name:My_Password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \ \"name\": \"$name\", \"checksum\": \"$checksum\" }]}" \ https://satellite.example.com/katello/api/v2/repositories/76/import_uploads$ curl -H "Content-Type:application/json" -X PUT -u \ My_User_Name:My_Password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \ \"name\": \"$name\", \"checksum\": \"$checksum\" }]}" \ https://satellite.example.com/katello/api/v2/repositories/76/import_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow アップロード要求を削除します。
curl -H 'Content-Type: application/json' -X DELETE -k \ -u My_User_Name:My_Password -d "{}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_id$ curl -H 'Content-Type: application/json' -X DELETE -k \ -u My_User_Name:My_Password -d "{}" \ https://satellite.example.com/katello/api/v2/repositories/76/content_uploads/$upload_idCopy to Clipboard Copied! Toggle word wrap Toggle overflow
重複コンテンツのアップロード
以下を使用して重複したコンテンツをアップロードしようとすると、以下の点に留意してください。
要求例:
curl -H 'Content-Type: application/json' -X POST -k \
-u My_User_Name:My_Password -d "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
https://satellite.example.com/katello/api/v2/repositories/76/content_uploads
$ curl -H 'Content-Type: application/json' -X POST -k \
-u My_User_Name:My_Password -d "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
https://satellite.example.com/katello/api/v2/repositories/76/content_uploads
この呼び出しは、以下のようなアップロード ID ではなくコンテンツユニット ID を返します。
{"content_unit_href":"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/"}
{"content_unit_href":"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/"}
この出力をコピーし、インポートアップロードを直接呼び出して、コンテンツをリポジトリーに追加できます。
要求例:
curl -H "Content-Type:application/json" -X PUT -u \
My_User_Name:My_Password -k \-d \
"{\"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
$ curl -H "Content-Type:application/json" -X PUT -u \
My_User_Name:My_Password -k \-d \
"{\"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
呼び出しが upload_id の使用から content_unit_id の使用に変わることに注意してください。