如何在ansible命令中提到通配符

问题描述 投票:12回答:3

我正在通过Ansible执行shell命令。

有时我没有完整的foldername。假设我有dirname solr4.7.0

在shell中我可以输入cd solr*

但在ansible我做不到:

chdir=/var/solr*

有没有解决方法?

linux ansible ansible-playbook
3个回答
12
投票

不可以。例如,chdir=模块的command参数不支持通配符。

您可以使用register variable来存储ls命令的输出,从而完成您想要的任务:

- shell: ls -d solr*
  register: dir_name
- command: some_command
  args:
    chdir: "{{ dir_name.stdout }}"

但坦率地说,这是一个丑陋的解决方案。你最好只使用实际的目录名称。如果它在不同的主机上不同,您可以使用主机变量来适当地设置它。


7
投票

正如Larsks所写,关键是使用register,但代码不适用于我目前的ansible版本。所以这里纠正一个:

- shell: ls -d solr*
  register: dir_name

- command: chdir={{ item }} some_command
  with_items: dir_name.stdout_lines

-2
投票

这有点hacky,但我发现如果你把使用通配符的命令放到脚本中,然后使用ansible'script'命令运行该脚本,那么通配符就可以了。

- name: "some command that needs to use a wildcard"
  script: /script_containing_wildcard_commands.sh
© www.soinside.com 2019 - 2024. All rights reserved.