如何在Ansible Playbook变量两侧添加双引号?附PowerShell示例
问题:如何给Ansible Playbook中的{{ hosts }}变量添加双引号?
其实你现在写的代码里已经给{{ hosts }}加上双引号啦!看你win_shell里的这两行:
$a = Get-ClusterGroup | Where-Object {$_.Name -eq "{{ hosts }}" -and $_.State -eq 'Online'} Start-VM -Name "{{ hosts }}" -ComputerName $b
这里的"{{ hosts }}"就是正确的写法——Ansible执行时会先把变量替换成实际值,最终生成的PowerShell命令里,这个值就是被双引号包裹的。
不过如果你的hosts变量值可能包含空格、双引号这类特殊字符,直接写"{{ hosts }}"可能会让PowerShell解析出错。这种情况下,更稳妥的方式是用Ansible的quote过滤器,它会自动帮你处理转义,确保生成的字符串安全可靠:
--- - hosts: all gather_facts: no tasks: - name: hyper-v shutdown vm win_shell: | $a = Get-ClusterGroup | Where-Object {$_.Name -eq {{ hosts | quote }} -and $_.State -eq 'Online'} $b = $a.OwnerNode Start-VM -Name {{ hosts | quote }} -ComputerName $b
用{{ hosts | quote }}的话,不管变量值里有什么特殊字符,都会被正确包裹成双引号字符串,比如变量值是my "test" hosts,过滤器会自动转义成"my \"test\" hosts",PowerShell就能正常识别了。
总结一下:
- 如果变量值是简单的无特殊字符的字符串,你原来的
"{{ hosts }}"写法完全没问题 - 如果变量值可能包含特殊字符,推荐用
quote过滤器来处理,更健壮
内容的提问来源于stack exchange,提问作者user197267
相关产品推荐
相关产品推荐

