5.3. 将内容上传到 Satellite 服务器
本节概述了如何使用 Satellite 6 API 上传和导入大型文件到 Satellite 服务器。这个过程涉及四个步骤:
- 创建上传请求。
- 上传内容。
- 导入内容。
- 删除上传请求。
您可以上传的最大文件大小为 2MB。有关上传较大的内容的详情,请参考 上传大于 2 MB 的内容。
流程
为变量
name
分配软件包名称:请求示例:
$ export name=jq-1.6-2.el7.x86_64.rpm
将文件的校验和分配给变量
checksum
:请求示例:
$ export checksum=$(sha256sum $name|cut -c 1-65)
将文件大小分配给变量
大小
:请求示例:
$ export size=$(du -bs $name|cut -f 1)
以下命令创建一个新的上传请求,并使用
大小和
校验和
返回请求的上传 ID。请求示例:
$ curl -H 'Content-Type: application/json' -X POST -k \ -u sat_username:sat_password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads
其中 76,本例中为 Repository ID 示例。
请求示例:
{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}
将上传 ID 分配给变量
upload_id
:请求示例:
$ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
分配您要上传到变量
路径 的软件包路径
:$ export path=/root/jq/jq-1.6-2.el7.x86_64.rpm
上传您的内容。在上传数据时,确保使用正确的 MIME 类型。API 将 application/json MIME 类型用于对 Satellite 6 的大多数请求。组合 upload_id、MIME 类型和其他参数以上传内容。
请求示例:
$ curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data -X PUT --data-urlencode size=$size --data-urlencode offset=0 \ --data-urlencode content@${path} \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id
将内容上传到 Satellite 服务器后,您需要将其导入到相应的存储库。在完成此步骤前,Satellite 服务器不会检测到新内容。
请求示例:
$ curl -H "Content-Type:application/json" -X PUT -u \ sat_username:sat_password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" \ https://$(hostname -f)/katello/api/v2/repositories/76/import_uploads
成功上传并导入内容后,您可以删除上传请求。这会在上传过程中释放数据使用的任何临时磁盘空间。
请求示例:
$ curl -H 'Content-Type: application/json' -X DELETE -k \ -u sat_username:sat_password -d "{}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id
上传大于 2 MB 的内容
以下示例演示了如何将大型文件分成块,创建一个上传请求,上传单个文件,将它们导入到 Satellite,然后删除上传请求。请注意,本示例使用示例内容、主机名、用户名、存储库 ID 和文件名。
为变量
name
分配软件包名称:$ export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm
将文件的校验和分配给变量
checksum
:$ export checksum=$(sha256sum $name|cut -c 1-65)
将文件大小分配给变量
大小
:$ export size=$(du -bs $name|cut -f 1)
以下命令创建一个新的上传请求,并使用
大小和
校验和
返回请求的上传 ID。请求示例:
$ curl -H 'Content-Type: application/json' -X POST -k \ -u sat_username:sat_password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads
其中 76,本例中为 Repository ID 示例。
输出示例
{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}
将上传 ID 分配给变量
upload_id
:$ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
以 2MB 块分割文件:
$ split --bytes 2MB --numeric-suffixes \ --suffix-length=1 bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm bpftool
输出示例
$ ls bpftool[0-9] -l -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
将分割文件的前缀分配给变量路径。
$ export path=/root/tmp/bpftool
上传文件块。对于第一个块,偏移从 0 开始,并为每个文件增加 2000000。请注意,使用 offset 参数及其与文件大小的关系。另请注意,索引会在路径变量后使用,如 ${path}0, ${path}1。
请求示例:
$ curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data \ -X PUT --data-urlencode size=$size --data-urlencode offset=0 \ --data-urlencode content@${path}0 https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id $ curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data \ -X PUT --data-urlencode size=$size --data-urlencode offset=2000000 \ --data-urlencode content@${path}1 https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id $ curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data \ -X PUT --data-urlencode size=$size --data-urlencode offset=4000000 \ --data-urlencode content@${path}2 https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id $curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data \ -X PUT --data-urlencode size=$size --data-urlencode offset=6000000 --data-urlencode content@${path}3 https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id $ curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data \ -X PUT --data-urlencode size=$size --data-urlencode offset=8000000 \ --data-urlencode content@${path}4 https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id
将完整上传导入到存储库:
$ curl -H "Content-Type:application/json" -X PUT -u \ sat_username:sat_password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \ \"name\": \"$name\", \"checksum\": \"$checksum\" }]}" \ https://$(hostname -f)/katello/api/v2/repositories/76/import_uploads
删除上传请求:
$ curl -H 'Content-Type: application/json' -X DELETE -k \ -u sat_username:sat_password -d "{}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id
上传重复内容
请注意,如果您尝试使用以下方法上传重复内容:
请求示例:
$ curl -H 'Content-Type: application/json' -X POST -k \
-u sat_username:sat_password -d "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads
调用将返回内容单元 ID 而不是上传 ID,如下所示:
{"content_unit_href":"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/"}
您可以复制此输出并直接调用导入上传,将内容添加到存储库中:
请求示例:
$ curl -H "Content-Type:application/json" -X PUT -u \
sat_username:sat_password -k \-d \
"{\"uploads\":[{\"content_unit_id\": \"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/\", \
\"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" https://$(hostname -f)/katello/api/v2/repositories/76/import_uploads
请注意,调用将从 使用 upload_id
更改为使用 content_unit_id
。