上传软件映像
您必须是超级用户或网络管理员才能将软件映像上传到 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 和字节。