use*_*180 13 linux ansible ansible-playbook
我正在通过Ansible执行shell命令.
有时我没有完整的foldername.假设我有dirname solr4.7.0.
在shell中我可以输入cd solr*.
但在ansible我做不到:
chdir=/var/solr*
有没有解决方法?
lar*_*sks 13
否.chdir=例如,command模块的参数不支持通配符.
您可以使用寄存器变量来完成您想要的操作以存储ls命令的输出:
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
Run Code Online (Sandbox Code Playgroud)
但坦率地说,这是一个丑陋的解决方案.你最好只使用实际的目录名称.如果它在不同的主机上不同,您可以使用主机变量来适当地设置它.
正如Larsks写的关键是要使用register,但代码不能用于我当前的ansible版本.所以这里纠正一个:
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
Run Code Online (Sandbox Code Playgroud)
小智 5
在命令行上使用 ansible 来执行临时命令,通配符非常有用,例如查看某个文件是否存在于所有系统上。
我也很难做到:
$ ansible production -a "ls /mypath/*xxx*"
但将其包装在 bash -c '...' 中有效:
$ ansible production -a "bash -c 'ls /mypath/*xxx*'"