如何在Ansible剧本中获得--limit参数的值?
在ansible中,是否可以在剧本中获得“-limit”选项的参数值?我想做的事情是这样的:如何在Ansible剧本中获得--limit参数的值?,ansible,Ansible,在ansible中,是否可以在剧本中获得“-limit”选项的参数值?我想做的事情是这样的: --- - hosts: all remote user: root tasks: - name: The value of the --limit argument debug: msg: "argument of --limit is {{ ansible-limit-arg }}" 然后,当我运行he命令时: $ ansible-playbook getLimit
---
- hosts: all
remote user: root
tasks:
- name: The value of the --limit argument
debug:
msg: "argument of --limit is {{ ansible-limit-arg }}"
然后,当我运行he命令时:
$ ansible-playbook getLimitArg.yaml --limit webhosts
我将获得以下输出:
argument of --limit is webhost
当然,我编造了变量“ansible limit arg”的名称,但是有没有一种有效的方法可以做到这一点?我可以指定“webhosts”两次,第二次使用--extra-args,但这似乎是一种迂回的方式。如果没有额外的插件/模块,就无法完成这项工作。如果您完全需要此功能,请编写操作插件并通过
cli.options
(请参阅)访问选项
注意:如果您试图使用
--limit
在不同的环境中运行剧本,请不要这样做,您可能会意外地破坏整个基础设施--而是使用不同的库存。以下是实现相同目的的小代码块
- block:
- shell: 'echo {{inventory_hostname}} >> /tmp/hosts'
- shell: cat /tmp/hosts
register: servers
- file:
path: /tmp/hosts
state: absent
delegate_to: 127.0.0.1
- debug: var=servers.stdout_lines
然后像我一样使用标准输出
- add_host:
name: "{{ item }}"
groups: cluster
ansible_user: "ubuntu"
with_items:
- "{{ servers.stdout_lines }}"
您是否考虑过使用
{{ansible\u play\u batch}
内置变量
- hosts: all
become: "False"
gather_facts: "False"
tasks:
- name: The value of the --limit argument
debug:
msg: "argument of --limit is {{ ansible_play_batch }}"
delegate_to: localhost
它不会确切地告诉您输入的参数是什么,但会告诉您Ansible是如何解释
--limit
arg的。由于Ansible 2.5可以使用新的神奇变量Ansible\u limit
访问该值,因此:
- debug:
var: ansible_limit
你为什么需要得到这些信息?
--limit
选项(可以获取列表,顺便说一句)将限制播放的目标。如果您确实需要了解缩减列表,请使用ansible\u play\u hosts
变量此应用程序适用于SAP HANA数据库。ansible的主机组名是“-limit”选项的参数,与数据库集群的环境名相同。如果我可以恢复playbook中的“-limit”值,那么我也不必单独指定环境名称。如果其他系统正在使用我的剧本,这是一个方便的问题,但也是准确的问题。我发现有趣的是,ansible\u play\u批处理
或ansible\u play\u hosts
魔术变量将包含正在运行剧本的托管主机,但ansible\u limit
没有。谢谢你的回答。