【发布时间】:2019-12-22 21:47:35
【问题描述】:
我有一本这样的剧本:
- name: Install Services
hosts: ['myhost']
become: True
environment: '{{ inventory__environment | d({})
| combine(inventory__group_environment | d({}))
| combine(inventory__host_environment | d({})) }}'
vars:
# Use Python from Docker virtualenv on server
ansible_python_interpreter: '/usr/bin/env docker-python'
roles:
- role: debops.netbase
vars:
# Use normal Python
ansible_python_interpreter: '/usr/bin/env python'
tags: [ 'role::netbase', 'skip::netbase' ]
tasks:
- name: Create Network for HTTP proxy
docker_network:
name: http-proxy
internal: no
ipam_config:
- subnet: '172.42.0.0/24'
gateway: '172.42.0.1'
state: presen
...
如评论中所述,对于 docker 任务,我需要使用不同的 python 解释器。但是debops.netbase角色需要使用普通的python解释器。
通过上述设置,我希望实现这一目标。但是会发生什么:
- 角色使用
/usr/bin/env python成功执行 - 第一个任务失败,因为它还使用
/usr/bin/env python而不是/usr/bin/env docker-python
我通过查看主机上的 tmp 文件检查了这一点。
从角色中删除 var 时,解释器成功设置为 /usr/bin/env docker-python(角色失败,任务可以成功运行)。
如何在不为每个任务(有很多)定义不同的 vars 部分的情况下获得我想要的结果?
【问题讨论】: