【发布时间】:2020-04-13 05:42:29
【问题描述】:
我们正在尝试将领域用于我们的 linux 服务器的域集成
我正在尝试使用命令模块在 playbook 中使用以下代码,但出现错误:
- name: install pexpect using pip
shell: /bin/bash -c "pip install pexpect"
- name: Join system to AD
expect:
command: "{{ item }}"
loop:
- source /etc/os-release
- realm join --membership-software=adcli --user=username@EXAMPLE.COM --computer-ou="OU={{ env }},OU={{ account }},OU=XXXX,OU=XXXXXX,DC=XXXXXXX,DC=XXXXXXX" --os-name="$PRETTY_NAME" --os-version="$VERSION" <DCNAME>
responses:
Password for *: "{{ username | b64decode }}"
错误:
TASK [adjoin : Join system to AD] ***********************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'item' is undefined\n\nThe error appears to be in '/tmp/ansiblepull/playbooks/roles/adjoin/tasks/main.yml': line 58, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Join system to AD\n ^ here\n"}
谁能帮我解决这个问题。
【问题讨论】:
-
1) 循环在您的任务中缩进错误:它是一个任务选项,而不是
expect模块选项。 2)与您当前的问题无关,但良好的做法:不要用shell安装python模块,使用pipmodule。 -
谢谢@Zeitounator 你能给出命令示例来使用循环与期望模块。
-
docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html。 TLDR;将循环放在任务的末尾,缩进级别与
expect和name相同。 -
我没有看到任何关于在期望模块中使用多个命令的示例以及我们如何在命令和期望模块中使用循环?
-
一种简单的方法是将这些命令添加到脚本中,将脚本推送到主机并在期望模块命令中调用该脚本。如果您想做一些更花哨的事情,请阅读
expectdocumentation,注意注释,移至shellmodule 文档并在那里查找期望示例。