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

时间:2017-06-30 23:15:48

标签: 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 }}"

然后当我跑他的命令时:

$ ansible-playbook getLimitArg.yaml --limit webhosts

我会得到这个输出:

argument of --limit is webhost

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

4 个答案:

答案 0 :(得分:9)

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

- debug:
    var: ansible_limit

答案 1 :(得分:0)

如果没有额外的插件/模块,您无法执行此操作。如果您完全需要此功能,请通过cli.options编写动作插件和访问选项(请参阅example)。

P.S。如果您尝试使用--limit在不同的环境中再次运行剧本,请不要这样做,您可能会意外地破坏整个基础架构 - 而是使用不同的库存。

答案 2 :(得分: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 }}"

答案 3 :(得分: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。