如何在Ansible剧本中获得--limit参数的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Ansible剧本中获得--limit参数的值?相关的知识,希望对你有一定的参考价值。

在ansible中,是否有可能在剧本中获得参数的值 - “limit”选项?我想做的是这样的:

---
- hosts: all
  remote user: root
  tasks:
  - name: The value of the --limit argument
    debug:
      msg: "argument of --limit is {{ ansible-limit-arg }}"

然后,当我运行他的命令时:

$ ansible-playbook getLimitArg.yaml --limit webhosts

我会得到这个输出:

argument of --limit is webhost

当然,我编写了变量“ansible-limit-arg”的名称,但有没有一种有效的方法呢?我可以指定两次“webhosts”,第二次使用--extra-args,但这似乎是一种迂回的方式。

答案

从Ansible 2.5开始,您可以使用新的魔术变量ansible_limit访问该值,因此:

- debug:
    var: ansible_limit
另一答案

没有额外的插件/模块,你不能这样做。如果您完全需要这个,请通过cli.options编写动作插件和访问选项(请参阅example)。

附:如果你试图使用--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

然后像我一样使用stdout_lines输出

- add_host:
    name: "{{ item }}"
    groups: cluster
    ansible_user: "ubuntu"
  with_items:
    - "{{ servers.stdout_lines }}"
另一答案

您是否考虑过使用{{ ansible_play_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剧本中获得--limit参数的值?的主要内容,如果未能解决你的问题,请参考以下文章

ansible——playbook剧本

强制 Ansible 从组中收集事实

使用 Vagrant 测试 Ansible 剧本 | Linux 中国

如何编写清晰的Ansible剧本(复杂剧本如何构建)

如何编写清晰的Ansible剧本(复杂剧本如何构建)

如何在剧本中设置Ansible标签?