Source code for backend.vm_manage.check
# coding: utf-8
import json
#from setproctitle import setproctitle
# from multiprocessing import Process
#from threading import Thread
from backend.helpers import get_redis_connection
from backend.vm_manage import PUBSUB_MB, EventTopics
from backend.vm_manage.executor import Executor
from ..helpers import get_redis_logger
from ..sshcmd import SSHConnection
[docs]def check_health(opts, vm_name, vm_ip):
"""
Test connectivity to the VM
:param vm_ip: ip address to the newly created VM
:raises: :py:class:`~backend.exceptions.CoprWorkerSpawnFailError`: validation fails
"""
log = get_redis_logger(opts, "vmm.check_health.detached", "vmm")
result = {
"vm_ip": vm_ip,
"vm_name": vm_name,
"msg": "",
"result": "OK",
"topic": EventTopics.HEALTH_CHECK
}
err_msg = None
try:
conn = SSHConnection(opts.build_user or "root", vm_ip)
rc, stdout, _ = conn.run_expensive("echo hello")
if rc != 0 or stdout != "hello\n":
err_msg = "Unexpected check output"
except Exception as error:
err_msg = "Healtcheck failed for VM {} with error {}".format(vm_ip, error)
log.exception(err_msg)
try:
if err_msg:
result["result"] = "failed"
result["msg"] = err_msg
rc = get_redis_connection(opts)
rc.publish(PUBSUB_MB, json.dumps(result))
except Exception as err:
log.exception("Failed to publish msg health check result: %s with error: %s",
result, err)
[docs]class HealthChecker(Executor):
__name_for_log__ = "health_checker"
__who_for_log__ = "vmm"
[docs] def run_check_health(self, vm_name, vm_ip):
self.recycle()
self.run_detached(check_health, args=(self.opts, vm_name, vm_ip))
# proc = Process(target=check_health, args=(self.opts, vm_name, vm_ip))
# proc = Thread(target=check_health, args=(self.opts, vm_name, vm_ip))
# self.child_processes.append(proc)
# proc.start()
# self.log.debug("Check health process started: {}".format(proc.pid))