ソフトウェアイメージのアップロード
Paragon Automationにソフトウェアイメージをアップロードするには、スーパーユーザーまたはネットワーク管理者である必要があります。
ソフトウェアイメージをアップロードする前に、必要なソフトウェアイメージが ジュニパーのソフトウェアダウンロード ページからローカルシステムにダウンロードされていることを確認してください。
ソフトウェアイメージをアップロードするには、次の手順に従います。
| フィールド | の説明 |
|---|---|
| 表示名 |
ソフトウェア イメージ名を入力または変更します。 [表示名] フィールドには、アップロードしたファイルの名前が自動的に入力されます。アップロードされたソフトウェア イメージ ファイルの名前が命名基準を満たさない場合は、名前を変更または入力できます。 名前に使用できるのは、英数字、ハイフン、ピリオド、アンダースコアのみで、最大長は 254 文字です。 |
| 形容 |
ソフトウェア イメージ ファイルの説明を入力します。 |
| 売り手 |
ドロップダウンリストからデバイスのベンダーを選択します。 Paragon Automation は デバイスの のみサポートしています。 |
| デバイスシリーズ |
ドロップダウンリストからデバイスのモデルを選択します。 |
| 解放 |
OSのリリース番号を入力します。 リリース番号は、バージョン内のバグやパフォーマンスの問題に対処するマイナーソフトウェアアップデートを示します。 たとえば、Junos OS Evolved 22.3R1 などです。 |
| バージョン |
OSのバージョン番号を入力します。 バージョン番号は、四半期ごとにリリースされるメジャーソフトウェアアップデートを示します。 たとえば、Junos OS 23.1 などです。 |
| 想定される SHA256 |
アップロードされたデータを検証するために、予想されるチェックサム SHA256 を指定します。 イメージとそのSHA256は、 ジュニパーソフトウェアのダウンロード ページから入手できます。 [ソフトウェアのダウンロード] ページで、[ 製品の検索 ] ボックスからデバイスを選択します。[ Install Package ] セクションをクリックして展開し、リリースのソフトウェア パッケージとチェックサムを選択します。 |
| リリースノートリンク |
リリースノートへのリンクを提供します。 リリースノートへのリンクは、 ジュニパーのソフトウェアダウンロード ページにあります。 [ソフトウェアのダウンロード] ページで、[ 製品の検索 ] ボックスからデバイスを選択します。[ ドキュメントとリリースノート ]セクションをクリックして展開し、リリースのリリースノートリンクを見つけます。 |
以下は、ソフトウェアイメージを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
ソフトウェアイメージのアップロード用のVMディスク容量の増加
イメージアップロードのデフォルトのクォータは、Ceph ディスクの合計サイズを 3 で割った 25% に制限されています。たとえば、VM ごとに推奨される最小 50G の Ceph ディスク容量を使用している場合、イメージのアップロードのクォータは約 16 GB です。
イメージのアップロード中にエラーが発生したというメッセージが表示された場合は、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とバイトで示します。
Paragon Automationにアップロードされたソフトウェアを使用して、デバイスにインストールされているイメージをアップグレードできます。「 ソフトウェアのアップグレード 」または 「デバイス イメージのアップグレード」を参照してください。