# -*- 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 lmi.common import JobManager from lmi.common.IndicationManager import IndicationManager from lmi.software import util from lmi.software.core import Job from lmi.software.LMI_SoftwareIdentity import LMI_SoftwareIdentity from lmi.software.LMI_SystemSoftwareCollection import \ LMI_SystemSoftwareCollection from lmi.software.LMI_HostedSoftwareCollection import \ LMI_HostedSoftwareCollection from lmi.software.LMI_MemberOfSoftwareCollection import \ LMI_MemberOfSoftwareCollection from lmi.software.LMI_InstalledSoftwareIdentity import \ LMI_InstalledSoftwareIdentity from lmi.software.LMI_SoftwareIdentityResource import \ LMI_SoftwareIdentityResource from lmi.software.LMI_ResourceForSoftwareIdentity import \ LMI_ResourceForSoftwareIdentity from lmi.software.LMI_HostedSoftwareIdentityResource import \ LMI_HostedSoftwareIdentityResource from lmi.software.LMI_SoftwareInstallationService import \ LMI_SoftwareInstallationService from lmi.software.LMI_SoftwareInstallationServiceCapabilities import \ LMI_SoftwareInstallationServiceCapabilities from lmi.software.LMI_AssociatedSoftwareInstallationServiceCapabilities \ import LMI_AssociatedSoftwareInstallationServiceCapabilities from lmi.software.LMI_HostedSoftwareInstallationService import \ LMI_HostedSoftwareInstallationService from lmi.software.LMI_SoftwareInstallationServiceAffectsElement import \ LMI_SoftwareInstallationServiceAffectsElement from lmi.software.LMI_SoftwareJob import LMI_SoftwareJob from lmi.software.LMI_SoftwareMethodResult import LMI_SoftwareMethodResult from lmi.software.LMI_AffectedSoftwareJobElement import \ LMI_AffectedSoftwareJobElement from lmi.software.LMI_AssociatedSoftwareJobMethodResult import \ LMI_AssociatedSoftwareJobMethodResult from lmi.software.LMI_OwningSoftwareJobElement import \ LMI_OwningSoftwareJobElement from lmi.software.LMI_SoftwareIdentityFileCheck import \ LMI_SoftwareIdentityFileCheck from lmi.software.LMI_SoftwareIdentityChecks import LMI_SoftwareIdentityChecks from lmi.software.yumdb import jobmanager from lmi.software.yumdb import YumDB from lmi.software.util import cmpi_logging def get_providers(env): """ @return mapping of provider names to corresponding provider instances. """ # first let's setup logging cmpi_logging.setup(env, util.Configuration.get_instance()) # 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", util.Configuration.get_instance().namespace, 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() IndicationManager.get_instance().shutdown()