1

I have the following ansible playbook code which prints the some metrices of one remote server. Here I want to print the output in the csv file with the exact msg format shown in the output. How to print this in csv file.

Ansible playbook:

  tasks:
    - name: Get ip address of the remote node
      ansible.builtin.shell: hostname -i | awk '{print $2}'
      register: ipaddr

    - name: Check uptime
      shell: uptime | cut -d',' -f1
      register: uptime_op
    - debug:
        msg: "{{uptime_op.stdout_lines}}"

    - name: Get lsbkl value
      shell: lsblk
      register: lsblk_output

    - debug:
        msg: "{{lsblk_output.stdout_lines}}"

    - name: Get Disc space value
      shell: df -h
      register: df_output
    - debug:
        msg: "{{df_output.stdout_lines}}"

output:


PLAY [test_host] *************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************
Tuesday 20 December 2022  10:07:07 -0800 (0:00:00.017)       0:00:00.017 ******
ok: [hostname.domain.com]

TASK [Get ip address of the remote node] ************************************************************************************
Tuesday 20 December 2022  10:07:14 -0800 (0:00:07.399)       0:00:07.417 ******
changed: [hostname.domain.com]

TASK [Check uptime] *********************************************************************************************************
Tuesday 20 December 2022  10:07:18 -0800 (0:00:03.860)       0:00:11.278 ******
changed: [hostname.domain.com]

TASK [debug] ****************************************************************************************************************
Tuesday 20 December 2022  10:07:22 -0800 (0:00:03.781)       0:00:15.059 ******
ok: [hostname.domain.com] => {
    "msg": [
        " 23:37pm  up 359 days  5:53"
    ]
}

TASK [Get lsbkl value] ******************************************************************************************************
Tuesday 20 December 2022  10:07:22 -0800 (0:00:00.086)       0:00:15.145 ******
changed: [hostname.domain.com]

TASK [debug] ****************************************************************************************************************
Tuesday 20 December 2022  10:07:26 -0800 (0:00:03.815)       0:00:18.960 ******
ok: [hostname.domain.com] => {
    "msg": [
        "NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT",
        "sda       8:0    0   1.1T  0 disk ",
        "├─sda1    8:1    0    15G  0 part /",
        "├─sda2    8:2    0   518M  0 part /boot/efi",
        "├─sda3    8:3    0     1K  0 part ",
        "├─sda5    8:5    0     2G  0 part /ctools",
        "├─sda6    8:6    0    10G  0 part /var",
        "├─sda7    8:7    0    48G  0 part [SWAP]",
        "├─sda8    8:8    0   250M  0 part /dsm",
        "├─sda9    8:9    0   501M  0 part /var/cfengine",
        "├─sda10   8:10   0    10G  0 part /tmp",
        "└─sda11   8:11   0     1T  0 part /infrastructure",
        "sdb       8:16   0   1.8T  0 disk ",
        "├─sdb1    8:17   0 484.3G  0 part /p4depot",
        "├─sdb2    8:18   0 931.3G  0 part /p4meta",
        "└─sdb3    8:19   0 372.9G  0 part /p4log"
    ]
}

TASK [Get Disc space value] *************************************************************************************************
Tuesday 20 December 2022  10:07:26 -0800 (0:00:00.088)       0:00:19.049 ******
changed: [hostname.domain.com]

