所以我已经得到了检索广告组的成员,并给了我这样的用户ID列表的剧本:Ansible从列表
tasks:
- name: Get group members
set_fact:
member: "{{ item }}"
register: members
with_ldap:
- context: group_members
- Jira_Administrators_GG
- name: Get userids
set_fact:
userid: "{{ lookup('ldap', '{{ item.item }}', context='users') }}"
register: userids
with_items: "{{ members.results }}"
- name: Create list of userids
set_fact:
userid_list: "{{ userids.results | map(attribute='ansible_facts.userid') | list }}"
麻烦的是我结束了一个一些空行的结果列表:
- name: Show userids
debug:
msg: "{{ hostvars['localhost']['userid_list'] }}"
输出:
TASK [Show userids] **************************************
ok: [xxxxxxxxx01] => {
"msg": [
"xxxxxxxxx55",
"xxxxxxxxx58",
"xxxxxxxxx71",
[],
"xxxxxxxxx46",
[],
"xxxxxxxxx27",
[],
"xxxxxxxxx63",
"xxxxxxxxx27",
[],
"xxxxxxxxx04",
"xxxxxxxxx87"
]
}
有谁知道如何删除Bla从列表中的nk行?我已经通过http://jinja.pocoo.org/docs/2.9/templates/#builtin-filters一看,并试图一对夫妇像replace()
和rejectattr()
在map
和list
之间,但不管是什么原因,我没有得到它的权利。
编辑 - 没有工作的一些尝试......
我显然没有得到正确的语法与此一:
- name: Create list of userids
set_fact:
userid_list: "{{ userids.results | rejectattr('ansible_facts.userid', 'equalto', '') | map(attribute='ansible_facts.userid') | list }}"
..because输出是:
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: TemplateRuntimeError: no test named ''
fatal: [localhost]: FAILED! => {"failed": true, "msg": "Unexpected failure during module execution.", "stdout": ""}
我又试图map
之前移动rejectattr()
。这是更好的,实际上它运行,但似乎并没有做出结果列表中的任何差异:
- name: Create list of userids
set_fact:
userid_list: "{{ userids.results | rejectattr('ansible_facts.userid', 'equalto', '') | map(attribute='ansible_facts.userid') | list }}"
我试着用reject()
代替rejectattr()
这样的:
- name: Create list of userids
set_fact:
userid_list: "{{ userids.results | reject('equalto', '') | map(attribute='ansible_facts.userid') | list }}"
...和喜欢这样的:
- name: Create list of userids
set_fact:
userid_list: "{{ userids.results | map(attribute='ansible_facts.userid') | reject('equalto', '') | list }}"
我已经尝试了一些置换,我也试着比较'[]'
而不是''
,因为我的空行显示就像在结果列表中那样。我想我只是不明白如何正确应用过滤器。
编辑 - 变量内容
现在,如果我做
- debug:
var: userids
我得到这个(截断显示2分的结果已经用户ID填充和1与用户ID空白):
ok: [localhost] => {
"userids": {
"changed": false,
"msg": "All items completed",
"results": [
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"ansible_facts": {
"userid": "xxxxxxxxx55"
},
"changed": false,
"item": {
"_ansible_item_result": true,
"_ansible_no_log": false,
"ansible_facts": {
"member": "CN=Liam Fitzpatrick,OU=My User OU,DC=my,DC=domain,DC=com"
},
"changed": false,
"item": "CN=Liam Fitzpatrick,OU=My User OU,DC=my,DC=domain,DC=com"
}
},
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"ansible_facts": {
"userid": "xxxxxxxxx58"
},
"changed": false,
"item": {
"_ansible_item_result": true,
"_ansible_no_log": false,
"ansible_facts": {
"member": "CN=Mr Jones,OU=My User OU,DC=my,DC=domain,DC=com"
},
"changed": false,
"item": "CN=Mr Jones,OU=My User OU,DC=my,DC=domain,DC=com"
}
},
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"ansible_facts": {
"userid": []
},
"changed": false,
"item": {
"_ansible_item_result": true,
"_ansible_no_log": false,
"ansible_facts": {
"member": "CN=Mr Smith,OU=My User OU,DC=my,DC=domain,DC=com"
},
"changed": false,
"item": "CN=Mr Smith,OU=My User OU,DC=my,DC=domain,DC=com"
}
}
有点苛刻!我会说我比懒更傻。让我有什么不工作的一些例子更新的问题... – fitzplb
我已经将服务器名称和用户ID列出,因为我不允许公开分享它们。 'userid'是“Get userids”任务中设置的一个事实。 'userids'是包含用户标识列表的注册变量。 'ansible_facts.userid'是我如何从'userids.result'中检索用户名的。 – fitzplb
为什么史密斯先生没有账号?像其他小组成员一样,它是一个常规账户吗? – techraf