虽然在shell中输入
时可以使用以下命令echo -ne "myser\nmypass\n" | smbpasswd -a -s myuser
以下任务在ansible中失败
- name: add dms samba user
command: echo -ne "myuser\nmypass\n" | smbpasswd -a -s myuser
notify: restart samba
它不会产生任何错误,但不会创建用户。
在ansible 2.3.0.0
Ubuntu 16.0.4.
答案 0 :(得分:4)
如上所述,管道不能使用命令模块。我过去曾使用过类似的东西来创建Samba用户:
- name: Configure Samba users.
shell: >
(pdbedit --user={{ item.username }} 2>&1 > /dev/null)
|| (echo '{{ item.password }}'; echo '{{ item.password }}')
| smbpasswd -s -a {{ item.username }}
register: smbpasswd
changed_when: "'Added user' in smbpasswd.stdout"
with_items: "{{ samba_users }}"
loop_control:
label: "{{ item.username }}"
只有在用户不存在的情况下才会运行该任务。因此,更改密码不会适用于此示例。
答案 1 :(得分:0)
答案 2 :(得分:0)
请使用Ansible Playbook尝试此方法:
- name: set Samba passwords for each user
shell: "printf '{{ item.passwd }}\n{{ item.passwd }}\n' | smbpasswd -a {{ item.name }}"
with_items:
- "{{ users }}"
tags: smbpasswd
请注意,您需要将包含users:
的变量文件映射到以下格式:
users:
- name: userName
passwd: myClearTextPassword
请注意,要支持smbpasswd,您将以明文形式传递此密码。此外,注意到这只是一个需要包含在您的剧本中的任务。
答案 3 :(得分:0)
另一个使用字典列表的变体:
ad_users: [
{ username: john.doe, password: P4ssw0rd*, givenname: John, surname: Doe, mail: john.doe@domain, ou: "OU=Department,OU=Division" },
{ username: jane.doe, password: P455w0rd*, givenname: Jane, surname: Doe, mail: jane.doe@domain, ou: "OU=Department,OU=Division" },
]
- name: Add user to AD
command: samba-tool user create {{ item.username }} {{ item.password }} --given-name='{{ item.givenname }}' --surname='{{ item.surname }}' --mail-address={{ item.mail }} --userou='{{ item.ou }}'
loop: "{{ ad_users }}"
请记住保管敏感数据。