我一直在寻找Interwebs来解决我的一本剧本的问题,但我相信我可能会比找出解决方案更加困惑。我希望不再有任何杂草,而是希望这里的人能够让我回到正确的道路上。
以最简单的形式,我的剧本需要创建一个AD组,然后根据从请求表单中收到的变量将成员添加到新创建的AD组中,这似乎并不困难...直到我想要从另一个变量中添加一个或五个以上。变量req_ad_user_name
将始终需要是该组的成员。变量req_ad_user_others
是表单上的可选字段。因此,根据每个唯一的请求,它可能只有一堆用户名,也可能没有。
test_playbook.yml
---
- hosts: dc
vars:
domain_name: "{{ domain_override | default ('tst.local') }}"
ou_path: "{{ ou_override | default('OU=IT,DC=tst,DC=local') }}"
dc_name: "{{ dc_override | default ('dc1') }}"
ad_group_name: "SOME_TEST_GROUP_RW"
req_ad_user_name: "tst_user"
req_ad_user_others: "tst_user2,tst_user3"
tasks:
- name: "Create AD Group for Internal Path"
win_domain_group:
name: "{{ ad_group_name }}"
description: "Testing for internalpath"
domain_server: "{{ dc_name }}"
organizational_unit: "{{ ou_path }}"
scope: global
attributes:
info: "Testing comments for tasknumber"
- name: "Add Members to new group"
win_domain_group_membership:
name: "{{ ad_group_name }}"
domain_server: "{{ dc_name }}"
members:
- "{{ req_ad_user_name }}"
state: present
...
我最初的想法是从req_ad_user_name
创建一个列表,如果不为空,则创建req_ad_user_others
。然后,循环浏览“ win_domain_group_membership”模块中的成员列表,以将其添加到组中。但是,我无法弄清楚在不同的可能情况下其逻辑是什么。
任何帮助将非常感激。
答案 0 :(得分:1)
Jinja模板可以为您提供您想要实现的所有功能。
以下是分解步骤:
req_ad_user_name
变量中列出一个列表:- debug:
msg: "{{ [req_ad_user_name] }}"
req_ad_user_others
上split
您的变量,
:- debug:
msg: "{{ req_ad_user_others.split(',') }}"
- debug:
msg: "{{ [req_ad_user_name] + req_ad_user_others.split(',') }}"
req_ad_user_others
可能是空字符串(count
加上0
个字符)的可能性,在这种情况下,我们应该使用包含以下内容的列表:仅req_ad_user_name
- debug:
msg: "{{ ([req_ad_user_name] + req_ad_user_others.split(',')) if req_ad_user_others | count > 0 else [req_ad_user_name] }}"
由于这总是会向您返回列表,因此应放心将其直接输入到执行expect a list as argument的members
的{{1}}属性中。
win_domain_group_membership
Nota:我手边没有一个Active Directory可以针对此代码测试此代码,但是我非常有信心它应该可以解决问题。
关于变量操作的演示,这里是:
- name: "Add Members to new group"
win_domain_group_membership:
name: "{{ ad_group_name }}"
domain_server: "{{ dc_name }}"
members: "{{ ([req_ad_user_name] + req_ad_user_others.split(',')) if req_ad_user_others | count > 0 else [req_ad_user_name] }}"
state: present
此输出
---
- hosts: localhost
connection: local
vars:
req_ad_user_name: "tst_user"
req_ad_user_others: "tst_user2,tst_user3"
req_ad_user_others_empty: ""
tasks:
- name: Test with req_ad_user_others, containing two users tst_user2, tst_user3
debug:
msg: "{{ ([req_ad_user_name] + req_ad_user_others.split(',')) if req_ad_user_others | count > 0 else [req_ad_user_name] }}"
- name: Test with req_ad_user_others_emtpy, an empty string
debug:
msg: "{{ ([req_ad_user_name] + req_ad_user_others_empty.split(',')) if req_ad_user_others_empty | count > 0 else [req_ad_user_name] }}"