Skip to content

Python で CML 上のノードのラベル / CPU / メモリ / X / Y 座標を変更するサンプル

以前に Python で CML 上のノードの X / Y 座標を変更するサンプル というメモを書きました。 X / Y 座標だけで無く、下記も修正出来るようにしました。 指定可能なオプションは以下です。

オプション 変更出来る値
-n 変更対象の No. を指定 (必須)
-l ラベル (画面表示上の名前)
-c CPU の数
-r メモリの搭載量 (MB)
-x X 座標
-y Y 座標

サンプルスクリプト

サンプルスクリプトは以下です。 CML のログイン情報は以前のメモを参照してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env python3

import argparse
import os

from tabulate import tabulate
from virl2_client import ClientLibrary


def get_property(property: str):
    path = os.path.expanduser("~")
    virlrc = os.path.join(path, ".virlrc")
    if os.path.isfile(virlrc):
        with open(virlrc) as fh:
            config = fh.readlines()

        for line in config:
            if line.startswith(property):
                prop = line.split("=")[1].strip()
                if prop.startswith('"') and prop.endswith('"'):
                    prop = prop[1:-1]
                return prop


def get_nodes(args: argparse.ArgumentParser, cml: ClientLibrary):
    data = []
    index = 0
    for lab in cml.all_labs():
        for node in lab.nodes():
            index += 1
            if args.no == str(index):
                if args.label != None:
                    node.label = args.label
                if args.cpu != None:
                    node.cpus = int(args.cpu)
                if args.ram != None:
                    node.ram = int(args.ram)
                if args.x != None:
                    node.x = int(args.x)
                if args.y != None:
                    node.y = int(args.y)
            data.append(
                [
                    index,
                    lab.title,
                    node.label,
                    node.node_definition,
                    node.cpus,
                    node.ram,
                    node.x,
                    node.y,
                ]
            )
    print(
        tabulate(
            data,
            headers=["No", "Lab", "Node", "Definition", "CPU", "RAM", "X", "Y"],
        )
    )


def main():
    parser = argparse.ArgumentParser(description="Adjust the position of the node.")
    parser.add_argument("-n", "--no", help="Number")
    parser.add_argument("-l", "--label", help="Label")
    parser.add_argument("-c", "--cpu", help="CPUs")
    parser.add_argument("-r", "--ram", help="RAM (MB)")
    parser.add_argument("-x", help="X")
    parser.add_argument("-y", help="Y")
    args = parser.parse_args()

    address = get_property("VIRL_HOST")
    username = get_property("VIRL_USERNAME")
    password = get_property("VIRL_PASSWORD")
    verify = True
    if get_property("CML_VERIFY_CERT").lower() == "false":
        verify = False
    cml = ClientLibrary(address, username, password, verify)
    cml.is_system_ready(wait=True)
    get_nodes(args, cml)


if __name__ == "__main__":
    main()