HF2: Pythonban a CIM_Account-nál "Could not resolve variable" error van

0 votes
asked Apr 4, 2015 in IRF tantárgy by u9od6b (30 points)  

Sziasztok!

Elkezdtem csinálni a második házim. Csoportokat, és bennük levő felhasználókat kell listáznom, és --verbose kapcsoló esetén szükségem van a home directory-jukra is. A következő classokat használnám fel:

CIMAccount - ebben benne van minden, amit a userről tudni érdemes
LMI
MemberOfGroup - ez a felhasználókat és a csoportokat rendeli össze
CIM_Group - ezek pedig a csoportok

Pythonban végig akarok menni az Accountokon, és hozzárendelni őket a csoportokhoz. Az accountok lekérdezése így néz ki:

import lmiwbem

hostname = "http://192.168.126.129"
username = "meres"
password = "LaborImage"

clsAccount = "CIM_Account"     

conn = lmiwbem.WBEMConnection()
conn.connect(hostname, username, password)

# contains everything about users
users_ = conn.EnumerateInstances(clsAccount, 'root/cimv2', LocalOnly=False,
                               DeepInheritance=True,
                               IncludeQualifiers=False,
                               IncludeClassOrigin=True,
                               PropertyList=None)

A probléma az, hogy a users_-ben nem férek hozzá a listaelem property-jeihez (kép a debugból):
Could not resolve variable

Ennek mi lehet az oka? Mit kezdjek vele? LMIMemberOfGroup és CIMGroup osztályoknál tök jól működik...

enter image description here

Köszi előre is!

commented Apr 4, 2015 by u9od6b (30 points)  
Egyébként ez az error van ha a properties-hez hozzá akarok férni:
print(users_[0].properties)

hiba:
NocaseDict({u'AccountExpiration': 'CIMProperty(name=u'AccountExpiration', type=u'CIMDateTime', value='None', is_array=False, ...)', u'AvailableRequestedStates': 'CIMProperty(name=u'AvailableRequestedStates', type=u'uint16', value='[]', is_array=True, ...)', u'Caption': 'CIMProperty(name=u'Caption', type=u'string', value='None', is_array=False, ...)', u'CommunicationStatus': 'CIMProperty(name=u'CommunicationStatus', type=u'uint16', value='None', is_array=False, ...)', u'ComplexPasswordRulesEnforced': 'CIMProperty(name=u'ComplexPasswordRulesEnforced', type=u'uint16', value='[]', is_array=True, ...)', u'CreationClassName': 'CIMProperty(name=u'CreationClassName', type=u'string', value='LMI_Account', is_array=False, ...)', u'Description': 'CIMProperty(name=u'Description', type=u'string', value='None', is_array=False, ...)', u'Descriptions': 'CIMProperty(name=u'Descriptions', type=u'string', value='[]', is_array=True, ...)', u'DetailedStatus': 'CIMProperty(name=u'DetailedStatus', type=u'uint16', value='None', is_array=False, ...)', u'ElementName': 'CIMProperty(name=u'ElementName', type=u'string', value='root', is_array=False, ...)', u'EnabledDefault': 'CIMProperty(name=u'EnabledDefault', type=u'uint16', value='2', is_array=False, ...)', u'EnabledState': 'CIMProperty(name=u'EnabledState', type=u'uint16', value='5', is_array=False, ...)', u'Generation': 'CIMProperty(name=u'Generation', type=u'uint64', value='None', is_array=False, ...)', u'GroupID': 'CIMProperty(name=u'GroupID', type=u'string', value='0', is_array=False, ...)', u'HealthState': 'CIMProperty(name=u'HealthState', type=u'uint16', value='None', is_array=False, ...)', u'HomeDirectory': 'CIMProperty(name=u'HomeDirectory', type=u'string', value='/root', is_array=False, ...)', u'Host': 'CIMProperty(name=u'Host', type=u'string', value='['localhost']', is_array=True, ...)', u'InactivityTimeout': 'CIMProperty(name=u'InactivityTimeout', type=u'CIMDateTime', value='None', is_array=False, ...)', u'InstallDate': 'CIMProperty(name=u'InstallDate', type=u'CIMDateTime', value='None', is_array=False, ...)', u'InstanceID': 'CIMProperty(name=u'InstanceID', type=u'string', value='None', is_array=False, ...)', u'LastLogin': '', u'LocalityName': 'CIMProperty(name=u'LocalityName', type=u'string', value='[]', is_array=True, ...)', u'LoginShell': 'CIMProperty(name=u'LoginShell', type=u'string', value='/bin/bash', is_array=False, ...)', u'MaximumSuccessiveLoginFailures': 'CIMProperty(name=u'MaximumSuccessiveLoginFailures', type=u'uint16', value='None', is_array=False, ...)', u'Name': 'CIMProperty(name=u'Name', type=u'string', value='root', is_array=False, ...)', u'ObjectClass': 'CIMProperty(name=u'ObjectClass', type=u'string', value='[]', is_array=True, ...)', u'OperatingStatus': 'CIMProperty(name=u'OperatingStatus', type=u'uint16', value='None', is_array=False, ...)', u'OperationalStatus': 'CIMProperty(name=u'OperationalStatus', type=u'uint16', value='[]', is_array=True, ...)', u'OrganizationName': 'CIMProperty(name=u'OrganizationName', type=u'string', value='['']', is_array=True, ...)', u'OtherEnabledState': 'CIMProperty(name=u'OtherEnabledState', type=u'string', value='None', is_array=False, ...)', u'OtherUserPasswordEncryptionAlgorithm': 'CIMProperty(name=u'OtherUserPasswordEncryptionAlgorithm', type=u'string', value='None', is_array=False, ...)', u'OU': 'CIMProperty(name=u'OU', type=u'string', value='[]', is_array=True, ...)', u'PasswordExpiration': 'CIMProperty(name=u'PasswordExpiration', type=u'CIMDateTime', value='None', is_array=False, ...)', u'PasswordExpirationWarning': 'CIMProperty(name=u'PasswordExpirationWarning', type=u'CIMDateTime', value='None', is_array=False, ...)', u'PasswordHistoryDepth': 'CIMProperty(name=u'PasswordHistoryDepth', type=u'uint16', value='None', is_array=False, ...)', u'PasswordInactivation': 'CIMProperty(name=u'PasswordInactivation', type=u'CIMDateTime', value='None', is_array=False, ...)', u'PasswordLastChange': 'CIMProperty(name=u'PasswordLastChange', type=u'CIMDateTime', value='None', is_array=False, ...)', u'PasswordPossibleChange': '', u'PrimaryStatus': 'CIMProperty(name=u'PrimaryStatus', type=u'uint16', value='None', is_array=False, ...)', u'RequestedState': 'CIMProperty(name=u'RequestedState', type=u'uint16', value='12', is_array=False, ...)', u'SeeAlso': 'CIMProperty(name=u'SeeAlso', type=u'string', value='[]', is_array=True, ...)', u'Status': 'CIMProperty(name=u'Status', type=u'string', value='None', is_array=False, ...)', u'StatusDescriptions': 'CIMProperty(name=u'StatusDescriptions', type=u'string', value='[]', is_array=True, ...)', u'SystemCreationClassName': 'CIMProperty(name=u'SystemCreationClassName', type=u'string', value='PG_ComputerSystem', is_array=False, ...)', u'SystemName': 'CIMProperty(name=u'SystemName', type=u'string', value='localhost', is_array=False, ...)', u'TimeOfLastStateChange': 'CIMProperty(name=u'TimeOfLastStateChange', type=u'CIMDateTime', value='None', is_array=False, ...)', u'TransitioningToState': 'CIMProperty(name=u'TransitioningToState', type=u'uint16', value='12', is_array=False, ...)', u'UserCertificate': 'CIMProperty(name=u'UserCertificate', type=u'string', value='[]', is_array=True, ...)', u'UserID': 'CIMProperty(name=u'UserID', type=u'string', value='0', is_array=False, ...)', u'UserPassword': 'CIMProperty(name=u'UserPassword', type=u'string', value='[]', is_array=True, ...)', u'UserPasswordEncoding': 'CIMProperty(name=u'UserPasswordEncoding', type=u'uint32', value='2', is_array=False, ...)', u'UserPasswordEncryptionAlgorithm': 'CIMProperty(name=u'UserPasswordEncryptionAlgorithm', type=u'uint16', value='None', is_array=False, ...)'})Traceback (most recent call last):
  File "/home/meres/workspace/get_users/get_users/get_users.py", line 58, in <module>
    print(users_[0].properties)
  File "/usr/lib/python3.4/site-packages/lmiwbem/lmiwbem_types.py", line 67, in __init__
    if isinstance(dtarg, basestring):
  File "/usr/lib/python3.4/site-packages/lmiwbem/lmiwbem_types.py", line 67, in __init__
    if isinstance(dtarg, basestring):
NameError: name 'basestring' is not defined
commented Apr 4, 2015 by u9od6b (30 points)  
try-catch (except) blokkba rakva nem ír hibát. ez egy workaround, de igazából nem megoldás, ezért nem jelölöm válasznak a kérdésre.

try:
    print(users_[0].properties)
except NameError:
    basestring = 'Kalacs'

1 Answer

0 votes
answered Apr 4, 2015 by kovari (2,221 points)  
selected Apr 4, 2015 by u9od6b
 
Best answer

Az a probléma, hogy a LastLogin nevű attribútumhoz nem tartozik érték, de igazából még property sem. Ha rákeresel az előbbi, általad bemásolt kimenetben, akkor látszik is, hogy nem tartozik hozzá semmilyen valós érték. Ez okozza a NameError-t. (lehetséges, hogy más property is hiányos, és nem csak ez)

Szerencsére ettől függetlenül le tudunk kérdezni konkrét attribútumokat, csak ha az összesre vagyunk kíváncsiak, akkor keletkezik a probléma.

Nem sok példánynál vettem ezt észre amúgy, de sajnos létező jelenség.

commented Apr 4, 2015 by u9od6b (30 points)  
Köszönöm, ez megmagyaráz mindent. Most nem vagyok gépnél, úgyhogy nem tudom kipróbálni, de egyébként hogy lehet hozzáférni propertykhez célzottan? Valami CIM lekérdezés kell, vagy lehet így is:

users_[0].properties.homedirectory

?
commented Apr 4, 2015 by kovari (2,221 points)  
Nagyjából így, csak a homedirectory még mindig nem a konkrét string, hanem az egy CIMProperty objektum, ami tartalmazza a konkrét értéket. De amúgy szerveroldalon is lehet szűrni az ExecQuery függvénnyel. (bár utóbbinál join műveletet nem tudtam csinálni, de az egyszerű lekérdezések esetén használható)
...