From bd588c773a757c447f754dc926c06123087b6b29 Mon Sep 17 00:00:00 2001 From: binary Date: Tue, 10 Nov 2020 22:34:09 +0100 Subject: Refactor vmm variables --- roles/vmm/files/init_vm_alpine.py | 115 +++++++++++++++++++++++++++++++++++++ roles/vmm/files/init_vm_alpine.yml | 115 ------------------------------------- roles/vmm/tasks/main.yml | 12 ++++ roles/vmm/tasks/set_facts.yml | 5 +- 4 files changed, 131 insertions(+), 116 deletions(-) create mode 100644 roles/vmm/files/init_vm_alpine.py delete mode 100644 roles/vmm/files/init_vm_alpine.yml (limited to 'roles/vmm') diff --git a/roles/vmm/files/init_vm_alpine.py b/roles/vmm/files/init_vm_alpine.py new file mode 100644 index 0000000..d9dc0d5 --- /dev/null +++ b/roles/vmm/files/init_vm_alpine.py @@ -0,0 +1,115 @@ +#!/bin/python3 + +import serial +import subprocess +import sys +import os + +from serial_macro import * + +USAGE = f"USAGE: {sys.argv[0]} vm_guest gate ip mask ssh_key" + +def init_network(): + send_cmds(ser, [ + [1, "setup-interfaces"], + [1, ""], + [1, f"{IP}"], + [1, f"{MASK}"], + [1, f"{GATE}"], + [1, "no"], + [1, "ifdown -a"], + [10, "ifup -a"], + [1, "rc-update add networking"] + ]) + + +def init_dns(): + send_cmds(ser, [ + [1, f"setup-dns"], + [1, ""], + [1, f"{DNS}"], + ]) + + +def init_disk(): + send_cmds(ser, [ + [10, "apk add e2fsprogs sfdisk syslinux"], + [1, "setup-disk"], + [1, ""], + [10, "sys"], + [30, "y"], + ]) + + +def init_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"] + ]) + +def init_packages(): + send_cmds(ser, [ + [1, "echo https://mirror.ungleich.ch/mirror/packages/alpine/latest-stable/main/ > /etc/apk/repositories "], + [5, "apk update"] + ]) + + +def main(): + + global ser + global IP + global GATE + global MASK + global DNS + global SSHKEY + + 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") + # first boot :: live + init_network() + init_dns() + init_packages() + init_disk() + send_cmd(ser, 70, "reboot") + ser.close() + + ser = serial.Serial(COM, BAUD, timeout=TIMEOUT) + send_cmd(ser, 1, "root") + # second boot :: disk + init_network() + init_dns() + init_ssh() + init_packages() + ser.close() + + +if __name__ == "__main__": + main() diff --git a/roles/vmm/files/init_vm_alpine.yml b/roles/vmm/files/init_vm_alpine.yml deleted file mode 100644 index d9dc0d5..0000000 --- a/roles/vmm/files/init_vm_alpine.yml +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/python3 - -import serial -import subprocess -import sys -import os - -from serial_macro import * - -USAGE = f"USAGE: {sys.argv[0]} vm_guest gate ip mask ssh_key" - -def init_network(): - send_cmds(ser, [ - [1, "setup-interfaces"], - [1, ""], - [1, f"{IP}"], - [1, f"{MASK}"], - [1, f"{GATE}"], - [1, "no"], - [1, "ifdown -a"], - [10, "ifup -a"], - [1, "rc-update add networking"] - ]) - - -def init_dns(): - send_cmds(ser, [ - [1, f"setup-dns"], - [1, ""], - [1, f"{DNS}"], - ]) - - -def init_disk(): - send_cmds(ser, [ - [10, "apk add e2fsprogs sfdisk syslinux"], - [1, "setup-disk"], - [1, ""], - [10, "sys"], - [30, "y"], - ]) - - -def init_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"] - ]) - -def init_packages(): - send_cmds(ser, [ - [1, "echo https://mirror.ungleich.ch/mirror/packages/alpine/latest-stable/main/ > /etc/apk/repositories "], - [5, "apk update"] - ]) - - -def main(): - - global ser - global IP - global GATE - global MASK - global DNS - global SSHKEY - - 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") - # first boot :: live - init_network() - init_dns() - init_packages() - init_disk() - send_cmd(ser, 70, "reboot") - ser.close() - - ser = serial.Serial(COM, BAUD, timeout=TIMEOUT) - send_cmd(ser, 1, "root") - # second boot :: disk - init_network() - init_dns() - init_ssh() - init_packages() - ser.close() - - -if __name__ == "__main__": - main() diff --git a/roles/vmm/tasks/main.yml b/roles/vmm/tasks/main.yml index 9011497..81ddafc 100644 --- a/roles/vmm/tasks/main.yml +++ b/roles/vmm/tasks/main.yml @@ -3,6 +3,18 @@ --- +- name: Check that iso directory exists + file: + path: "{{ vmm.iso_dir }}" + state: directory + recurse: true + +- name: Check that disk directory exists + file: + path: "{{ vmm.disk_dir }}" + state: directory + recurse: true + - name: Download all iso files include: download_iso.yml iso={{ item }} with_items: "{{ vmm.iso }}" diff --git a/roles/vmm/tasks/set_facts.yml b/roles/vmm/tasks/set_facts.yml index 5263d06..a38a63d 100644 --- a/roles/vmm/tasks/set_facts.yml +++ b/roles/vmm/tasks/set_facts.yml @@ -3,12 +3,15 @@ --- +- set_fact: + disk_file: "{{ vmm.disk_dir }}/{{ guest }}.{{ vmm.disk_format }}" + when: guest is defined + - set_fact: iso_latest: "{{ vmm.iso_dir }}/{{ vmm.iso[iso].name }}-latest.iso" when: iso is defined - set_fact: - disk_file: "{{ vmm.disk_dir }}/{{ guest }}.{{ vmm.disk_format }}" iso_file: "{{ iso_latest | regex_replace('latest', vmm.iso[iso].version) }}" iso_url: "{{ vmm.iso[iso].url \ | regex_replace('VERSIONDIR', vmm.iso[iso].versiondir) \ -- cgit v1.2.3