From 02d3d8e80519c9fcdbd0bc2d67b9d1d2e793b143 Mon Sep 17 00:00:00 2001 From: Christian Rebischke Date: Fri, 9 Aug 2019 02:29:47 +0200 Subject: [PATCH 1/4] added python script to increase failure-tolerance Signed-off-by: Christian Rebischke --- controller.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 controller.py diff --git a/controller.py b/controller.py new file mode 100644 index 0000000..cb893e2 --- /dev/null +++ b/controller.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python +#-*- encoding; utf-8 -*- +# +# Author: Christian Rebischke +# This file is licensed under GPLv3 + +try: + import urllib.request + import json + import datetime + import sys + import subprocess + import os.path + +except ImportError: + print('Error: Missing dependencies') + sys.exit(1) + +API_URL = 'https://app.vagrantup.com/api/v1/box/archlinux/archlinux' +THIS_MONTH = int(datetime.datetime.now().strftime("%m")) +LEN_RELEASES = 2 +CWD = '/srv/arch-boxes/arch-boxes' +ISO_PATH = '/srv/ftp/iso/latest/archlinux-' + datetime.datetime.now().strftime( + "%Y.%m") + '.01-x86_64.iso' +ISO_CHECKSUM_PATH = '/srv/ftp/iso/latest/sha1sums.txt' + + +def main(): + are_resources_present() + with urllib.request.urlopen(API_URL) as response: + data = json.load(response) + release_version = data['current_version']['version'] + release_providers = data['current_version']['providers'] + if not is_latest(release_version): + subprocess.call([ + "/usr/bin/packer", "build", "parallel=false", "-var", + "'headless=true'", "-var", "'write_zeroes=yes'", + "-except=vmware-iso", "vagrant.json" + ], + cwd=CWD) + else: + if not all_released(release_providers): + determine_missing_release(release_providers) + + +def are_resources_present(): + if os.path.exists(ISO_PATH) and os.path.exists(ISO_CHECKSUM_PATH): + pass + else: + sys.exit(1) + + +def determine_missing_release(release_providers): + if release_providers[0]['name'] == 'virtualbox': + subprocess.call([ + "/usr/bin/packer", "build", "parallel=false", "-var", + "'headless=true'", "-var", "'write_zeroes=yes'", + "-except=vmware-iso,virtualbox", "vagrant.json" + ], + cwd=CWD) + elif release_providers[0]['name'] == 'libvirt': + subprocess.call([ + "/usr/bin/packer", "build", "parallel=false", "-var", + "'headless=true'", "-var", "'write_zeroes=yes'", + "-except=vmware-iso,qemu", "vagrant.json" + ], + cwd=CWD) + + +def is_latest(release_version): + release_month = int(release_version.split(".")[1]) + if THIS_MONTH > release_month: + return False + else: + return True + + +def all_released(release_providers): + if LEN_RELEASES > len(release_providers): + return False + else: + return True + + +if __name__ == '__main__': + main() -- GitLab From ae8d4bd147e46cf4fb94a6248bd4250b7a7a327b Mon Sep 17 00:00:00 2001 From: Christian Rebischke Date: Fri, 9 Aug 2019 02:32:43 +0200 Subject: [PATCH 2/4] removed try & except block at beginning Signed-off-by: Christian Rebischke --- controller.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/controller.py b/controller.py index cb893e2..6ec944b 100644 --- a/controller.py +++ b/controller.py @@ -4,17 +4,12 @@ # Author: Christian Rebischke # This file is licensed under GPLv3 -try: - import urllib.request - import json - import datetime - import sys - import subprocess - import os.path - -except ImportError: - print('Error: Missing dependencies') - sys.exit(1) +import urllib.request +import json +import datetime +import sys +import subprocess +import os.path API_URL = 'https://app.vagrantup.com/api/v1/box/archlinux/archlinux' THIS_MONTH = int(datetime.datetime.now().strftime("%m")) -- GitLab From 0580a6f594ee5186fc397c66a16af54d221d8f6b Mon Sep 17 00:00:00 2001 From: Christian Rebischke Date: Fri, 9 Aug 2019 02:38:04 +0200 Subject: [PATCH 3/4] refactored if blocks Signed-off-by: Christian Rebischke --- controller.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/controller.py b/controller.py index 6ec944b..eee532b 100644 --- a/controller.py +++ b/controller.py @@ -64,17 +64,11 @@ def determine_missing_release(release_providers): def is_latest(release_version): release_month = int(release_version.split(".")[1]) - if THIS_MONTH > release_month: - return False - else: - return True + return THIS_MONTH <= release_month def all_released(release_providers): - if LEN_RELEASES > len(release_providers): - return False - else: - return True + return LEN_RELEASES <= len(release_providers) if __name__ == '__main__': -- GitLab From 2c91f6a579359934fc7f53e3912037d5c26eff33 Mon Sep 17 00:00:00 2001 From: Robin B Date: Fri, 9 Aug 2019 03:10:11 +0200 Subject: [PATCH 4/4] reduce redundancy by templating packer cmd (#45) * reduce redundancy by templating packer cmd * copy list to allow repeated calls to build_packer_call without this, build_packer_call will modify PACKER_CMD_TEMPLATE unintentionally * actually call build_packer_call --- controller.py | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/controller.py b/controller.py index eee532b..b1cc474 100644 --- a/controller.py +++ b/controller.py @@ -18,7 +18,11 @@ CWD = '/srv/arch-boxes/arch-boxes' ISO_PATH = '/srv/ftp/iso/latest/archlinux-' + datetime.datetime.now().strftime( "%Y.%m") + '.01-x86_64.iso' ISO_CHECKSUM_PATH = '/srv/ftp/iso/latest/sha1sums.txt' - +PACKER_CMD_TEMPLATE = [ + "/usr/bin/packer", "build", "parallel=false", "-var", + "'headless=true'", "-var", "'write_zeroes=yes'", + "-except=vmware-iso", "vagrant.json" +] def main(): are_resources_present() @@ -27,12 +31,7 @@ def main(): release_version = data['current_version']['version'] release_providers = data['current_version']['providers'] if not is_latest(release_version): - subprocess.call([ - "/usr/bin/packer", "build", "parallel=false", "-var", - "'headless=true'", "-var", "'write_zeroes=yes'", - "-except=vmware-iso", "vagrant.json" - ], - cwd=CWD) + subprocess.call(PACKER_CMD_TEMPLATE, cwd=CWD) else: if not all_released(release_providers): determine_missing_release(release_providers) @@ -45,22 +44,18 @@ def are_resources_present(): sys.exit(1) +def build_packer_call(provider): + provider_map = { + "virtualbox": "virtualbox", + "libvirt": "qemu" + } + packer = PACKER_CMD_TEMPLATE.copy() + packer[7] += "," + packer[7] += provider_map[provider] + return packer + def determine_missing_release(release_providers): - if release_providers[0]['name'] == 'virtualbox': - subprocess.call([ - "/usr/bin/packer", "build", "parallel=false", "-var", - "'headless=true'", "-var", "'write_zeroes=yes'", - "-except=vmware-iso,virtualbox", "vagrant.json" - ], - cwd=CWD) - elif release_providers[0]['name'] == 'libvirt': - subprocess.call([ - "/usr/bin/packer", "build", "parallel=false", "-var", - "'headless=true'", "-var", "'write_zeroes=yes'", - "-except=vmware-iso,qemu", "vagrant.json" - ], - cwd=CWD) - + subprocess.call(build_packer_call(release_providers[0]['name']), cwd=CWD) def is_latest(release_version): release_month = int(release_version.split(".")[1]) -- GitLab