# -*- encoding: utf-8 -*- # Software Management Providers # # Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # # Authors: Michal Minar # """ Entry module for OpenLMI Software providers. """ from multiprocessing import Queue from openlmi.common import cmpi_logging from openlmi.common import JobManager from openlmi.common.IndicationManager import IndicationManager from openlmi.software.core import Job from openlmi.software.LMI_SoftwareIdentity import LMI_SoftwareIdentity from openlmi.software.LMI_SystemSoftwareCollection import \ LMI_SystemSoftwareCollection from openlmi.software.LMI_HostedSoftwareCollection import \ LMI_HostedSoftwareCollection from openlmi.software.LMI_MemberOfSoftwareCollection import \ LMI_MemberOfSoftwareCollection from openlmi.software.LMI_InstalledSoftwareIdentity import \ LMI_InstalledSoftwareIdentity from openlmi.software.LMI_SoftwareIdentityResource import \ LMI_SoftwareIdentityResource from openlmi.software.LMI_ResourceForSoftwareIdentity import \ LMI_ResourceForSoftwareIdentity from openlmi.software.LMI_HostedSoftwareIdentityResource import \ LMI_HostedSoftwareIdentityResource from openlmi.software.LMI_SoftwareInstallationService import \ LMI_SoftwareInstallationService from openlmi.software.LMI_SoftwareInstallationServiceCapabilities import \ LMI_SoftwareInstallationServiceCapabilities from openlmi.software. \ LMI_AssociatedSoftwareInstallationServiceCapabilities import \ LMI_AssociatedSoftwareInstallationServiceCapabilities from openlmi.software.LMI_HostedSoftwareInstallationService import \ LMI_HostedSoftwareInstallationService from openlmi.software.LMI_SoftwareInstallationServiceAffectsElement import \ LMI_SoftwareInstallationServiceAffectsElement from openlmi.software.LMI_SoftwareJob import LMI_SoftwareJob from openlmi.software.LMI_SoftwareMethodResult import \ LMI_SoftwareMethodResult from openlmi.software.LMI_AffectedSoftwareJobElement import \ LMI_AffectedSoftwareJobElement from openlmi.software.LMI_AssociatedSoftwareJobMethodResult import \ LMI_AssociatedSoftwareJobMethodResult from openlmi.software.LMI_OwningSoftwareJobElement import \ LMI_OwningSoftwareJobElement from openlmi.software.LMI_SoftwareIdentityFileCheck import \ LMI_SoftwareIdentityFileCheck from openlmi.software.LMI_SoftwareIdentityChecks import \ LMI_SoftwareIdentityChecks from openlmi.software.yumdb import jobmanager, YumDB def get_providers(env): """ @return mapping of provider names to corresponding provider instances. """ cmpi_logging.LogManager.LOGGER_NAME = 'openlmi.software' cmpi_logging.LogManager(env) # jobmanager does not understand CIM models, give it a way to transform # job to CIMIndication instance jobmanager.JOB_TO_MODEL = lambda job: Job.job2model(job, keys_only=False) providers = { "LMI_SoftwareIdentity" : LMI_SoftwareIdentity(env), "LMI_SystemSoftwareCollection" : LMI_SystemSoftwareCollection(env), "LMI_HostedSoftwareCollection" : LMI_HostedSoftwareCollection(env), "LMI_MemberOfSoftwareCollection" : LMI_MemberOfSoftwareCollection(env), "LMI_InstalledSoftwareIdentity" : LMI_InstalledSoftwareIdentity(env), "LMI_SoftwareIdentityResource" : LMI_SoftwareIdentityResource(env), "LMI_ResourceForSoftwareIdentity" : LMI_ResourceForSoftwareIdentity(env), "LMI_HostedSoftwareIdentityResource" : LMI_HostedSoftwareIdentityResource(env), "LMI_SoftwareInstallationService" : \ LMI_SoftwareInstallationService(env), "LMI_SoftwareInstallationServiceCapabilities" : \ LMI_SoftwareInstallationServiceCapabilities(env), "LMI_AssociatedSoftwareInstallationServiceCapabilities" : \ LMI_AssociatedSoftwareInstallationServiceCapabilities(env), "LMI_HostedSoftwareInstallationService" : \ LMI_HostedSoftwareInstallationService(env), "LMI_SoftwareInstallationServiceAffectsElement" : \ LMI_SoftwareInstallationServiceAffectsElement(env), "LMI_SoftwareJob" : LMI_SoftwareJob(env), "LMI_SoftwareInstallationJob" : LMI_SoftwareJob(env), "LMI_SoftwareVerificationJob" : LMI_SoftwareJob(env), "LMI_SoftwareInstCreation" : LMI_SoftwareJob(env), "LMI_SoftwareInstModification" : LMI_SoftwareJob(env), "LMI_SoftwareMethodResult" : LMI_SoftwareMethodResult(env), "LMI_AffectedSoftwareJobElement" : LMI_AffectedSoftwareJobElement(env), "LMI_AssociatedSoftwareJobMethodResult" : \ LMI_AssociatedSoftwareJobMethodResult(env), "LMI_OwningSoftwareJobElement" : LMI_OwningSoftwareJobElement(env), "LMI_SoftwareIdentityFileCheck" : LMI_SoftwareIdentityFileCheck(env), "LMI_SoftwareIdentityChecks" : LMI_SoftwareIdentityChecks(env) } # Initialization of indication manager -- running in separate thread as # daemon. That means it does not have to be cleaned up. im = IndicationManager.get_instance( env, "Software", "root/cimv2", queue=Queue()) JobManager.register_filters("LMI_SoftwareInstallationJob", im) JobManager.register_filters("LMI_SoftwareVerificationJob", im) return providers def authorize_filter(env, fltr, class_name, op, owner): """ CIMOM callback. It asks us to verify whether this filter is allowed. :param fltr: (``String``) Contains the filter that must be authorized. :param class_name: (``String``) Contains the class name extracted from the filter FROM clause. :param op: The name of the class for which monitoring is required. Only the namespace part is set if className is a process indication. :param owner The owner argument is the destination owner. """ IndicationManager.get_instance().authorize_filter( env, fltr, class_name, op, owner) def activate_filter(env, fltr, class_name, class_path, first_activation): """ CIMOM callback. It ask us to begin monitoring a resource. The function shall begin monitoring the resource according to the filter express only. :param fltr: (``String``) The filter argument contains the filter specification for this subscription to become active. :param class_name: (``String``) The class name extracted from the filter FROM clause. :param class_path: (``CIMInstanceName``) The name of the class for which monitoring is required. Only the namespace part is set if eventType is a process indication. :param first_activation: (``bool``) Set to true if this is the first filter for className. """ IndicationManager.get_instance().activate_filter( env, fltr, class_name, class_path, first_activation) def deactivate_filter(env, fltr, class_name, class_path, last_activation): """ CIMOM callback. Informs us that monitoring using this filter should stop. :param fltr: (``String``) The filter argument contains the filter specification for this subscription to become active. :param class_name: (``String``) The class name extracted from the filter FROM clause. :param class_path: (``CIMInstanceName``) class_path The name of the class for which monitoring is required. Only the namespace part is set if className is a process indication. :last_activation: (``bool``) Set to true if this is the last filter for className. """ IndicationManager.get_instance().deactivate_filter( env, fltr, class_name, class_path, last_activation) def enable_indications(env): """ CIMOM callback. Tells us that indications can now be generated. The MB is now prepared to process indications. The function is normally called by the MB after having done its intialization and processing of persistent subscription requests. """ IndicationManager.get_instance().enable_indications(env) def disable_indications(env): """ CIMOM callback. Tells us that we should stop generating indications. MB will not accept any indications until enabled again. The function is normally called when the MB is shutting down indication services either temporarily or permanently. """ IndicationManager.get_instance().disable_indications(env) def can_unload(_env): """ Says, whether providers can be unloaded. """ return True def shutdown(_env): """ Release resources upon cleanup. """ if YumDB.isInstantiated(): YumDB.get_instance().clean_up()