TASK [debug] ****************************************************************************************************************
Tuesday 20 December 2022  10:07:30 -0800 (0:00:03.787)       0:00:22.836 ******
ok: [hostname.domain.com] => {
    "msg": [
        "Filesystem                              Size  Used Avail Use% Mounted on",
        "devtmpfs                                189G  8.0K  189G   1% /dev",
        "tmpfs                                   189G     0  189G   0% /dev/shm",
        "tmpfs                                   189G  4.0G  185G   3% /run",
        "tmpfs                                   189G     0  189G   0% /sys/fs/cgroup",
        "/dev/sda1                                15G   11G  4.8G  69% /",
        "/dev/sda2                               518M     0  518M   0% /boot/efi",
        "/dev/sda10                               10G   83M   10G   1% /tmp",
        "/dev/sda11                              1.1T   34M  1.1T   1% /infrastructure",
        "/dev/sda8                               247M   62M  185M  25% /dsm",
        "/dev/sda6                                10G  1.5G  8.6G  15% /var",
        "/dev/sda9                               498M  119M  379M  24% /var/cfengine",
        "/dev/sdb2                               931G   30G  902G   4% /p4meta",
        "/dev/sdb3                               373G   61M  373G   1% /p4log",
        "/dev/sdb1                               485G  112G  373G  23% /p4depot",
        "/dev/sda5                               2.1G  3.6M  1.8G   1% /ctools",
        "tmpfs                                   1.0G     0  1.0G   0% /dsm/tmp/dsmbg.tmpfs",
        "10.223.232.121:/new_itools              951G  497G  454G  53% /nfs/site/itools",
        "incfs03n03b-04:/common_usr_local         11G  1.2G  8.9G  12% /nfs/iind/local",
        "incfs04n08b-1:/prod                     513M  1.5M  512M   1% /nfs/iind/proj/prod",
        "incfs06n11b-1:/home0                    351G  149G  202G  43% /nfs/iind/disks/home23",
        "incfs02n10a-1:/iind_disks_home24        501G   59G  442G  12% /nfs/iind/disks/home24",
        "incfs06n04a-05:/iind_gen_adm            301G  176G  125G  59% /nfs/site/gen/adm",
        "incfs03n06b-1:/ba_ctg_home01            301G  263G   38G  88% /nfs/iind/disks/home110",
        "inc08n07b-1:/home_tree                   11G   79M   10G   1% /nfs/iind/home",
        "incfs06n10a-1:/iind_gen_adm_netmeter_m   81G   28G   53G  35% /nfs/iind/disks/iind_gen_adm_netmeter",
        "tmpfs                                    38G     0   38G   0% /run/user/37124",
        "incfs07n05b-1:/common                   201G  158G   43G  79% /nfs/site/disks/iind_gen_adm_common",
        "tmpfs                                    38G     0   38G   0% /run/user/12142325"
    ]
}

PLAY RECAP ******************************************************************************************************************
hostname.domain.com   : ok=8    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Attaching the expected csv file how it should look like.

James Z
  • 12,209
  • 10
  • 24
  • 44
  • 3
    There is no attached CSV – James Z Dec 20 '22 at 18:33
  • ` - name: Build out CSV file ansible.builtin.lineinfile: dest: "{{ csv_path }}/{{ csv_filename }}" line: "{{uptime_op.stdout}},{{lsblk_op.stdout}},{{df_op.stdout}}" create: true state: present delegate_to: localhost` >The above task I tried but it didnt print the output in the expected format in the .csv file. – saravanan jothilingam Dec 20 '22 at 18:34
  • "_with the exact `msg` format shown in the output_", does it mean including square brackets, quotes and comma like `["line 1","line 2",...]`? Or just the content of `stdout_lines` which would almost be the stdout only"? Should it include the Ansible play host and the OK message? – U880D Dec 20 '22 at 19:16

1 Answers1

2

Given the registered data df_output.stdout_lines there must be also df_output.stdout attribute. Use the filter community.general.jc and parse the registered data

    - set_fact:
        df: "{{ df_output.stdout|community.general.jc('df') }}"

gives

  df:
  - available: 189
    filesystem: devtmpfs
    mounted_on: /dev
    size: 189G
    use_percent: 1
    used: 8
  - available: 189
    filesystem: tmpfs
    mounted_on: /dev/shm
    size: 189G
    use_percent: 0
    used: 0

    ...

Then, for each host create a CSV file on the controller. For example,

    - copy:
        dest: "/tmp/ansible_df_{{ item }}.csv"
        content: |
          {{ df_output.stdout_lines.0.split()[:-1]|join(',') }}
          {% for m in hostvars[item]['df'] %}
          {{ m.filesystem }},{{ m.size }},{{ m.used }},{{m.available }},{{ m.use_percent }},{{ m.mounted_on }}
          {% endfor %}
      loop: "{{ ansible_play_hosts }}"
      run_once: true
      delegate_to: localhost

will create

