如何将字典传递给可解析的临时命令

  • 本文关键字:命令 字典 ansible
  • 更新时间 :
  • 英文 :


如果我有一个可解析的ad-hoc命令想要一个字典或列表值参数,比如queriespostgresql_query的参数,我如何在ansiblead-hoc指令中调用它?

我必须写一本单命令的剧本吗?我正在寻找一种方法来最大限度地减少所涉及的令人困惑的引用(shell、yaml/json等(的层数。

易解释的文档提到接受变量的结构化形式。因此,我尝试了参数的yaml和json语法:

ansible -m postgresql_query -sU postgres -a '{"queries":["SELECT 1", "SELECT 2"]}'

而得CCD_ 4。

如果我@include是一个包含yaml或json内容(如(的文件,也是如此

cat > 'query.yml' <<'__END__'
queries:
- "SELECT 1"
- "SELECT 2"
__END__
ansible -m postgresql_query -sU postgres -a @queries.yml

您可以在JSON变量中定义一个字典,然后将其作为参数传递给下一个:

ansible -m module_name -e '{"dict": {"key": "value"}}' -a "param={{ dict }}" 

(参数位置任意(

在Ansible(2.14.2(中,您可以直接指定JSON

根据这里给出的答案尝试了一下,结果奏效了。

在这里,我返回由Ansible的主机组"的设置模块收集的事实;psu";根据过滤器模式列表过滤输出以仅查看两个事实。JSON是一个带有单个关键字的字典,该关键字的值是过滤器模式的列表。

ansible psu -m setup -a '{ "filter": ["ansible_distribution_version", "kernel"] }'

输出:

psu1 | SUCCESS => {
"ansible_facts": {
"ansible_distribution_version": "8.7",
"ansible_kernel": "5.4.17-2136.318.7.1.el8uek.x86_64"
},
"changed": false
}
psu2 | SUCCESS => {
"ansible_facts": {
"ansible_distribution_version": "8.7",
"ansible_kernel": "5.4.17-2136.318.7.1.el8uek.x86_64"
},
"changed": false
}

我有一个大部分的解决方案-一种不用额外引用就可以表达shell脚本或查询负载之类内容的方法。但它很丑陋:

ansible hostname -m postgresql_query -sU postgres -a 'query="{{query}}"' -e @/dev/stdin <<'__END__'
query: |
SELECT 'no special quotes needed' AS "multiline
identifier works fine" FROM 
generate_series(1,2)
__END__

这不仅令人羞愧地糟糕,而且似乎对列表(数组(不起作用:

ansible hostname -m postgresql_query -sU postgres -vvv -a 'query="{{query}}"' -e @/dev/stdin <<'__END__'
queries:
- |
SELECT 1
- |
SELECT 2
__END__

故障

hostname | FAILED! => {
"changed": false, 
"err": "syntax error at or near "<"nLINE 1: <bound method Templar._query_lookup of <ansible.template.Tem...n        ^n", 
"invocation": {
"module_args": {
"autocommit": false, 
"conninfo": "", 
"queries": null, 
"query": "<bound method Templar._query_lookup of <ansible.template.Templar object at 0x7f72531c61d0>>"
}
}, 
"msg": "Database query failed"
}

因此,看起来某种懒惰的评估正在破坏事物。

最新更新