es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo dividir una cadena en nuevas líneas en Ansible

Estoy ejecutando un playbook de ansible con:

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

como líneas separadas por comas, deseo la salida en el archivo filebeat.yml como:

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

Estoy usando jinja2 para filebeat.yml

yaml
paths:
– {{ log_path }}

Y mi archivo de ansible testconfigure.yml es:

      - hosts: localhost
         gather_facts: no

     vars:    
         log_path: "{{ logpath.replace(',', '\n-') }}"    
     tasks:    

      - name: una prueba jija    
        template:    
          src: /repo/filebeat/filebeat.j2    
          dest : /repo/filebeat/filebeat.yml    

Estoy obteniendo la salida en el archivo filebeat.yml como:

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

También intenté logpath: “{{ logpath | regex_replace(‘,’, ‘\n-‘) }}” en mi playbook, pero sigo obteniendo la misma salida. ¿Cómo debería intentarlo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando dividir la lista de rutas de archivos separadas por comas en varias líneas en el archivo filebeat.yml usando jinja2. Sin embargo, tu implementación actual no está funcionando como se esperaba.

    Para resolver este problema, puedes usar el filtro split de jinja2 para dividir la lista separada por comas en una lista de rutas y luego usar un bucle para iterar sobre la lista y agregar cada ruta al arreglo paths en filebeat.yml.

    Tu archivo ansible actualizado se verá así:

    - hosts: localhost    
      gather_facts: no      
    
      vars:    
        log_path: "/var/logs/a*.log,/repo/log-events-a*.json,/repo/user1/log-events-b*.json"    
    
      tasks:    
        - name: una prueba de jinja    
          template:    
            src: /repo/filebeat/filebeat.j2    
            dest: /repo/filebeat/filebeat.yml    
    
        - name: dividir y agregar rutas
          lineinfile:
            path: /repo/filebeat/filebeat.yml
            line: '        - {{ path }}'
            insertafter: '      paths:'
          loop: "{{ log_path.split(',') }}"
          loop_control:
            loop_var: path
    

    Y tu archivo filebeat.j2 actualizado se verá así:

    filebeat.inputs:
    - type: log
      enabled: true
      paths:
    {% raw %}      # deja esta línea tal cual, es solo para propósitos de indentación
          # agrega rutas aquí usando el bucle
    {% endraw %}
    output.elasticsearch:
      hosts: ["localhost:9200"]
      index: "filebeat"
    

    Esto agregará cada ruta al arreglo paths en filebeat.yml en una nueva línea con la indentación adecuada.

    ¡Espero que esto te ayude!

Comments are closed.