shel> cat /tmp/ansible_df_localhost.csv 
Filesystem,Size,Used,Avail,Use%,Mounted
devtmpfs,189G,8,189,1,/dev
tmpfs,189G,0,189,0,/dev/shm
tmpfs,189G,4,185,3,/run
tmpfs,189G,0,189,0,/sys/fs/cgroup
/dev/sda1,15G,11,4,69,/
/dev/sda2,518M,0,518,0,/boot/efi
/dev/sda10,10G,83,10,1,/tmp
/dev/sda11,1.1T,34,1,1,/infrastructure
/dev/sda8,247M,62,185,25,/dsm
/dev/sda6,10G,1,8,15,/var
/dev/sda9,498M,119,379,24,/var/cfengine
/dev/sdb2,931G,30,902,4,/p4meta
/dev/sdb3,373G,61,373,1,/p4log
/dev/sdb1,485G,112,373,23,/p4depot
/dev/sda5,2.1G,3,1,1,/ctools
tmpfs,1.0G,0,1,0,/dsm/tmp/dsmbg.tmpfs
10.223.232.121:/new_itools,951G,497,454,53,/nfs/site/itools
incfs03n03b-04:/common_usr_local,11G,1,8,12,/nfs/iind/local
incfs04n08b-1:/prod,513M,1,512,1,/nfs/iind/proj/prod
incfs06n11b-1:/home0,351G,149,202,43,/nfs/iind/disks/home23
incfs02n10a-1:/iind_disks_home24,501G,59,442,12,/nfs/iind/disks/home24
incfs06n04a-05:/iind_gen_adm,301G,176,125,59,/nfs/site/gen/adm
incfs03n06b-1:/ba_ctg_home01,301G,263,38,88,/nfs/iind/disks/home110
inc08n07b-1:/home_tree,11G,79,10,1,/nfs/iind/home
incfs06n10a-1:/iind_gen_adm_netmeter_m,81G,28,53,35,/nfs/iind/disks/iind_gen_adm_netmeter
tmpfs,38G,0,38,0,/run/user/37124
incfs07n05b-1:/common,201G,158,43,79,/nfs/site/disks/iind_gen_adm_common
tmpfs,38G,0,38,0,/run/user/12142325

Given the data for testing

shell> cat data.json
{
    "df_stdout_lines": [
        "Filesystem                              Size  Used Avail Use% Mounted on",
        "devtmpfs                                189G  8.0K  189G   1% /dev",
        "tmpfs                                   189G     0  189G   0% /dev/shm",
        "tmpfs                                   189G  4.0G  185G   3% /run",
        "tmpfs                                   189G     0  189G   0% /sys/fs/cgroup",
        "/dev/sda1                                15G   11G  4.8G  69% /",
        "/dev/sda2                               518M     0  518M   0% /boot/efi",
        "/dev/sda10                               10G   83M   10G   1% /tmp",
        "/dev/sda11                              1.1T   34M  1.1T   1% /infrastructure",
        "/dev/sda8                               247M   62M  185M  25% /dsm",
        "/dev/sda6                                10G  1.5G  8.6G  15% /var",
        "/dev/sda9                               498M  119M  379M  24% /var/cfengine",
        "/dev/sdb2                               931G   30G  902G   4% /p4meta",
        "/dev/sdb3                               373G   61M  373G   1% /p4log",
        "/dev/sdb1                               485G  112G  373G  23% /p4depot",
        "/dev/sda5                               2.1G  3.6M  1.8G   1% /ctools",
        "tmpfs                                   1.0G     0  1.0G   0% /dsm/tmp/dsmbg.tmpfs",
        "10.223.232.121:/new_itools              951G  497G  454G  53% /nfs/site/itools",
        "incfs03n03b-04:/common_usr_local         11G  1.2G  8.9G  12% /nfs/iind/local",
        "incfs04n08b-1:/prod                     513M  1.5M  512M   1% /nfs/iind/proj/prod",
        "incfs06n11b-1:/home0                    351G  149G  202G  43% /nfs/iind/disks/home23",
        "incfs02n10a-1:/iind_disks_home24        501G   59G  442G  12% /nfs/iind/disks/home24",
        "incfs06n04a-05:/iind_gen_adm            301G  176G  125G  59% /nfs/site/gen/adm",
        "incfs03n06b-1:/ba_ctg_home01            301G  263G   38G  88% /nfs/iind/disks/home110",
        "inc08n07b-1:/home_tree                   11G   79M   10G   1% /nfs/iind/home",
        "incfs06n10a-1:/iind_gen_adm_netmeter_m   81G   28G   53G  35% /nfs/iind/disks/iind_gen_adm_netmeter",
        "tmpfs                                    38G     0   38G   0% /run/user/37124",
        "incfs07n05b-1:/common                   201G  158G   43G  79% /nfs/site/disks/iind_gen_adm_common",
        "tmpfs                                    38G     0   38G   0% /run/user/12142325"
    ]
}

