Ansible 将模板复制到具有不同值的不同目录
Ansible Copy Template to different directory with different value
我正在创建一个 Ansible 角色。有一个任务将启动 2 docker 个容器。有一个 docker-compose.yml.j2
文件。 docker-compose.yml.j2
文件将被复制到 2 个不同的目录中。当 docker-compose.yml.j2
被复制到 2 个不同的目录时,组合文件中的 docker 服务名称将根据 docker-compose.yml.j2
文件被复制到哪个目录而改变。在这里我卡住了 -
- 变量-
chain_name: ['goerli', 'ropsten']
ropsten _directory: '$HOME/goerli-chain-stack'
goerli_directory: '$HOME/ropsten-chain-stack'
- 任务(片段)
- name: Copy Docker Compose file to goerli & ropsten directory
template:
src: docker-compose.yml.j2
dest: "{{ item }}/docker-compose.yml"
with_items:
- "{{ goerli_directory }}"
- "{{ ropsten_directory }}"
- 模板
version: '2.0'
services:
{% if {{ goerli_directory }} %} goerli: {% else {{ ropsten _directory }} %} ropsten: {% endif %}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
当 docker-compose.yml.j2
文件被复制到文件夹 goerli_directory
时,chain_name
将是 goerli
,ropsten_directory
也是如此,chain_name
将是 ropsten
.
{% if {{ goerli_directory }} %} goerli: {% else {{ ropsten _directory }} %} ropsten: {% endif %}:
- 这不起作用,出现模板错误。这只是一个想法,去实现。
我怎样才能做到这样 -
version: '2.0'
services:
goerli: # or ropsten
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
你可以过去
version: '2.0'
services:
{% if item == goerli_directory %}goerli{% else %}ropsten{% endif %}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
因为变量 item
,这是您当前正在循环的项目,可以在您的模板中访问,并且等于那些 goerli_directory
和 ropsten_directory
变量的内容因为它们是在您的 with_items
.
中处理的
甚至使用更优雅的 Jinja inline if expression:
version: '2.0'
services:
{{ 'goerli' if item == goerli_directory else 'ropsten' }}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
如果您想使用 chain_name
变量,请使用 vars
lookup:
任务将变为:
- name: Copy Docker Compose file to goerli & ropsten directory
template:
src: docker-compose.yml.j2
dest: "{{ lookup('vars', item ~ '_directory') }}/docker-compose.yml"
loop: "{{ chain_name }}"
并且 docker-compose 模板被简化并通过:
version: '2.0'
services:
{{ item }}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
我正在创建一个 Ansible 角色。有一个任务将启动 2 docker 个容器。有一个 docker-compose.yml.j2
文件。 docker-compose.yml.j2
文件将被复制到 2 个不同的目录中。当 docker-compose.yml.j2
被复制到 2 个不同的目录时,组合文件中的 docker 服务名称将根据 docker-compose.yml.j2
文件被复制到哪个目录而改变。在这里我卡住了 -
- 变量-
chain_name: ['goerli', 'ropsten']
ropsten _directory: '$HOME/goerli-chain-stack'
goerli_directory: '$HOME/ropsten-chain-stack'
- 任务(片段)
- name: Copy Docker Compose file to goerli & ropsten directory
template:
src: docker-compose.yml.j2
dest: "{{ item }}/docker-compose.yml"
with_items:
- "{{ goerli_directory }}"
- "{{ ropsten_directory }}"
- 模板
version: '2.0'
services:
{% if {{ goerli_directory }} %} goerli: {% else {{ ropsten _directory }} %} ropsten: {% endif %}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
当 docker-compose.yml.j2
文件被复制到文件夹 goerli_directory
时,chain_name
将是 goerli
,ropsten_directory
也是如此,chain_name
将是 ropsten
.
{% if {{ goerli_directory }} %} goerli: {% else {{ ropsten _directory }} %} ropsten: {% endif %}:
- 这不起作用,出现模板错误。这只是一个想法,去实现。
我怎样才能做到这样 -
version: '2.0'
services:
goerli: # or ropsten
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
你可以过去
version: '2.0'
services:
{% if item == goerli_directory %}goerli{% else %}ropsten{% endif %}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
因为变量 item
,这是您当前正在循环的项目,可以在您的模板中访问,并且等于那些 goerli_directory
和 ropsten_directory
变量的内容因为它们是在您的 with_items
.
甚至使用更优雅的 Jinja inline if expression:
version: '2.0'
services:
{{ 'goerli' if item == goerli_directory else 'ropsten' }}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/
如果您想使用 chain_name
变量,请使用 vars
lookup:
任务将变为:
- name: Copy Docker Compose file to goerli & ropsten directory
template:
src: docker-compose.yml.j2
dest: "{{ lookup('vars', item ~ '_directory') }}/docker-compose.yml"
loop: "{{ chain_name }}"
并且 docker-compose 模板被简化并通过:
version: '2.0'
services:
{{ item }}:
image: {{ parity_version }}
restart: always
command:
--config /parity/config/parity.toml
volumes:
- ./config:/parity/config:ro
- ./chain-data:/home/parity/.local/share/io.parity.ethereum/