Add option "dir_generic_ldap_enabled" to function mod_dir_config()
function mod_dir_config should contain an (bool) argument "dir_generic_ldap_enabled" which, according to HP Ilo 5 1.20 User Guide, has to be set to true in order to use Ilo with openldap authentication. See https://support.hpe.com/hpsc/doc/public/display?docId=a00039434en_us on page 264. Point Number 4.
Try: myilo = hpilo.Ilo('myilohost',login='user',password='pass',ssl_context=my_ssl_context); myilo.get_dir_config(); {'dir_kerberos_kdc_port': 88, 'dir_enable_grp_acct': True, 'dir_kerberos_enabled': False, 'dir_authentication_enabled': True, 'dir_user_context_10': '', 'dir_user_context_11': '', 'dir_user_context_12': '', 'dir_user_context_13': '', 'dir_user_context_14': '', 'dir_user_context_15': '', 'dir_server_port': 636, 'dir_kerberos_kdc_address': '', 'dir_local_user_acct': True, 'dir_object_dn': '', 'dir_grpacct1_sid': '', 'dir_user_context_2': '', 'dir_user_context_3': '', 'dir_user_context_1': 'ou=myusergroup,dc=myserv,dc=com', 'dir_user_context_6': '', 'dir_user_context_7': '', 'dir_user_context_4': '', 'dir_user_context_5': '', 'dir_grpacct1_name': 'cn=CommonNameGroup,ou=OUnit,dc=myserv,dc=com', 'dir_user_context_8': '', 'dir_user_context_9': '', 'dir_server_address': '', 'dir_grpacct1_priv': '1,2,3,4', 'dir_generic_ldap_enabled': True, 'dir_kerberos_realm': ''}
but
myilo.mod_dir_config(dir_generic_ldap_enabled=True)
Traceback (most recent call last):
File "
The respective argument is missing in function declaration. With this, constallations where Ilo shall be used with authentication via openldap will not work. At least it did not in my configuration.
i suggest to slightly change method mod_dir_config like this:
In file hpilo.py:
...
def mod_dir_config(self, dir_authentication_enabled=None,
dir_local_user_acct=None,dir_server_address=None,
dir_server_port=None,dir_object_dn=None,dir_object_password=None,
dir_user_context_1=None,dir_user_context_2=None,
dir_user_context_3=None,dir_user_context_4=None,
dir_user_context_5=None,dir_user_context_6=None,
dir_user_context_7=None,dir_user_context_8=None,
dir_user_context_9=None,dir_user_context_10=None,
dir_user_context_11=None,dir_user_context_12=None,
dir_user_context_13=None,dir_user_context_14=None,
dir_user_context_15=None,dir_enable_grp_acct=None,
dir_kerberos_enabled=None,dir_kerberos_realm=None,
dir_kerberos_kdc_address=None,dir_kerberos_kdc_port=None,
dir_kerberos_keytab=None,
dir_grpacct1_name=None,dir_grpacct1_sid=None,
dir_grpacct1_priv=None,dir_grpacct2_name=None,
dir_grpacct2_sid=None,dir_grpacct2_priv=None,
dir_grpacct3_name=None,dir_grpacct3_sid=None,
dir_grpacct3_priv=None,dir_grpacct4_name=None,
dir_grpacct4_sid=None,dir_grpacct4_priv=None,
dir_grpacct5_name=None,dir_grpacct5_sid=None,
dir_grpacct5_priv=None,dir_grpacct6_name=None,
dir_grpacct6_sid=None,dir_grpacct6_priv=None,
dir_generic_ldap_enabled=None):
"""Modify iLO directory configuration, only values that are specified
will be changed."""
vars = dict(locals())
del vars['self']
# The _priv thing is a comma-separated list of numbers, but other
# functions use names, and the iLO ssh interface shows different names.
# Support them all.
privmap = {
'login': 1,
'rc': 2,
'remote_cons': 2,
'vm': 3,
'virtual_media': 3,
'power': 4,
'reset_server': 4,
'config': 5,
'config_ilo': 5,
'admin': 6,
}
# create special case for element with text inside
if dir_kerberos_keytab:
keytab_el = etree.Element('DIR_KERBEROS_KEYTAB')
keytab_el.text = dir_kerberos_keytab
del vars['dir_kerberos_keytab']
elements = []
for key, val in vars.items():
if val is None:
continue
if key.endswith('_priv'):
if isinstance(val, basestring):
val = val.replace('oemhp_', '').replace('_priv', '').split(',')
val = ','.join([str(privmap.get(x,x)) for x in val])
else:
val = str({True: 'Yes', False: 'No'}.get(val, val))
elements.append(etree.Element(key.upper(), VALUE=val))
if dir_kerberos_keytab:
elements.append(keytab_el)
return self._control_tag('DIR_INFO','MOD_DIR_CONFIG',elements=elements)
...
EOF
So just add argument "dir_generic_ldap_enabled=None" to function declaration.
I also noticed the same missing param for iLO4.
>>> ilo.mod_dir_config(dir_generic_ldap_enabled="True") Traceback (most recent call last): File "<input>", line 1, in <module> ilo.mod_dir_config(dir_generic_ldap_enabled="True") TypeError: mod_dir_config() got an unexpected keyword argument 'dir_generic_ldap_enabled'