В основном я пытаюсь из списка лиц выполнить поиск в ldap и получить письмо.
Чтобы получить информацию, я запускаю этот ldapsearch.
- name: Get LDAP information
command: ldapsearch -x -h ldap.test.com -D "LDAP Service Account" -w "xxxxxxx" -b "CN=Users,DC=example,DC=com" "cn={{item}}" -s sub "(cn=*)" mail
register: ldap_output
with_items: "{{owner_list}}"
Это результат ldapsearch (я отредактировал вывод) с успехом и с ошибкой (Daniel and Wrong1)
[
{
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"ansible_loop_var": "item",
"changed": true,
"cmd": [
"ldapsearch",
"-x",
"-h",
"ldap.example.com",
"-D",
"admin",
"-w",
"xxxxxxxx",
"-b",
"CN=Users,DC=example,DC=com",
"cn=Daniel",
"-s",
"sub",
"(cn=*)",
"mail"
],
"delta": "0:00:00.013156",
"end": "2020-01-15 06:05:33.225344",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "ldapsearch -x -h ldap.example.com -D \"admin\" -w \"xxxxxxxx\" -b \"CN=Users,DC=example,DC=com\" \"cn=Daniel\" -s sub \"(cn=*)\" mail",
"_uses_shell": false,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true,
"warn": true
}
},
"item": "Daniel",
"rc": 0,
"start": "2020-01-15 06:05:33.212188",
"stderr": "",
"stderr_lines": [],
"stdout": "# extended LDIF\n#\n# LDAPv3\n# base <CN=Users,DC=example,DC=com> with scope subtree\n# filter: cn=Daniel\n# requesting: (cn=*) mail \n#\n\n# Daniel, Users, example.com\ndn: CN=Daniel,CN=Users,DC=example,DC=com\nmail: daniel@example.com\n\n# search result\nsearch: 2\nresult: 0 Success\n\n# numResponses: 2\n# numEntries: 1",
"stdout_lines": [
"# extended LDIF",
"#",
"# LDAPv3",
"# base <CN=Users,DC=example,DC=com> with scope subtree",
"# filter: cn=Daniel",
"# requesting: (cn=*) mail ",
"#",
"",
"# Daniel, Users, example.com",
"dn: CN=Daniel,CN=Users,DC=example,DC=com",
"mail: daniel@example.com",
"",
"# search result",
"search: 2",
"result: 0 Success",
"",
"# numResponses: 2",
"# numEntries: 1"
]
},
{
"ansible_loop_var": "item",
"changed": true,
"cmd": [
"ldapsearch",
"-x",
"-h",
"ldap.example.com",
"-D",
"admin",
"-w",
"xxxxxxxx",
"-b",
"CN=Users,DC=example,DC=com",
"cn=Wrong1",
"-s",
"sub",
"(cn=*)",
"mail"
],
"delta": "0:00:00.014722",
"end": "2020-01-15 06:05:33.394665",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "ldapsearch -x -h ldap.example.com -D \"admin\" -w \"xxxxxxxx\" -b \"CN=Users,DC=example,DC=com\" \"cn=Wrong1\" -s sub \"(cn=*)\" mail",
"_uses_shell": false,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true,
"warn": true
}
},
"item": "Wrong1",
"rc": 0,
"start": "2020-01-15 06:05:33.379943",
"stderr": "",
"stderr_lines": [],
"stdout": "# extended LDIF\n#\n# LDAPv3\n# base <CN=Users,DC=example,DC=com> with scope subtree\n# filter: cn=Wrong1\n# requesting: (cn=*) mail \n#\n\n# search result\nsearch: 2\nresult: 0 Success\n\n# numResponses: 1",
"stdout_lines": [
"# extended LDIF",
"#",
"# LDAPv3",
"# base <CN=Users,DC=example,DC=com> with scope subtree",
"# filter: cn=Wrong1",
"# requesting: (cn=*) mail ",
"#",
"",
"# search result",
"search: 2",
"result: 0 Success",
"",
"# numResponses: 1"
]
}
]
Из этого вывода мне нужно получить электронное письмо или получить пустой в случае, если человек не найден. Чтобы получить почту для каждого человека, которого я делаю:
- set_fact:
mail_list: '{{ mail_list + item.stdout | regex_search("[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}", multiline=True, ignorecase=True)|default("Empty") }}'
with_items:
- "{{ldap_output.results}}"
Это вывод, который я получаю от ansible:
TASK [set_fact] *******************************************************************************
fatal: [127.0.0.1]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{ mail_list + item.stdout | regex_search(\"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,6}\", multiline=True, ignorecase=True)|default(\"Empty\") }}): can only concatenate list (not \"unicode\") to list"}
Вопрос был бы, как можно Я получаю адрес электронной почты из вывода ldapsearch?
Спасибо, спасибо