Python で CML 上のラボを定期的に自動停止する
以前に以下のメモを書きました。
現状の CML には定期的にラボを自動停止する機能は無く、気がつくと「起動したままのラボ」が乱立している場合があります。 今回は Python + cron で定期的に CML 上のラボを自動停止する方法をメモします。
検証環境¶
| 対象 | バージョン |
|---|---|
| Cisco CML | 2.8.0+build.6 |
| Ubuntu | 24.04.1 LTS |
今回、検証に利用した CML 2.8.0 のベース OS は Ubuntu 24.04.1 LTS でした。
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
Python 仮想環境を作成する¶
まず CML へ SSH 接続します。 TCP/22 はコンソールサーバが Listen している為、TCP/1022 へ SSH 接続します。 SSH 接続出来たら root ユーザへ昇格します。 CML の root ユーザはログインシェルが nologin に設定されている為、sudo su - してもシェルが起動しません。 その為、sudo /usr/bin/bash を起動して明示的にシェルを起動します。
Python 仮想環境を作成する為に venv をインストールしておきます。
Python 仮想環境を作成し、スクリプトを配置するディレクトリを作成します。
Python 仮想環境を作成します。 配置予定のスクリプトは virl2_client に依存している為、これをインストールしておきます。
Python スクリプトとして扱うファイルを新規作成します。
内容は以下の通りです。
cml-stopper.py
#!/usr/bin/env python3
from virl2_client import ClientLibrary
HOST = "localhost"
USER = "admin"
PASS = "password"
cml = ClientLibrary(url=HOST, username=USER, password=PASS, ssl_verify=False)
cml.is_system_ready(wait=True)
for lab in cml.all_labs():
lab.stop()
cron でスケジュール設定を行う¶
作成した Python スクリプトをスケジューリングして自動実行させる為に cron の設定を行います。 cron 設定用のファイルを作成します。
内容は以下の通りです。 今回は「毎週、月曜日の朝 4:00 に起動」するように設定しました。
/etc/cron.d/cml-stopper
0 4 * * 1 root /opt/cml-stopper/.venv/bin/python3 /opt/cml-stopper/cml-stopper.py
これで設定完了です。