我正在使用ansible 2.7版进行kubernetes部署。 要将日志发送到kubernetes上的datadog的一种方法是配置如下所示的注释,
template:
metadata:
annotations:
ad.datadoghq.com/nginx.logs: '[{"source":"nginx","service":"webapp"}]'
这工作正常,我可以在DataDog中看到日志。
但是我想通过在我下面使用过的kubernetes上进行ansible部署来实现以上配置
template:
metadata:
annotations:
ad.datadoghq.com/xxx.logs: "{{ lookup('template', './datadog.json.j2')}}"
和datadog.json.j2如下所示
'[{{ '{' }}"source":"{{ sourcea }}"{{ ',' }} "service":"{{ serviceb }}"{{ '}' }}]' **--> sourcea and serviceb are defined as vars**
但是,部署后的最终配置如下
template:
metadata:
annotations:
ad.datadoghq.com/yps.logs: |
'[{"source":"test", "service":"test"}]'
并且此配置不允许datadog代理解析失败并出现以下错误的日志
[ AGENT ] 2019-xx-xx xx10:50 UTC | ERROR | (kubelet.go:97 in parseKubeletPodlist) | Can't parse template for pod xxx-5645f7c66c-s9zj4: could not extract logs config: in logs: invalid character '\'' looking for beginning of value
如果我使用下面的错误代码(使用替换)
template:
metadata:
annotations:
ad.datadoghq.com/xxx.logs: "{{ lookup('template', './datadog.json.j2', convert_data=False) | string | replace('\n','')}}"
它生成如下的部署配置
template:
metadata:
annotations:
ad.datadoghq.com/yps.logs: '''[{"source":"test", "service":"test"}]'''
creationTimestamp: null
labels:
哪个也会失败,
要使用ansible配置工作配置,我必须删除引号(|)或使用replace时出现的三个引号。
我想使用jinja变量替换,以便可以在部署时用所需的源和服务配置部署。
请建议
答案 0 :(得分:1)
通过在datadog.json.j2模板定义.e.e中引入空间
[{"source":"{{ sourcea }}"{{ ',' }} "service":"{{ serviceb }}"}] (space at start)
并再次运行部署,我得到了如下的工作配置
template:
metadata:
annotations:
ad.datadoghq.com/yps.logs: ' [{"source":"test", "service":"test"}]'
但是,如果有人可以帮助我理解该行为,我将无法理解