Ansible如何在换行符中拆分字符串

Ansible how to split string in newline

我 运行 在 ansible 剧本中有:

--extra-vars "log_path=/var/logs/a*.log,/repo/log-events-a*.json,repo/user1/log-events-b*.json"

作为逗号分隔行,我希望 filebeat.yml 文件中的输出为

      paths:    
        - /var/logs/a*.log    
        - /repo/log-events-a*.json    
        - /repo/user1/log-events-b*.json    

我正在为 filebeat.yml

使用 jinja2
     paths:    
        -  {{ log_path }}

我的ansible文件testconfigure.yml是

      - hosts: localhost    
         gather_facts: no    
      
         vars:    
             log_path: "{{ logpath.replace(',', '\n-')}}"    
         tasks:    
    
          - name: a jija test    
            template:    
              src: /repo/filebeat/filebeat.j2    
              dest : /repo/filebeat/filebeat.yml    
    

我在 filebeat.yml 文件中得到的输出为:

    paths:
     - /var/logs/*.log,/repo/log-events-a*.json,/repo/user1/log-events-b*.json

我也在我的剧本中尝试了 logpath: "{{ logpath | regex_replace(',', '\n-') }",但仍然得到相同的输出。 我该如何尝试?

创建一个 j2 文件:

paths:
{% for log in log_path %}
  - {{ log }}
{% endfor %}

剧本:

- hosts: localhost
  vars:    
    log_path: "{{ logpath.split(',') }}"
  tasks:

    - name: templating
      template:
        src: filebeat.j2
        dest: filebeat.yml

和要调用的命令:

ansible-playbook yourplaybook.yml --extra-vars "logpath=/var/logs/a*.log,/repo/log-events-a*.json,repo/user1/log-events-b*.json

结果:

paths:
  - /var/logs/a*.log
  - /repo/log-events-a*.json
  - repo/user1/log-events-b*.json

如果你只想创建一个var文件,不需要模板:

- name: create var file
  copy:
    content: "{{ log_path | to_nice_yaml }}"
    dest: filebeat.yml

结果:

paths:
- /var/logs/a*.log
- /repo/log-events-a*.json
- repo/user1/log-events-b*.json