CSV file formatting using ansible

Recently i wrote a playbook to pull the data from Loadbalancer server.
Output is saving in 1st row of each column.
output has : data separated with spaces, Tabs and :
I want to apply delimit option only on tabs spaces and : which i am not able to. Kindly suggest if you have any solution.

EX:
xxx::Node: IP.ip.ip.ip (ip.ip.ip.ip)

Assuming you have the data from your load balancer stored in a registered variable you could run copy to write the file to disk on the controller, and then a shell task to use ‘tr’ command to convert the whitespace, tabs and : to a comma, and then you would have .csv file you could process. Something like the following (which I have NOT tested):

`

  • name: copy loadbalancer output to disk
    copy:
    content: “{{ output_from_load_balancer }}”
    dest: /tmp/load-balancer-raw
    delegate_to: localhost

  • name: make raw loadbalancer into csv
    shell: cat /tmp/load-balancer-raw | tr [:blank:] , | tr : , > /tmp/load-balancer-raw
    delegate_to: localhost
    `

Also worth investigating are the lookups that ansible has. See https://docs.ansible.com/ansible/latest/plugins/lookup.html You might want to use https://docs.ansible.com/ansible/latest/plugins/lookup/csvfile.html to load the csv for further processing.

Also worth exploring to see if you can get more structured data out of your load balancer, preferably json or yaml, both of which are much easier to then use within ansible.

Hope this helps,

Jon

I already used it, but still im getting output in this format which i cannot filter it …

tasks:

  • name: print date
    set_fact: temp=“{{lookup(‘pipe’,‘date "+%Y-%m-%d-%H-%M"’)}}”

  • name: creates file
    file:
    path: “/tmp/loadbalancer_{{ temp }}.csv”
    state: touch

  • name: creates file
    file:
    path: “/tmp/loadbalancer_{{ temp }}.txt”
    state: touch

  • name: print date
    set_fact: files=“loadbalancer_{{ temp }}.csv”

  • name: Run Health Checks on LoadBalancer servers
    bigip_command:
    commands:

  • show sys version

  • show sys service | grep tmm

  • show ltm

  • show sys memory
    provider:
    server: xxxx.xxxx
    password: “{{ xxxxx }}”
    user: “{{ xxxxx }}”
    validate_certs: no
    register: version
    delegate_to: localhost

  • name: Updating variable
    copy: content=“{{ version.stdout_lines | to_nice_yaml }}” dest=“/tmp/loadbalancer_{{ temp }}.txt”

  • name: Parse the CSV file
    shell:
    cmd: |
    cp -f “/tmp/loadbalancer_{{ temp }}.txt” /tmp/temp.txt
    cat /tmp/temp.txt| tr -s ‘[:blank:]’ ’ ’ > “/tmp/loadbalancer_{{ temp }}.csv”

Unless you have a very old F5, you’d probably be better off gathering facts from the f5 - the console output looks really hard to parse. https://docs.ansible.com/ansible/latest/modules/bigip_device_facts_module.html