[英]Ansible validate docker-compose with env_file and send to host
我創建了一個在模板文件夾中有兩個文件的角色: docker-compose.yml.j2
和env.j2
env.j2
用於 docker-compose 文件:
version: "2"
services:
service_name:
image: {{ IMAGE | mandatory }}
container_name: service_name
mem_limit: 256m
user: "2001"
env_file: ".env"
現在我的問題是:是否有一些 ansible 模塊將 docker-compose 文件發送到主機並驗證它,因為 env 和 docker-compose 位於主機上的同一文件夾中?
此 ansible 任務示例返回錯誤,因為 env 文件不在模板文件夾中,而是在主機上。
- name: "Copy env file"
ansible.builtin.template:
src: "env.j2"
dest: "/opt/db_backup/.env"
mode: '770'
owner: deployment
group: deployment
- name: "Validate and copy docker compose file"
ansible.builtin.template:
src: "docker-compose.yml.j2"
dest: "/opt/db_backup/docker-compose.yml"
mode: '770'
owner: deployment
group: deployment
validate: docker-compose -f %s config
這可能屬於template
模塊validate
參數文檔中鏈接的復雜驗證配置案例
在任何情況下,除非完全重構您的當前文件並在您的環境中傳遞更多變量(例如,允許.env
位於當前目錄之外的位置),否則您無法驗證docker-compose.yml
直到兩個文件都位於同一位置。
一個簡單的方案是將兩個文件復制到位,在對它們進行任何操作之前進行驗證,並在出現錯誤時回滾到以前的版本。 下面的例子遠非火箭證明,但會給你一個想法:
---
- hosts: localhost
gather_facts: false
vars:
IMAGE: alpine:latest
deploy_dir: /tmp/validate_compose
tasks:
- name: "make sure {{ deploy_dir }} directory exits"
file:
path: "{{ deploy_dir }}"
state: directory
- name: copy project file templates
template:
src: "{{ item }}"
dest: "{{ deploy_dir }}/{{ item | regex_replace('^(.*)\\.j2', '\\g<1>') }}"
mode: 0640
backup: true
loop:
- .env.j2
- docker-compose.yml.j2
register: copy_files
- block:
- name: check docker-compose file validity
command:
cmd: docker-compose config
chdir: "{{ deploy_dir }}"
rescue:
- name: rollback configuration to previous version for changed files
copy:
src: "{{ item.backup_file }}"
dest: "{{ item.dest }}"
remote_src: true
loop: "{{ copy_files.results | selectattr('backup_file', 'defined') }}"
- name: Give some info about error.
debug:
msg:
- The compose file did not validate.
- Please see previous error above for details
- Files have been rolled back to the latest known version.
- name: Fail
fail:
- name: Rest of the playbook using the above validated files
debug:
msg: Next tasks...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.