Есть словарь с списком ВМ, их нужно распределить по списку nodes = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0}, так что есть машина с именем aff создалась на цифре 1, то больше на 1-ом быть aff не должно. Т.е следующий aff уже будет на любой другой цифре node
import requests
import random
import json
import re
def check_language(current_hostname):
return ('-java-' in current_hostname or '-go-' in current_hostname)
def check_os_version(current_os):
current_os = vm['distribution']['description']
if re.match(r"Debian 11", vm['distribution']['description']):
return False
return True
def get_next_hostname(current_hostname):
parts = current_hostname.split('-')
index = int(parts[-1].split('.')[0])
new_name = '{}-{}-{}.node.eu.consul'.format(parts[0], parts[1], index + 6)
return new_name
def get_service_name(current_hostname):
parts = current_hostname.split('-')
service_type = '{}'.format(parts[0])
return service_type
response = requests.get('http://127.0.0.1/asl_real.json')
asl_vms = json.loads(response.text)
vm_to_create = {}
ready_for_nodes = {}
nodes = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0}
for vm in asl_vms:
if check_language(vm['name']) and check_os_version(vm['distribution']['description']):
fst_part = get_service_name(vm['name'])
vm_res = {'1st_part_name:' : fst_part,'os:' : vm['distribution']['description'],'memory:' : vm['memory'],'cpu:' : vm['cpu'],'cpuNumber:' : vm['cpuNumber'],'disk:' : vm['disk']}
for num in nodes:
if fst_part in vm_res:
continue
else:
new_vm_name = get_next_hostname(vm['name'])
vm_to_create[new_vm_name] = vm_res
ready_for_nodes[num] = vm_to_create
print(json.dumps(ready_for_nodes))
вывод программы: у меня сейчас пока все машины создаються на всех цифрах node, проверка по имени (чтобы пропускать повторяющиеся имена не работает)
{
"1": {
"aff-java-7.node.eu.consul": {
"1st_part_name:": "aff",
"os:": "Debian 10.1 x64",
"memory:": 1536,
"cpu:": 2,
"cpuNumber:": 2,
"disk:": 8192
},
"aff-java-9.node.eu.consul": {
"1st_part_name:": "aff",
"os:": "Debian 10.1 x64",
"memory:": 1024,
"cpu:": 2,
"cpuNumber:": 2,
"disk:": 8192
},
"tgbot-go-7.node.eu.consul": {
"1st_part_name:": "tgbot",
"os:": "Debian 10.1 x64",
"memory:": 2048,
"cpu:": 4,
"cpuNumber:": 4,
"disk:": 8192
}
},
"2": {
"aff-java-7.node.eu.consul": {
"1st_part_name:": "aff",
"os:": "Debian 10.1 x64",
"memory:": 1536,
"cpu:": 2,
"cpuNumber:": 2,
"disk:": 8192
},
"aff-java-9.node.eu.consul": {
"1st_part_name:": "aff",
"os:": "Debian 10.1 x64",
"memory:": 1024,
"cpu:": 2,
"cpuNumber:": 2,
"disk:": 8192
},
"tgbot-go-7.node.eu.consul": {
"1st_part_name:": "tgbot",
"os:": "Debian 10.1 x64",
"memory:": 2048,
"cpu:": 4,
"cpuNumber:": 4,
"disk:": 8192
}
}