在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。