#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # 2020 Nico Schottelius (nico.schottelius at ungleich.ch) # # This file is part of uncloud. # # uncloud is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # uncloud is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with uncloud. If not, see . import uuid from uncloud.hack.db import DB from uncloud import UncloudException class Host(object): def __init__(self, config, db_entry=None): self.config = config self.db = DB(self.config, prefix="/hosts") if db_entry: self.db_entry = db_entry def list_hosts(self, filter_key=None, filter_regexp=None): """ Return list of all hosts """ for entry in self.db.list_and_filter("", filter_key, filter_regexp): yield self.__class__(self.config, db_entry=entry) def cmdline_add_host(self): """ FIXME: make this a bit smarter and less redundant """ for required_arg in [ 'add_vm_host', 'max_cores_per_vm', 'max_cores_total', 'max_memory_in_gb' ]: if not required_arg in self.config.arguments: raise UncloudException("Missing argument: {}".format(required_arg)) return self.add_host( self.config.arguments['add_vm_host'], self.config.arguments['max_cores_per_vm'], self.config.arguments['max_cores_total'], self.config.arguments['max_memory_in_gb']) def add_host(self, hostname, max_cores_per_vm, max_cores_total, max_memory_in_gb): db_entry = {} db_entry['uuid'] = str(uuid.uuid4()) db_entry['hostname'] = hostname db_entry['max_cores_per_vm'] = max_cores_per_vm db_entry['max_cores_total'] = max_cores_total db_entry['max_memory_in_gb'] = max_memory_in_gb db_entry["db_version"] = 1 db_entry["log"] = [] self.db.set(db_entry['uuid'], db_entry, as_json=True) return self.__class__(self.config, db_entry)