Estoy tirando de JSON a través de la URI del módulo y se desea escribir el contenido recibido a un archivo. Soy capaz de conseguir el contenido y la salida para el depurador, así que yo sé que el contenido ha sido recibido, pero no sé la mejor práctica para la escritura de archivos.

InformationsquelleAutor Keith Adler | 2014-10-29

4 Comentarios

  1. 167

    Podría utilizar el copy módulo, con el content parámetro:

    - copy: content="{{ your_json_feed }}" dest=/path/to/destination/file
    

    La documentación aquí: copia del módulo de

    • content=»{{ your_json_feed }}» tiene que ver con los espacios en blanco y saltos de línea. Las comillas son importantes.
    • Buen punto, @m.kocikowski. Cotizaciones añadido.
    • Si me gustaría agregar varios revendedores de contenido para el archivo, necesito usar «copiar» módulo varias veces o hay alguna otra manera?
    • Me imagino que usted puede utilizar el jinja2 sintaxis para añadir variables. Algo así como «{{ variable ~ another_variable }}». No es bonita, pero si las cosas se ponen más complicadas que usted podría utilizar el template: módulo y llenarlo con las variables registradas en tiempo de ejecución.
    • Esto funciona mejor cuando se desea generar un sha256 suma de archivo en la forma shahash /path/to/file (nota 2 espacios entre) y, a continuación, validar desde la línea de comandos (a través de sha256sum -c shafile ) lo que genera a través de la Ansible.
  2. 9

    A menos que usted está escribiendo archivos muy pequeños, usted probablemente tendrá que usar plantillas.

    Ejemplo:

    - name: copy upstart script
      template: 
        src: myCompany-service.conf.j2 
        dest: "/etc/init/myCompany-service.conf"
    
    • Mientras que Ramón la respuesta de direcciones exactamente lo que se les pide, esta respuesta es la mejor estrategia en general. Por ejemplo, si usted tiene un libro de jugadas que crea máquinas virtuales en la nube y desea generar un inventario de los ejércitos para otro playbook, una plantilla es el camino a seguir.
  3. 6

    Basado en Ramón de la respuesta que se ejecute en un error. El problema donde los espacios en el JSON que traté de escribir lo tengo solucionado cambiando la tarea en la playbook a mirar como:

    - copy:
        content: "{{ your_json_feed }}"
        dest: "/path/to/destination/file"
    

    Como la de ahora, no estoy seguro de por qué esto era necesario. Mi mejor conjetura es que tenía algo que ver con cómo las variables se sustituyen en Ansible y el archivo resultante se analiza.

  4. 0

    Podemos especificar directamente el archivo de destino con el dest opción ahora. En el ejemplo de abajo, la salida json se almacena en el /tmp/repo_version_file

    - name: Get repository file repo_version model to set ambari_managed_repositories=false
    uri:
    url: 'http://<server IP>:8080/api/v1/stacks/HDP/versions/3.1/repository_versions/1?fields=operating_systems/*'
    method: GET
    force_basic_auth: yes
    user: xxxxx
    password: xxxxx
    headers:
    "X-Requested-By": "ambari"
    "Content-type": "Application/json"
    status_code: 200
    dest: /tmp/repo_version_file

Dejar respuesta

Please enter your comment!
Please enter your name here