aboutsummaryrefslogblamecommitdiffstats
path: root/roles/vmm/files/init_vm_serial.py
blob: 46e34d7a5708a253b9c4216d6d2d8d29fc834e6d (plain) (tree)























































































                                                                        
#!/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()
remember that computers suck.