我正在通过Ansible执行shell命令。
有时我没有完整的foldername。假设我有dirname solr4.7.0
。
在shell中我可以输入cd solr*
。
但在ansible我做不到:
chdir=/var/solr*
有没有解决方法?
不可以。例如,chdir=
模块的command
参数不支持通配符。
您可以使用register variable来存储ls
命令的输出,从而完成您想要的任务:
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
但坦率地说,这是一个丑陋的解决方案。你最好只使用实际的目录名称。如果它在不同的主机上不同,您可以使用主机变量来适当地设置它。
正如Larsks所写,关键是使用register
,但代码不适用于我目前的ansible版本。所以这里纠正一个:
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
这有点hacky,但我发现如果你把使用通配符的命令放到脚本中,然后使用ansible'script'命令运行该脚本,那么通配符就可以了。
- name: "some command that needs to use a wildcard"
script: /script_containing_wildcard_commands.sh