ソフトウェアイメージのアップロード
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にアップロードされたソフトウェアを使用して、デバイスにインストールされているイメージをアップグレードできます。「 ソフトウェアのアップグレード 」または 「デバイス イメージのアップグレード」を参照してください。