summaryrefslogtreecommitdiffstats
path: root/src/software/openlmi/software/core/IdentityResource.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/software/openlmi/software/core/IdentityResource.py')
-rw-r--r--src/software/openlmi/software/core/IdentityResource.py650
1 files changed, 650 insertions, 0 deletions
diff --git a/src/software/openlmi/software/core/IdentityResource.py b/src/software/openlmi/software/core/IdentityResource.py
new file mode 100644
index 0000000..722c29b
--- /dev/null
+++ b/src/software/openlmi/software/core/IdentityResource.py
@@ -0,0 +1,650 @@
+# -*- encoding: utf-8 -*-
+# Software Management Providers
+#
+# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+Just a common functionality related to LMI_SoftwareIdentityResource provider.
+"""
+
+import pywbem
+import socket
+
+from openlmi.common import cmpi_logging
+from openlmi.software.core import ComputerSystem
+from openlmi.software.yumdb import YumDB
+from openlmi.software.yumdb.repository import Repository
+
+class Values(object):
+ class DetailedStatus(object):
+ Not_Available = pywbem.Uint16(0)
+ No_Additional_Information = pywbem.Uint16(1)
+ Stressed = pywbem.Uint16(2)
+ Predictive_Failure = pywbem.Uint16(3)
+ Non_Recoverable_Error = pywbem.Uint16(4)
+ Supporting_Entity_in_Error = pywbem.Uint16(5)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 0x8000..
+ _reverse_map = {
+ 0 : 'Not Available',
+ 1 : 'No Additional Information',
+ 2 : 'Stressed',
+ 3 : 'Predictive Failure',
+ 4 : 'Non-Recoverable Error',
+ 5 : 'Supporting Entity in Error'
+ }
+
+ class RequestedState(object):
+ Unknown = pywbem.Uint16(0)
+ Enabled = pywbem.Uint16(2)
+ Disabled = pywbem.Uint16(3)
+ Shut_Down = pywbem.Uint16(4)
+ No_Change = pywbem.Uint16(5)
+ Offline = pywbem.Uint16(6)
+ Test = pywbem.Uint16(7)
+ Deferred = pywbem.Uint16(8)
+ Quiesce = pywbem.Uint16(9)
+ Reboot = pywbem.Uint16(10)
+ Reset = pywbem.Uint16(11)
+ Not_Applicable = pywbem.Uint16(12)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 32768..65535
+ _reverse_map = {
+ 0 : 'Unknown',
+ 2 : 'Enabled',
+ 3 : 'Disabled',
+ 4 : 'Shut Down',
+ 5 : 'No Change',
+ 6 : 'Offline',
+ 7 : 'Test',
+ 8 : 'Deferred',
+ 9 : 'Quiesce',
+ 10 : 'Reboot',
+ 11 : 'Reset',
+ 12 : 'Not Applicable'
+ }
+
+ class HealthState(object):
+ Unknown = pywbem.Uint16(0)
+ OK = pywbem.Uint16(5)
+ Degraded_Warning = pywbem.Uint16(10)
+ Minor_failure = pywbem.Uint16(15)
+ Major_failure = pywbem.Uint16(20)
+ Critical_failure = pywbem.Uint16(25)
+ Non_recoverable_error = pywbem.Uint16(30)
+ # DMTF_Reserved = ..
+ # Vendor_Specific = 32768..65535
+ _reverse_map = {
+ 0 : 'Unknown',
+ 5 : 'OK',
+ 10 : 'Degraded/Warning',
+ 15 : 'Minor failure',
+ 20 : 'Major failure',
+ 25 : 'Critical failure',
+ 30 : 'Non-recoverable error'
+ }
+
+ class TransitioningToState(object):
+ Unknown = pywbem.Uint16(0)
+ Enabled = pywbem.Uint16(2)
+ Disabled = pywbem.Uint16(3)
+ Shut_Down = pywbem.Uint16(4)
+ No_Change = pywbem.Uint16(5)
+ Offline = pywbem.Uint16(6)
+ Test = pywbem.Uint16(7)
+ Defer = pywbem.Uint16(8)
+ Quiesce = pywbem.Uint16(9)
+ Reboot = pywbem.Uint16(10)
+ Reset = pywbem.Uint16(11)
+ Not_Applicable = pywbem.Uint16(12)
+ # DMTF_Reserved = ..
+ _reverse_map = {
+ 0 : 'Unknown',
+ 2 : 'Enabled',
+ 3 : 'Disabled',
+ 4 : 'Shut Down',
+ 5 : 'No Change',
+ 6 : 'Offline',
+ 7 : 'Test',
+ 8 : 'Defer',
+ 9 : 'Quiesce',
+ 10 : 'Reboot',
+ 11 : 'Reset',
+ 12 : 'Not Applicable'
+ }
+
+ class ResourceType(object):
+ Unknown = pywbem.Uint16(0)
+ Other = pywbem.Uint16(1)
+ Installer_and_Payload = pywbem.Uint16(2)
+ Installer = pywbem.Uint16(3)
+ Payload = pywbem.Uint16(4)
+ Installability_checker = pywbem.Uint16(5)
+ Security_Advisory = pywbem.Uint16(6)
+ Engineering_Advisory = pywbem.Uint16(7)
+ Technical_release_notes = pywbem.Uint16(9)
+ Change_notification = pywbem.Uint16(10)
+ Whitepaper = pywbem.Uint16(11)
+ Marketing_Documentation = pywbem.Uint16(12)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 0x8000..0xFFFF
+ _reverse_map = {
+ 0 : 'Unknown',
+ 1 : 'Other',
+ 2 : 'Installer and Payload',
+ 3 : 'Installer',
+ 4 : 'Payload',
+ 5 : 'Installability checker',
+ 6 : 'Security Advisory',
+ 7 : 'Engineering Advisory',
+ 9 : 'Technical release notes',
+ 10 : 'Change notification',
+ 11 : 'Whitepaper',
+ 12 : 'Marketing Documentation'
+ }
+
+ class EnabledState(object):
+ Unknown = pywbem.Uint16(0)
+ Other = pywbem.Uint16(1)
+ Enabled = pywbem.Uint16(2)
+ Disabled = pywbem.Uint16(3)
+ Shutting_Down = pywbem.Uint16(4)
+ Not_Applicable = pywbem.Uint16(5)
+ Enabled_but_Offline = pywbem.Uint16(6)
+ In_Test = pywbem.Uint16(7)
+ Deferred = pywbem.Uint16(8)
+ Quiesce = pywbem.Uint16(9)
+ Starting = pywbem.Uint16(10)
+ # DMTF_Reserved = 11..32767
+ # Vendor_Reserved = 32768..65535
+ _reverse_map = {
+ 0 : 'Unknown',
+ 1 : 'Other',
+ 2 : 'Enabled',
+ 3 : 'Disabled',
+ 4 : 'Shutting Down',
+ 5 : 'Not Applicable',
+ 6 : 'Enabled but Offline',
+ 7 : 'In Test',
+ 8 : 'Deferred',
+ 9 : 'Quiesce',
+ 10 : 'Starting'
+ }
+
+ class ExtendedResourceType(object):
+ Unknown = pywbem.Uint16(0)
+ Not_Applicable = pywbem.Uint16(2)
+ Linux_RPM = pywbem.Uint16(3)
+ HP_UX_Depot = pywbem.Uint16(4)
+ Windows_MSI = pywbem.Uint16(5)
+ Solaris_Package = pywbem.Uint16(6)
+ Macintosh_Disk_Image = pywbem.Uint16(7)
+ Debian_linux_Package = pywbem.Uint16(8)
+ HP_Smart_Component = pywbem.Uint16(11)
+ # Vendor_Reserved = 101..200
+ HTML = pywbem.Uint16(201)
+ PDF = pywbem.Uint16(202)
+ Text_File = pywbem.Uint16(203)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 0x8000..0xFFFF
+ _reverse_map = {
+ 0 : 'Unknown',
+ 2 : 'Not Applicable',
+ 3 : 'Linux RPM',
+ 4 : 'HP-UX Depot',
+ 5 : 'Windows MSI',
+ 6 : 'Solaris Package',
+ 7 : 'Macintosh Disk Image',
+ 8 : 'Debian linux Package',
+ 201 : 'HTML',
+ 202 : 'PDF',
+ 11 : 'HP Smart Component',
+ 203 : 'Text File'
+ }
+
+ class AccessContext(object):
+ Unknown = pywbem.Uint16(0)
+ Other = pywbem.Uint16(1)
+ Default_Gateway = pywbem.Uint16(2)
+ DNS_Server = pywbem.Uint16(3)
+ SNMP_Trap_Destination = pywbem.Uint16(4)
+ MPLS_Tunnel_Destination = pywbem.Uint16(5)
+ DHCP_Server = pywbem.Uint16(6)
+ SMTP_Server = pywbem.Uint16(7)
+ LDAP_Server = pywbem.Uint16(8)
+ Network_Time_Protocol__NTP__Server = pywbem.Uint16(9)
+ Management_Service = pywbem.Uint16(10)
+ internet_Storage_Name_Service__iSNS_ = pywbem.Uint16(11)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 32768..65535
+ _reverse_map = {
+ 0 : 'Unknown',
+ 1 : 'Other',
+ 2 : 'Default Gateway',
+ 3 : 'DNS Server',
+ 4 : 'SNMP Trap Destination',
+ 5 : 'MPLS Tunnel Destination',
+ 6 : 'DHCP Server',
+ 7 : 'SMTP Server',
+ 8 : 'LDAP Server',
+ 9 : 'Network Time Protocol (NTP) Server',
+ 10 : 'Management Service',
+ 11 : 'internet Storage Name Service (iSNS)'
+ }
+
+ class AvailableRequestedStates(object):
+ Enabled = pywbem.Uint16(2)
+ Disabled = pywbem.Uint16(3)
+ Shut_Down = pywbem.Uint16(4)
+ Offline = pywbem.Uint16(6)
+ Test = pywbem.Uint16(7)
+ Defer = pywbem.Uint16(8)
+ Quiesce = pywbem.Uint16(9)
+ Reboot = pywbem.Uint16(10)
+ Reset = pywbem.Uint16(11)
+ # DMTF_Reserved = ..
+ _reverse_map = {
+ 2 : 'Enabled',
+ 3 : 'Disabled',
+ 4 : 'Shut Down',
+ 6 : 'Offline',
+ 7 : 'Test',
+ 8 : 'Defer',
+ 9 : 'Quiesce',
+ 10 : 'Reboot',
+ 11 : 'Reset'
+ }
+
+ class Status(object):
+ OK = 'OK'
+ Error = 'Error'
+ Degraded = 'Degraded'
+ Unknown = 'Unknown'
+ Pred_Fail = 'Pred Fail'
+ Starting = 'Starting'
+ Stopping = 'Stopping'
+ Service = 'Service'
+ Stressed = 'Stressed'
+ NonRecover = 'NonRecover'
+ No_Contact = 'No Contact'
+ Lost_Comm = 'Lost Comm'
+ Stopped = 'Stopped'
+
+ class CommunicationStatus(object):
+ Unknown = pywbem.Uint16(0)
+ Not_Available = pywbem.Uint16(1)
+ Communication_OK = pywbem.Uint16(2)
+ Lost_Communication = pywbem.Uint16(3)
+ No_Contact = pywbem.Uint16(4)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 0x8000..
+ _reverse_map = {
+ 0 : 'Unknown',
+ 1 : 'Not Available',
+ 2 : 'Communication OK',
+ 3 : 'Lost Communication',
+ 4 : 'No Contact'
+ }
+
+ class OperationalStatus(object):
+ Unknown = pywbem.Uint16(0)
+ Other = pywbem.Uint16(1)
+ OK = pywbem.Uint16(2)
+ Degraded = pywbem.Uint16(3)
+ Stressed = pywbem.Uint16(4)
+ Predictive_Failure = pywbem.Uint16(5)
+ Error = pywbem.Uint16(6)
+ Non_Recoverable_Error = pywbem.Uint16(7)
+ Starting = pywbem.Uint16(8)
+ Stopping = pywbem.Uint16(9)
+ Stopped = pywbem.Uint16(10)
+ In_Service = pywbem.Uint16(11)
+ No_Contact = pywbem.Uint16(12)
+ Lost_Communication = pywbem.Uint16(13)
+ Aborted = pywbem.Uint16(14)
+ Dormant = pywbem.Uint16(15)
+ Supporting_Entity_in_Error = pywbem.Uint16(16)
+ Completed = pywbem.Uint16(17)
+ Power_Mode = pywbem.Uint16(18)
+ Relocating = pywbem.Uint16(19)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 0x8000..
+ _reverse_map = {
+ 0 : 'Unknown',
+ 1 : 'Other',
+ 2 : 'OK',
+ 3 : 'Degraded',
+ 4 : 'Stressed',
+ 5 : 'Predictive Failure',
+ 6 : 'Error',
+ 7 : 'Non-Recoverable Error',
+ 8 : 'Starting',
+ 9 : 'Stopping',
+ 10 : 'Stopped',
+ 11 : 'In Service',
+ 12 : 'No Contact',
+ 13 : 'Lost Communication',
+ 14 : 'Aborted',
+ 15 : 'Dormant',
+ 16 : 'Supporting Entity in Error',
+ 17 : 'Completed',
+ 18 : 'Power Mode',
+ 19 : 'Relocating'
+ }
+
+ class OperatingStatus(object):
+ Unknown = pywbem.Uint16(0)
+ Not_Available = pywbem.Uint16(1)
+ Servicing = pywbem.Uint16(2)
+ Starting = pywbem.Uint16(3)
+ Stopping = pywbem.Uint16(4)
+ Stopped = pywbem.Uint16(5)
+ Aborted = pywbem.Uint16(6)
+ Dormant = pywbem.Uint16(7)
+ Completed = pywbem.Uint16(8)
+ Migrating = pywbem.Uint16(9)
+ Emigrating = pywbem.Uint16(10)
+ Immigrating = pywbem.Uint16(11)
+ Snapshotting = pywbem.Uint16(12)
+ Shutting_Down = pywbem.Uint16(13)
+ In_Test = pywbem.Uint16(14)
+ Transitioning = pywbem.Uint16(15)
+ In_Service = pywbem.Uint16(16)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 0x8000..
+ _reverse_map = {
+ 0 : 'Unknown',
+ 1 : 'Not Available',
+ 2 : 'Servicing',
+ 3 : 'Starting',
+ 4 : 'Stopping',
+ 5 : 'Stopped',
+ 6 : 'Aborted',
+ 7 : 'Dormant',
+ 8 : 'Completed',
+ 9 : 'Migrating',
+ 10 : 'Emigrating',
+ 11 : 'Immigrating',
+ 12 : 'Snapshotting',
+ 13 : 'Shutting Down',
+ 14 : 'In Test',
+ 15 : 'Transitioning',
+ 16 : 'In Service'
+ }
+
+ class RequestStateChange(object):
+ Completed_with_No_Error = pywbem.Uint32(0)
+ Not_Supported = pywbem.Uint32(1)
+ Unknown_or_Unspecified_Error = pywbem.Uint32(2)
+ Cannot_complete_within_Timeout_Period = pywbem.Uint32(3)
+ Failed = pywbem.Uint32(4)
+ Invalid_Parameter = pywbem.Uint32(5)
+ In_Use = pywbem.Uint32(6)
+ # DMTF_Reserved = ..
+ Method_Parameters_Checked___Job_Started = pywbem.Uint32(4096)
+ Invalid_State_Transition = pywbem.Uint32(4097)
+ Use_of_Timeout_Parameter_Not_Supported = pywbem.Uint32(4098)
+ Busy = pywbem.Uint32(4099)
+ # Method_Reserved = 4100..32767
+ # Vendor_Specific = 32768..65535
+ class RequestedState(object):
+ Enabled = pywbem.Uint16(2)
+ Disabled = pywbem.Uint16(3)
+ Shut_Down = pywbem.Uint16(4)
+ Offline = pywbem.Uint16(6)
+ Test = pywbem.Uint16(7)
+ Defer = pywbem.Uint16(8)
+ Quiesce = pywbem.Uint16(9)
+ Reboot = pywbem.Uint16(10)
+ Reset = pywbem.Uint16(11)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 32768..65535
+
+ class EnabledDefault(object):
+ Enabled = pywbem.Uint16(2)
+ Disabled = pywbem.Uint16(3)
+ Not_Applicable = pywbem.Uint16(5)
+ Enabled_but_Offline = pywbem.Uint16(6)
+ No_Default = pywbem.Uint16(7)
+ Quiesce = pywbem.Uint16(9)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 32768..65535
+ _reverse_map = {
+ 2 : 'Enabled',
+ 3 : 'Disabled',
+ 5 : 'Not Applicable',
+ 6 : 'Enabled but Offline',
+ 7 : 'No Default',
+ 9 : 'Quiesce'
+ }
+
+ class PrimaryStatus(object):
+ Unknown = pywbem.Uint16(0)
+ OK = pywbem.Uint16(1)
+ Degraded = pywbem.Uint16(2)
+ Error = pywbem.Uint16(3)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 0x8000..
+ _reverse_map = {
+ 0 : 'Unknown',
+ 1 : 'OK',
+ 2 : 'Degraded',
+ 3 : 'Error'
+ }
+
+ class InfoFormat(object):
+ Other = pywbem.Uint16(1)
+ Host_Name = pywbem.Uint16(2)
+ IPv4_Address = pywbem.Uint16(3)
+ IPv6_Address = pywbem.Uint16(4)
+ IPX_Address = pywbem.Uint16(5)
+ DECnet_Address = pywbem.Uint16(6)
+ SNA_Address = pywbem.Uint16(7)
+ Autonomous_System_Number = pywbem.Uint16(8)
+ MPLS_Label = pywbem.Uint16(9)
+ IPv4_Subnet_Address = pywbem.Uint16(10)
+ IPv6_Subnet_Address = pywbem.Uint16(11)
+ IPv4_Address_Range = pywbem.Uint16(12)
+ IPv6_Address_Range = pywbem.Uint16(13)
+ Dial_String = pywbem.Uint16(100)
+ Ethernet_Address = pywbem.Uint16(101)
+ Token_Ring_Address = pywbem.Uint16(102)
+ ATM_Address = pywbem.Uint16(103)
+ Frame_Relay_Address = pywbem.Uint16(104)
+ URL = pywbem.Uint16(200)
+ FQDN = pywbem.Uint16(201)
+ User_FQDN = pywbem.Uint16(202)
+ DER_ASN1_DN = pywbem.Uint16(203)
+ DER_ASN1_GN = pywbem.Uint16(204)
+ Key_ID = pywbem.Uint16(205)
+ Parameterized_URL = pywbem.Uint16(206)
+ # DMTF_Reserved = ..
+ # Vendor_Reserved = 32768..65535
+ _reverse_map = {
+ 1 : 'Other',
+ 2 : 'Host Name',
+ 3 : 'IPv4 Address',
+ 4 : 'IPv6 Address',
+ 5 : 'IPX Address',
+ 6 : 'DECnet Address',
+ 7 : 'SNA Address',
+ 8 : 'Autonomous System Number',
+ 9 : 'MPLS Label',
+ 10 : 'IPv4 Subnet Address',
+ 11 : 'IPv6 Subnet Address',
+ 12 : 'IPv4 Address Range',
+ 13 : 'IPv6 Address Range',
+ 200 : 'URL',
+ 201 : 'FQDN',
+ 202 : 'User FQDN',
+ 203 : 'DER ASN1 DN',
+ 204 : 'DER ASN1 GN',
+ 205 : 'Key ID',
+ 206 : 'Parameterized URL',
+ 100 : 'Dial String',
+ 101 : 'Ethernet Address',
+ 102 : 'Token Ring Address',
+ 103 : 'ATM Address',
+ 104 : 'Frame Relay Address'
+ }
+
+@cmpi_logging.trace_function
+def object_path2repo(env, op, kind='enabled'):
+ """
+ @param op must contain precise information of repository,
+ otherwise an error is raised
+ """
+ if not isinstance(kind, basestring):
+ raise TypeError("kind must be a string")
+ if not isinstance(op, pywbem.CIMInstanceName):
+ raise pywbem.CIMError(pywbem.CIM_ERR_INVALID_PARAMETER,
+ "op must be an instance of CIMInstanceName")
+
+ if ( (not "CreationClassName" in op or not op['CreationClassName'])
+ or (not "Name" in op or not op["Name"])
+ or ( not "SystemCreationClassName" in op
+ or not op["SystemCreationClassName"])
+ or (not "SystemName" in op or not op["SystemName"])):
+ raise pywbem.CIMError(pywbem.CIM_ERR_INVALID_PARAMETER, "Wrong keys.")
+ if op["SystemName"] != socket.gethostname():
+ raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
+ 'SystemName "%s" does not match "%s".' % (
+ op["SystemName"], socket.gethostname()))
+ ch = env.get_cimom_handle()
+ if not ch.is_subclass("root/cimv2",
+ sub=op["CreationClassName"],
+ super="CIM_SoftwareIdentityResource"):
+ raise pywbem.CIMError(pywbem.CIM_ERR_INVALID_PARAMETER,
+ 'CreationClassName \"%s\" must be a subclass of "%s".' % (
+ op["CreationClassName"], "CIM_SoftwareIdentityResource"))
+ if not ch.is_subclass("root/cimv2",
+ sub=op["SystemCreationClassName"],
+ super="CIM_ComputerSystem"):
+ raise pywbem.CIMError(pywbem.CIM_ERR_INVALID_PARAMETER,
+ 'SystemCreationClassName of \"%s\" must be a subclass of "%s".'
+ % (op["CreationClassName"], "CIM_SoftwareIdentityResource"))
+ repos = YumDB.get_instance().filter_repositories(kind, repoid=op["Name"])
+ if len(repos) < 1:
+ raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
+ 'No matching repository found for Name=\"%s\".' % op["Name"])
+ return repos[0]
+
+@cmpi_logging.trace_function
+def _fill_non_keys(repo, model):
+ """
+ Fills into the model of instance all non-key properties.
+ """
+ model['AccessContext'] = Values.AccessContext.Other
+ if repo.mirror_list:
+ access_info = repo.mirror_list
+ elif repo.base_urls:
+ if len(repo.base_urls) > 0:
+ if len(repo.base_urls) > 1:
+ cmpi_logging.logger.warn(
+ 'multiple base urls found for repository "%s", selecting'
+ ' the last one', repo)
+ access_info = repo.base_urls[-1]
+ else:
+ cmpi_logging.logger.error(
+ 'no base url found for repository "%s"' % repo)
+ access_info = pywbem.CIMProperty('AccessInfo',
+ None, type='string')
+ model["AccessInfo"] = access_info
+ model['AvailableRequestedStates'] = [
+ Values.AvailableRequestedStates.Enabled,
+ Values.AvailableRequestedStates.Disabled]
+ model['Caption'] = repo.name
+ model['Cost'] = pywbem.Sint32(repo.cost)
+ model['Description'] = "[%s] - %s for %s architecture with cost %d" % (
+ repo.repoid, repo.name, repo.basearch, repo.cost)
+ model['ElementName'] = repo.repoid
+ model['EnabledDefault'] = Values.EnabledDefault.Not_Applicable
+ if repo.enabled:
+ model['EnabledState'] = Values.EnabledState.Enabled
+ else:
+ model['EnabledState'] = Values.EnabledState.Disabled
+ model['ExtendedResourceType'] = Values.ExtendedResourceType.Linux_RPM
+ model['GPGCheck'] = repo.gpg_check
+ if repo.ready:
+ model['HealthState'] = Values.HealthState.OK
+ else:
+ model['HealthState'] = Values.HealthState.Major_failure
+ if repo.revision is not None:
+ model["Generation"] = pywbem.Uint64(repo.revision)
+ else:
+ model['Generation'] = pywbem.CIMProperty('Generation',
+ None, type='uint64')
+ model['InfoFormat'] = Values.InfoFormat.URL
+ model['InstanceID'] = 'LMI:REPO:' + repo.repoid
+ if repo.mirror_list:
+ model["MirrorList"] = repo.mirror_list
+ else:
+ model['MirrorList'] = pywbem.CIMProperty('MirrorList',
+ None, type='string')
+ model['OperationalStatus'] = [ Values.OperationalStatus.OK
+ if repo.ready else Values.OperationalStatus.Error]
+ model['OtherAccessContext'] = "YUM package repository"
+ model['OtherResourceType'] = "RPM Software Package"
+ # this would need to populateSack, which is expensive
+ #model["PackageCount"] = pywbem.Uint32(repo.pkg_count)
+ if repo.ready:
+ model['PrimaryStatus'] = Values.PrimaryStatus.OK
+ else:
+ model['PrimaryStatus'] = Values.PrimaryStatus.Error
+ model['RepoGPGCheck'] = repo.repo_gpg_check
+ if repo.enabled:
+ model['RequestedState'] = Values.RequestedState.Enabled
+ else:
+ model['RequestedState'] = Values.RequestedState.Disabled
+ model['ResourceType'] = Values.ResourceType.Other
+ model['StatusDescriptions'] = [ "Ready" if repo.ready else "Not Ready" ]
+ model['TimeOfLastStateChange'] = pywbem.CIMDateTime(repo.last_edit)
+ if repo.last_update is not None:
+ model['TimeOfLastUpdate'] = pywbem.CIMDateTime(repo.last_update)
+ else:
+ model['TimeOfLastUpdate'] = pywbem.CIMProperty('TimeOfLastUpdate',
+ None, type='datetime')
+ model['TransitioningToState'] = Values.TransitioningToState.Not_Applicable
+
+@cmpi_logging.trace_function
+def repo2model(repo, keys_only=True, model=None):
+ """
+ @param model if not None, will be filled with data, otherwise
+ a new instance of CIMInstance or CIMObjectPath is created
+ """
+ if not isinstance(repo, Repository):
+ raise TypeError("pkg must be an instance of Repository")
+ if model is None:
+ model = pywbem.CIMInstanceName("LMI_SoftwareIdentityResource",
+ namespace="root/cimv2")
+ if not keys_only:
+ model = pywbem.CIMInstance(
+ "LMI_SoftwareIdentityResource", path=model)
+ if isinstance(model, pywbem.CIMInstance):
+ def _set_key(k, value):
+ """Sets the value of key property of cim instance"""
+ model[k] = value
+ model.path[k] = value #pylint: disable=E1103
+ else:
+ _set_key = model.__setitem__
+ _set_key('CreationClassName', "LMI_SoftwareIdentityResource")
+ _set_key("Name", repo.repoid)
+ _set_key("SystemCreationClassName", "Linux_ComputerSystem")
+ _set_key("SystemName", ComputerSystem.get_path()["Name"])
+ if not keys_only:
+ _fill_non_keys(repo, model)
+
+ return model
+