如果我有一个需要字典或列表值参数的 ansible ad-hoc 命令,如queries参数 to postgresql_query,我如何在ansiblead-hoc 命令中调用它?
我必须编写一个单一命令的剧本吗?我正在寻找一种方法来最小化所涉及的令人困惑的引用(shell、yaml/json 等)的层数。
ansible 文档提到接受变量的结构化形式。所以我尝试了参数的 yaml 和 json 语法:
ansible -m postgresql_query -sU postgres -a '{"queries":["SELECT 1", "SELECT 2"]}'
Run Code Online (Sandbox Code Playgroud)
...但得到了ERROR! this task 'postgresql_query' has extra params, which is only allowed in the following modules: ...。
如果我@include的文件包含 yaml 或 json 内容,则同样如此
cat > 'query.yml' <<'__END__'
queries:
- "SELECT 1"
- "SELECT 2"
__END__
ansible -m postgresql_query -sU postgres -a @queries.yml
Run Code Online (Sandbox Code Playgroud)
您可以在 JSON 变量中定义一个字典,然后将其作为参数传递:
ansible -m module_name -e '{"dict": {"key": "value"}}' -a "param={{ dict }}"
Run Code Online (Sandbox Code Playgroud)
(参数位置任意)
在 Ansible (2.14.2) 中,您似乎可以直接指定 JSON
根据此处给出的答案尝试了这一点,并且成功了。
在这里,我返回由Ansible 的设置模块为主机组“psu”过滤输出收集的事实,以便根据过滤器模式列表仅看到两个事实。JSON 是一个具有单个键的字典,其值是过滤器模式列表。
ansible psu -m setup -a '{ "filter": ["ansible_distribution_version", "kernel"] }'
Run Code Online (Sandbox Code Playgroud)
输出:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |