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

问题描述 投票:7回答:4

在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
4个回答
9
投票

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

- debug:
    var: ansible_limit

0
投票

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

附:如果你试图使用--limit来针对不同的环境运行剧本,不要这样做,你可能会意外地吹嘘你的整个基础设施 - 改为使用不同的库存。


0
投票

这是实现相同的小代码块

- 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 }}"

0
投票

您是否考虑过使用{{ 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。

© www.soinside.com 2019 - 2024. All rights reserved.