Skip to content

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 を起動して明示的にシェルを起動します。

sudo /usr/bin/bash

Python 仮想環境を作成する為に venv をインストールしておきます。

apt update
apt install -y python3-venv

Python 仮想環境を作成し、スクリプトを配置するディレクトリを作成します。

mkdir -p /opt/cml-stopper/
cd /opt/cml-stopper/

Python 仮想環境を作成します。 配置予定のスクリプトは virl2_client に依存している為、これをインストールしておきます。

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install virl2_client

Python スクリプトとして扱うファイルを新規作成します。

touch cml-stopper.py
chmod 755 cml-stopper.py

内容は以下の通りです。

cml-stopper.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/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 設定用のファイルを作成します。

touch /etc/cron.d/cml-stopper

内容は以下の通りです。 今回は「毎週、月曜日の朝 4:00 に起動」するように設定しました。

/etc/cron.d/cml-stopper
0 4 * * 1 root /opt/cml-stopper/.venv/bin/python3 /opt/cml-stopper/cml-stopper.py

これで設定完了です。