Измените MailSession в WebSphere для HCL Connections с обнаружением изменений, если что-то нужно изменить или было изменено

Я хочу изменить почтовый сеанс lcnotification по умолчанию для HCL Connections 6.5 / 7 в WAS. Поскольку это автоматизировано с помощью Ansible, я хотел бы определить, остались ли желаемые настройки или их нужно установить, включая полную синхронизацию узлов в случае, если что-то было изменено. Я изо всех сил пытаюсь определить это правильно, поскольку ни AdminConfig.modify, ни AdminConfig.save не сообщают мне, было что-то изменено или нет.

Итак, я попытался получить объект MailSession и проверить, соответствует ли каждое из моих свойств, которые я хотел бы установить:

properties = [
    ["mailTransportHost", "{{ mail_host }}"],
    ["mailTransportUser", "{{ mail_user }}"],
    ["mailTransportPassword", "{{ mail_pw }}"],
    ["mailFrom", "{{ mail_sender }}"],
    ["debug", "{{ mail_debug | lower }}"]
]

session = AdminConfig.list('MailSession', 'lcnotification*')
existing = AdminConfig.showall(session)
isModified = 0
for line in existing.splitlines():
    noBrackets = line[1:-1]
    firstSpace = noBrackets.index(" ")
    key = noBrackets[0:firstSpace]
    val = noBrackets[firstSpace:].strip()
#       print key + " -> " + val

    for prop in properties:
        propKey = prop[0]
        propVal = prop[1]
        if propKey == key and val != propVal:
            print(propKey + " not maching:\n\tPresent: " + val + "\n\tWanted: " +
                  propVal)
            isModified = 1

if isModified:
    AdminConfig.modify(session, properties)
    AdminConfig.save()

    import shared
    shared.synchAllNodes()

В вызове Ansible я использую changed_when, чтобы проверить, присутствует ли not maching в stdout. Это не работает должным образом, потому что WAS возвращает звезды вместо mailTransportPassword, поэтому я не могу проверить, совпадает ли он:

  stdout: |-
    WASX7209I: Connected to process "dmgr" on node CnxCell-dmgr using SOAP connector;  The type of process is: DeploymentManager
    mailTransportPassword not maching:
            Present: *****
            Wanted: dummypw
    Syncronizing nodeCnxNode01
    -----------------------------------------------------------------------------------------
    Full Resyncronization completed

Я не вижу чистого способа исправить это. Есть ли другой (возможно, даже более чистый) способ проверить, не было ли что-то изменено, и нужно ли выполнить полную повторную синхронизацию?


person Lion    schedule 10.05.2021    source источник
comment
Меня смущает ваш вопрос; вы сказали, что хотите, чтобы changed_when: запускался, если появляется строка вывода not matching, а затем вы говорите что-то о звездочках для запутывания пароля. В чем конкретно заключается ваш вопрос?   -  person mdaniel    schedule 11.05.2021
comment
w.r.t. звездочки, по моему опыту, любая облегченная кодировка (base64, rot13, .reverse(), ...) будет обходить упрощенные схемы обфускации паролей, если это то, с чем у вас проблемы   -  person mdaniel    schedule 11.05.2021
comment
@mdaniel Я хочу определить, нужно ли что-то изменить, чтобы переслать это в Ansible и при необходимости выполнить полную синхронизацию. Чтобы заархивировать это, я попытался сравнить все свойства, которые я хочу установить, с уже установленными в WAS - если какое-либо свойство не совпадает, я бы знал, что нужно применить изменения. Этот подход работал для всего, кроме пароля, поскольку он замаскирован. Но тем временем я нашел другое решение, которое мне кажется более понятным (см. Мой ответ)   -  person Lion    schedule 11.05.2021


Ответы (1)


Я посмотрел на состояние синхронизации узла, и кажется, что WAS правильно определяет, есть ли изменения, которые необходимо синхронизировать. Итак, я пишу свои свойства и проверяю узел синхронизации. Если он не синхронизирован, что-то было изменено - ›Нам нужно выполнить полную синхронизацию. Если Modified выводится на стандартный вывод, Ansible может пометить задачу как измененную.

AdminConfig.modify(session, properties)
AdminConfig.save()

node = AdminControl.completeObjectName('type=NodeSync,*')
isSynced = AdminControl.invoke(node, 'isNodeSynchronized')
print node + "\n\tIs synced: " + isSynced

# Nasty, but the old included Python of WAS still can't handle boolean values
if isSynced == "false":
    # For the change detection
    print "Modified, starting full sync"
    import shared
    shared.synchAllNodes()
person Lion    schedule 11.05.2021