summaryrefslogtreecommitdiff
path: root/src/validators/cpu
blob: 959a49248ead420497733f0374d7bbb56e44c7c2 (plain)
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
#!/usr/bin/python3

import re
import sys

MAX_CPU = 511


def validate_isolcpus(value):
    pattern = re.compile(r'^(\d{1,3}(-\d{1,3})?)(,(\d{1,3}(-\d{1,3})?))*$')
    if not pattern.fullmatch(value):
        return False

    flat_list = []
    for part in value.split(','):
        if '-' in part:
            start, end = map(int, part.split('-'))
            if start > end or start < 0 or end > MAX_CPU:
                return False
            flat_list.extend(range(start, end + 1))
        else:
            num = int(part)
            if num < 0 or num > MAX_CPU:
                return False
            flat_list.append(num)

    for i in range(1, len(flat_list)):
        if flat_list[i] <= flat_list[i - 1]:
            return False

    return True


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python3 cpu.py <cpu_list>")
        sys.exit(1)

    input_value = sys.argv[1]
    if validate_isolcpus(input_value):
        sys.exit(0)
    else:
        sys.exit(1)