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