Skip to content
Snippets Groups Projects
controller.py 1.95 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python
    #-*- encoding; utf-8 -*-
    #
    # Author: Christian Rebischke <chris.rebischke@archlinux.org>
    # This file is licensed under GPLv3
    
    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'
    
    NOW = datetime.datetime.now()
    THIS_MONTH = int(NOW.strftime("%m"))
    
    LEN_RELEASES = 2
    CWD = '/srv/arch-boxes/arch-boxes'
    
    ISO_PATH = '/srv/ftp/iso/latest/archlinux-' + 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"
    
        exit_if_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(PACKER_CMD_TEMPLATE, cwd=CWD)
            else:
                if not all_released(release_providers):
                    determine_missing_release(release_providers)
    
    
    
    def exit_if_resources_present():
    
        if os.path.exists(ISO_PATH) and os.path.exists(ISO_CHECKSUM_PATH):
            pass
        else:
    
    
    
    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):
        subprocess.call(build_packer_call(release_providers[0]['name']), cwd=CWD)
    
    
    def is_latest(release_version):
        release_month = int(release_version.split(".")[1])
        return THIS_MONTH <= release_month
    
    
    def all_released(release_providers):
        return LEN_RELEASES <= len(release_providers)
    
    
    if __name__ == '__main__':
        main()