diff options
Diffstat (limited to 'roles/vmm/files')
-rw-r--r-- | roles/vmm/files/init_vm_serial.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/roles/vmm/files/init_vm_serial.py b/roles/vmm/files/init_vm_serial.py new file mode 100644 index 0000000..46e34d7 --- /dev/null +++ b/roles/vmm/files/init_vm_serial.py @@ -0,0 +1,88 @@ +#!/bin/python3 + +import serial +import subprocess +import sys +import os + +import time + + +USAGE = f"USAGE: {sys.argv[0]} vm_guest gate ip mask ssh_key" + + +def send_cmd(ser, delay, cmd): + ser.write(f"{cmd}\n".encode("utf-8")) + time.sleep(delay) + +def send_cmds(ser, cmds): + for cmd in cmds: + send_cmd(ser, cmd[0], cmd[1]) + + +def main(): + + COM = "/dev/" + BAUD = 115200 + TIMEOUT = 1 + + if len(sys.argv) != 7: + sys.stderr.write(USAGE) + sys.exit(1) + + GUEST = "vm-tmp" + HOST = sys.argv[1] + + cmd = f"vmctl show | grep {GUEST} | tr -s ' ' | cut -d ' ' -f7" + _buffer = subprocess.check_output(cmd, shell=True).decode().rstrip() + print(_buffer) + + if _buffer == "": + sys.exit(1) + COM += _buffer + + IP = sys.argv[2] + GATE = sys.argv[3] + MASK = sys.argv[4] + DNS = sys.argv[5] + SSHKEY = sys.argv[6] + + ser = serial.Serial(COM, BAUD, timeout=TIMEOUT) + + send_cmd(ser, 1, "root") + + # virtual interface + send_cmds(ser, [ + [1, "setup-interfaces"], + [1, ""], + [1, f"{IP}"], + [1, f"{MASK}"], + [1, f"{GATE}"], + [1, "no"], + [1, "ifdown -a"], + [10, "ifup -a"] + ]) + + # dns + send_cmds(ser, [ + [1, "setup-dns"], + [1, f"{HOST}"], + [1, f"{DNS}"] + ]) + + # ssh + send_cmds(ser, [ + [5, "apk add openssh"], + [1, "mkdir /root/.ssh"], + [1, f"echo '{SSHKEY}' > /root/.ssh/authorized_keys"], + [1, f"echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config"], + [1, "/etc/init.d/sshd restart"] + ]) + + ser.close() + + print(COM) + + +if __name__ == "__main__": + main() |