在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,但这似乎是一种迂回的方式。
答案 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。