6.3. 将内容上传到 Satellite 服务器


您可以使用 Satellite API 将大型文件上传并导入到您的 Satellite 服务器。这个过程涉及四个步骤:

  1. 创建上传请求。
  2. 上传内容。
  3. 导入内容。
  4. 删除上传请求。

您可以上传的最大文件大小为 2 MB。有关上传大量内容的详情,请参考 API 流程

流程

  1. 为变量 name 分配软件包名称:

    请求示例:

    $ export name=jq-1.6-2.el7.x86_64.rpm
    Copy to Clipboard Toggle word wrap
  2. 将文件的校验和分配给变量 checksum

    请求示例:

    $ 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,本例中为 Repository ID 示例。

    请求示例:

    {"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}
    Copy to Clipboard Toggle word wrap
  5. 将上传 ID 分配给变量 upload_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 服务器后,您需要将它导入到适当的存储库中。在完成此步骤前,Satellite 服务器不会检测到新内容。

    请求示例:

    $ 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. 为变量 name 分配软件包名称:

    $ export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm
    Copy to Clipboard Toggle word wrap
  2. 将文件的校验和分配给变量 checksum

    $ 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,本例中为 Repository ID 示例。

    输出示例

    {"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}
    Copy to Clipboard Toggle word wrap
  5. 将上传 ID 分配给变量 upload_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. 上传重复内容

您可以重复使用 Satellite 中的现有内容,而不是通过 API 将重复内容上传到 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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat