Source code for backend.vm_manage.check
# coding: utf-8
import json
import paramiko
#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
[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 = paramiko.SSHClient()
conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
conn.connect(hostname=vm_ip, port=opts.ssh.port,
username=opts.build_user or "root",
key_filename=opts.ssh.identity_file)
stdin, stdout, stderr = conn.exec_command("echo hello")
stdout.channel.recv_exit_status()
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: {} with error: {}"
.format(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))