我有一些 ansible
playbooks,有时候在本地上下文中很有意义,否则就会在远程执行。为了做到这一点,我使用 delegate_to
指令,但这也意味着我必须将所有任务都复制一遍:
---
- hosts: all
gather_facts: no
tasks:
- name: Local command
command: hostname
register: target_host
when: vhost is undefined
delegate_to: 127.0.0.1
# ---
- name: Remote command
command: hostname
register: target_host
when: vhost is defined
本地执行:
$ ansible-playbook -i inv.d/test.ini play.d/delegate.yml
PLAY [all] ********************************************************************
TASK: [Local command] *********************************************************
changed: [new-server -> 127.0.0.1]
TASK: [Remote command] ********************************************************
skipping: [new-server]
PLAY RECAP ********************************************************************
new-server : ok=1 changed=1 unreachable=0 failed=0
远程执行:
$ ansible-playbook -i inv.d/test.ini play.d/delegate.yml -e vhost=y
PLAY [all] ********************************************************************
TASK: [Local command] *********************************************************
skipping: [new-server]
TASK: [Remote command] ********************************************************
changed: [new-server]
PLAY RECAP ********************************************************************
new-server : ok=1 changed=1 unreachable=0 failed=0
有没有更聪明的方法告诉 ansible
何时回退到本地环境?目前我正在使用 ansible==1.9.2
。
connection: "{{ 'ansible_host' | default('local') }}"
?文档看起来有些模棱两可,ansible_host
被定义为“要连接的Docker容器的名称”。我愿意相信这只是文档中的一个错误。 - NarūnasKlocalhost ansible_connection=local
- udondanconnection: "{{ omit | default('local') }}"
- NarūnasKconnection
是一种行为参数,不需要应用于playbook或任务。一旦在清单或主机变量中定义,Ansible将根据连接到的主机选择正确的连接类型。http://docs.ansible.com/ansible/intro_inventory.html#list-of-behavioral-inventory-parameters - udondan