Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/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'
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'
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()
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 are_resources_present():
if os.path.exists(ISO_PATH) and os.path.exists(ISO_CHECKSUM_PATH):
pass
else:
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):
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()