Example of a complete playbook for testing

- hosts: localhost
  vars_files:
    - data.json
  vars:
    df_output:
      stdout: |
        Filesystem                              Size  Used Avail Use% Mounted on
        devtmpfs                                189G  8.0K  189G   1% /dev
        tmpfs                                   189G     0  189G   0% /dev/shm
        tmpfs                                   189G  4.0G  185G   3% /run
        tmpfs                                   189G     0  189G   0% /sys/fs/cgroup
        /dev/sda1                                15G   11G  4.8G  69% /
        /dev/sda2                               518M     0  518M   0% /boot/efi
        /dev/sda10                               10G   83M   10G   1% /tmp
        /dev/sda11                              1.1T   34M  1.1T   1% /infrastructure
        /dev/sda8                               247M   62M  185M  25% /dsm
        /dev/sda6                                10G  1.5G  8.6G  15% /var
        /dev/sda9                               498M  119M  379M  24% /var/cfengine
        /dev/sdb2                               931G   30G  902G   4% /p4meta
        /dev/sdb3                               373G   61M  373G   1% /p4log
        /dev/sdb1                               485G  112G  373G  23% /p4depot
        /dev/sda5                               2.1G  3.6M  1.8G   1% /ctools
        tmpfs                                   1.0G     0  1.0G   0% /dsm/tmp/dsmbg.tmpfs
        10.223.232.121:/new_itools              951G  497G  454G  53% /nfs/site/itools
        incfs03n03b-04:/common_usr_local         11G  1.2G  8.9G  12% /nfs/iind/local
        incfs04n08b-1:/prod                     513M  1.5M  512M   1% /nfs/iind/proj/prod
        incfs06n11b-1:/home0                    351G  149G  202G  43% /nfs/iind/disks/home23
        incfs02n10a-1:/iind_disks_home24        501G   59G  442G  12% /nfs/iind/disks/home24
        incfs06n04a-05:/iind_gen_adm            301G  176G  125G  59% /nfs/site/gen/adm
        incfs03n06b-1:/ba_ctg_home01            301G  263G   38G  88% /nfs/iind/disks/home110
        inc08n07b-1:/home_tree                   11G   79M   10G   1% /nfs/iind/home
        incfs06n10a-1:/iind_gen_adm_netmeter_m   81G   28G   53G  35% /nfs/iind/disks/iind_gen_adm_netmeter
        tmpfs                                    38G     0   38G   0% /run/user/37124
        incfs07n05b-1:/common                   201G  158G   43G  79% /nfs/site/disks/iind_gen_adm_common
        tmpfs                                    38G     0   38G   0% /run/user/12142325
      stdout_lines: "{{ df_stdout_lines }}"

  tasks:

    - debug:
        var: df_output.stdout_lines
    - debug:
        var: df_output.stdout
    - set_fact:
        df: "{{ df_output.stdout|community.general.jc('df') }}"
    - debug:
        var: df

    - copy:
        dest: "/tmp/ansible_df_{{ item }}.csv"
        content: |
          {{ df_output.stdout_lines.0.split()[:-1]|join(',') }}
          {% for m in hostvars[item]['df'] %}
          {{ m.filesystem }},{{ m.size }},{{ m.used }},{{m.available }},{{ m.use_percent }},{{ m.mounted_on }}
          {% endfor %}
      loop: "{{ ansible_play_hosts }}"
      run_once: true
      delegate_to: localhost
Vladimir Botka
  • 58,131
  • 4
  • 32
  • 63