docker - docker-compose和ansible中的“mount if not exists”子句

标签 docker logging ansible

我定义了几个路径,可以在一个字典中找到日志:

"/data/athena/jenkins_master/home/logs"
"/data/athena/jenkins_master/home/logs/*"
"/data/athena/jenkins_master/home/logs/*/*"
"/data/athena/jenkins_master/home/jobs/*/builds/*"    

然后,在docker-compose中,我想挂载所有相对卷,但是由于路径中有递归信息,因此我决定挂载父目录。

docker-compose.yml
{% for log in in_filebeat_dict.filebeat.logs | default([]) %}
      - {{ log.path.split('*')[0] }}:{{ log.path.split('*')[0] }}:ro
{% endfor %}

现在我的问题是,对于所有这些条目,它将尝试挂载几次:"/data/athena/jenkins_master/home/logs",并且将失败

当我在另一部分(filebeat)中使用它时,必须将详细信息保留在字典中。

我想知道如何在docker-compose中包含“mount if if不存在”子句

我应该如何实现?

最佳答案

您可以在循环之前应用检查唯一性:

{% for log_path in in_filebeat_dict.filebeat.logs | default([]) | map(attribute='path') | map('regex_search','^([^*]+$|.*?(?=/[*]))') | list | unique %}
      - {{ log_path }}:{{ log_path }}:ro
{% endfor %}

正则表达式^([^*]+$|.*?(?=/[*]))用于选择不带*的路径或带/*的路径的第一部分。

关于docker - docker-compose和ansible中的“mount if not exists”子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47909928/

相关文章:

linux - 仅显示 ansible playbook 中 yum 列表中的某些字典值

centos - 如何使这个 ansible chkconfig 任务幂等?

amazon-web-services - AWS/ECS - 创建新服务时出现命名空间错误

docker - Kafka docker镜像中的可配置延迟

java - Logback 变量替换无法在类路径上找到属性文件

在 Solr/Lucene 中记录搜索关键字

ansible - 如何判断 ansible unarchive 模块创建了哪个目录?

linux - 在 _interactive_ docker 启动之前,docker 容器似乎有失败的/etc/hosts

node.js - 无法替换到目录/var/lib/docker/overlay2/if2ip5okvavl8u6jpdtpczuog/merged/app/node_modules/@ampproject/remapping with file

Java公共(public)记录器