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))