Задать вопрос
@DrPalmer

Как создать словарь со списком машин без повторений?

Есть словарь с списком ВМ, их нужно распределить по списку 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
    }
  }
  • Вопрос задан
  • 174 просмотра
Подписаться 1 Простой 21 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы