Scrapli を非同期実行するサンプル
以前に ネットワーク機器の操作を自動化する scrapli の基本的な使い方 というメモを書きました。 Scrapli を非同期処理する例は scrapli/examples/async_usage/async_multiple_connections.py にあります。 これを「不要な警告を表示しない」等、多少修正したスクリプト例をメモしておきます。
#!/usr/bin/env python3
import asyncio
import warnings
from scrapli.driver.core import AsyncIOSXEDriver
warnings.filterwarnings("ignore")
ADDRESSES = ["10.0.0.1", "10.0.0.2", "10.0.0.3"]
USERNAME = "admin"
PASSWORD = "password"
async def execute_command(device):
driver = device.pop("driver")
conn = driver(**device)
await conn.open()
prompt_result = await conn.get_prompt()
version_result = await conn.send_command("show clock")
await conn.close()
return prompt_result, version_result
async def main():
devices = []
for address in ADDRESSES:
devices.append(
{
"host": address,
"auth_username": USERNAME,
"auth_password": PASSWORD,
"auth_strict_key": False,
"transport": "asyncssh",
"driver": AsyncIOSXEDriver,
}
)
coroutines = [execute_command(device) for device in devices]
results = await asyncio.gather(*coroutines)
for result in results:
print(f"device prompt: {result[0]}")
print(f"device result: {result[1].result}")
if __name__ == "__main__":
asyncio.run(main())
実行例は以下の通りです。