通过Ansible将DataDog日志注释放置在部署中的问题

时间:2019-02-21 16:14:23

标签: kubernetes ansible jinja2 datadog

我正在使用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变量替换,以便可以在部署时用所需的源和服务配置部署。

请建议

1 个答案:

答案 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"}]'

但是,如果有人可以帮助我理解该行为,我将无法理解