上传软件映像
您必须是超级用户或网络管理员才能将软件映像上传到 Paragon Automation。
在上传软件映像之前,请确保您已从 瞻博网络软件下载 页面将所需的软件映像下载到本地系统。
要上传软件映像:
字段 | 说明 |
---|---|
显示名称 |
输入或修改软件映像名称。 “显示名称”字段会自动填充您上传的文件的名称。如果上传的软件镜像文件名称不符合命名条件,可以修改或输入名称。 名称只能包含字母数字字符、连字符、句点、下划线,允许的最大长度为 254 个字符。 |
描述 |
输入软件映像文件的说明。 |
供应商 |
从下拉列表中选择设备的供应商。 Paragon Automation 仅支持瞻博网络设备。 |
设备系列 |
从下拉列表中选择设备的型号。 |
释放 |
输入操作系统的版本号。版本号表示用于解决版本中的错误和性能问题的次要软件更新。 例如,Junos OS 演化版 22.3R1。 |
版本 |
输入操作系统的版本号。版本号表示每年每季度发布一次的主要软件更新。 例如,Junos OS 23.1。 |
预期 SHA256 |
提供预期的校验和 SHA256 来验证上传的数据。 映像及其 SHA256 可从 瞻博网络软件下载 页面获取。 在“软件下载”页面上,从“ 查找产品 ”框中选择设备。单击并展开 “安装包” 部分,然后选择该版本的软件包和校验和。 |
发行说明链接 |
提供发行说明的链接。 您可以在 瞻博网络软件下载 页面上找到发行说明的链接。 在“软件下载”页面上,从“ 查找产品 ”框中选择设备。单击并展开 “文档和发行说明 ”部分,找到该版本的发行说明链接。 |
以下是将软件映像上传到 Paragon Automation 的示例脚本。为以下内容输入适当的值:
-
host
- 要从中将软件映像上传到 Paragon Automation 的服务器的主机名。 -
user
- 用于访问服务器的用户名。 -
password
- 用于访问服务器的密码。 -
image-filename
- 要上传的软件映像的名称。 -
path
- 软件映像存储在服务器上的路径。
import base64 import hashlib import json import requests URL = 'https://<host>/api/v1/devicesoftware/' USER = '<user>' PASSWORD = '<password>' ORG_ID = 'ff118da5-000a-483c-91a1-45d478478548' MIN_SIZE = 5 * 1024 * 1024 FILENAME = '<image_filename>' DIRECTORY = '<path>' def file_sha(contents): h = hashlib.sha256() data = contents.read(MIN_SIZE) while data: h.update(data) data = contents.read(MIN_SIZE) return h.hexdigest() def print_sw_images(): response = requests.get(URL + ORG_ID + '/images', auth=(USER, PASSWORD), verify=False) images = decode(response) print('There are %d images' % len(images)) for img in images: print(img.get('name')) def decode(response): if response.status_code != 200: print(response.status_code) print(response.text) exit(1) return json.loads(response.text) def upload(file_name: str, data, file_sha256: str, vendor: str, series: str, release: str, version: str): headers = {'Content-Type': 'application/json'} url = URL + ORG_ID + '/upload' response = requests.post(url, auth=(USER, PASSWORD), headers=headers, verify=False, json={ 'name': file_name, 'expected_sha256': file_sha256, 'device_vendor': vendor, 'device_series_list': [series], 'release': release, 'version': version, }) r = decode(response) upload_id = r.get('id') print('Uploading %s' % upload_id) url = url + '/' + upload_id file_slice = read_min(data) while file_slice: encoded = base64.b64encode(file_slice).decode('utf-8') response = requests.put(url, auth=(USER, PASSWORD), headers=headers, verify=False, json={ 'file_data': 'data:application/octet-stream;base64,' + encoded }) msg = decode(response) print(msg) file_slice = read_min(data) response = requests.put(url, auth=(USER, PASSWORD), headers=headers, verify=False, json={ "complete": True }) msg = decode(response) print(msg) def read_min(file): ret = b'' while len(ret) < MIN_SIZE: file_slice = file.read(MIN_SIZE) ret = ret + file_slice if not file_slice: break return ret if __name__ == '__main__': print_sw_images() with open(DIRECTORY + FILENAME, 'rb') as iso: sha = file_sha(iso) print(sha) with open(DIRECTORY + FILENAME, 'rb') as iso: upload(FILENAME, iso, sha, 'Juniper', 'ACX7100', '22.2R1.12-EVO', '22.2') print_sw_images()
此需求文件可用于安装任何必要的依赖项 -
requests==2.28.1
增加用于软件映像上传的虚拟机磁盘空间
镜像上传的默认配额限制为 Ceph 磁盘总大小的 25% 除以 3。例如,如果每个虚拟机使用建议的最小 50G Ceph 磁盘空间,则映像上传的配额约为 16GB。
如果您收到一条消息,指出上传映像时出错,请在 Paragon Automation 集群的安装程序节点中执行以下命令,将 Ceph 对象存储守护程序 (OSD) 池的最大大小增加到更高的值(例如 20G):
root@controller-1:~# kubectl patch cephobjectstore -n rook-ceph object-store --type=merge -p '{"spec": {"dataPool": {"quotas": {"maxSize": "20Gi"}}}}' cephobjectstore.ceph.rook.io/object-store patched
要确认 Ceph OSD 池大小已增加到 20GiB,请执行以下命令:
root@controller-65:~# kubectl exec -ti -n rook-ceph $(kubectl get po -n rook-ceph -l app=rook-ceph-tools -o jsonpath={..metadata.name}) -- ceph osd pool get-quota object-store.rgw.buckets.data quotas for pool 'object-store.rgw.buckets.data': max objects: N/A max bytes : 20 GiB (current num bytes: 15459654543 bytes)
表示 max bytes
Ceph OSD 池大小,单位为 GiB 和字节。