Esempio n. 1
0
class VirtWho(object):
    def __init__(self, logger, options):
        """
        VirtWho class provides bridge between virtualization supervisor and
        Subscription Manager.

        logger - logger instance
        options - options for virt-who, parsed from command line arguments
        """
        self.logger = logger
        self.options = options

        self.virt = None
        self.subscriptionManager = None

        self.unableToRecoverStr = "Unable to recover"
        if not options.oneshot:
            self.unableToRecoverStr += ", retry in %d seconds." % RetryInterval

        # True if reload is queued
        self.doReload = False


    def initVirt(self):
        """
        Connect to the virtualization supervisor (libvirt or VDSM)
        """
        if self.options.virtType == "vdsm":
            self.virt = VDSM(self.logger)
        elif self.options.virtType == "libvirt":
            self.virt = Virt(self.logger, registerEvents=self.options.background)
            # We can listen for libvirt events
            self.tryRegisterEventCallback()
        elif self.options.virtType == "rhevm":
            self.virt = RHEVM(self.logger, self.options.server, self.options.username, self.options.password)
        elif self.options.virtType == "hyperv":
            self.virt = HyperV(self.logger, self.options.server, self.options.username, self.options.password)
        else:
            # ESX
            self.virt = VSphere(self.logger, self.options.server, self.options.username, self.options.password)

    def initSM(self):
        """
        Connect to the subscription manager (candlepin).
        """
        try:
            if self.options.smType == "sam":
                self.subscriptionManager = SubscriptionManager(self.logger)
                self.subscriptionManager.connect()
            elif self.options.smType == "satellite":
                self.subscriptionManager = Satellite(self.logger)
                self.subscriptionManager.connect(self.options.sat_server, self.options.sat_username, self.options.sat_password)
        except NoOptionError, e:
            self.logger.exception("Error in reading configuration file (/etc/rhsm/rhsm.conf):")
            raise
        except SubscriptionManagerError, e:
            self.logger.exception("Unable to obtain status from server, UEPConnection is likely not usable:")
            raise