forked from uncloud/uncloud
meow
cc0ca68498
* Fix issue that causes a new image store to be created at every start of ucloud-api. * VM Migration API call now takes hostname instead of host key. * StorageHandler Classes are introduced. They transparently handles things related to importing of image, make vm out of image, resize vm image, delete vm image etc. * Loggers added to __init__.py of every ucloud component's subpackage. * Non-Trivial Timeout Events are no longer logged. * Fix issue that prevents removal of stopped VMs (i.e VMs that are successfully migrated). * Improved unit handling added. e.g MB, Mb, mB, mb are all Mega Bytes. * VM migration is now possible on IPv6 host. * Destination VM (receiving side of migration of a vm) now correctly expects incoming data on free ephemeral port. * Traceback is no longer output to screen, instead it goes to log file. * All sanity checks are put into a single file. These checks are run by ucloud.py before running any of ucloud component.
54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
import logging
|
|
import socket
|
|
import requests
|
|
import json
|
|
|
|
from ipaddress import ip_address
|
|
|
|
from os.path import join as join_path
|
|
|
|
|
|
def create_package_loggers(packages, base_path, mode="a"):
|
|
loggers = {}
|
|
for pkg in packages:
|
|
logger = logging.getLogger(pkg)
|
|
logger_handler = logging.FileHandler(
|
|
join_path(base_path, "{}.txt".format(pkg)),
|
|
mode=mode
|
|
)
|
|
logger.setLevel(logging.DEBUG)
|
|
logger_handler.setFormatter(logging.Formatter(fmt="%(asctime)s: %(levelname)s - %(message)s",
|
|
datefmt="%d-%b-%y %H:%M:%S"))
|
|
logger.addHandler(logger_handler)
|
|
loggers[pkg] = logger
|
|
|
|
|
|
# TODO: Should be removed as soon as migration
|
|
# mechanism is finalized inside ucloud
|
|
def get_ipv4_address():
|
|
# If host is connected to internet
|
|
# Return IPv4 address of machine
|
|
# Otherwise, return 127.0.0.1
|
|
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
|
try:
|
|
s.connect(("8.8.8.8", 80))
|
|
except socket.timeout:
|
|
address = "127.0.0.1"
|
|
except Exception as e:
|
|
logging.getLogger().exception(e)
|
|
address = "127.0.0.1"
|
|
else:
|
|
address = s.getsockname()[0]
|
|
|
|
return address
|
|
|
|
|
|
def get_ipv6_address():
|
|
try:
|
|
r = requests.get("https://api6.ipify.org?format=json")
|
|
content = json.loads(r.content.decode("utf-8"))
|
|
ip = ip_address(content["ip"]).exploded
|
|
except Exception as e:
|
|
logging.exception(e)
|
|
else:
|
|
return ip
|