如何在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

在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 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
没有。谢谢你的回答。