Search code examples
awksedopenstackopenstack-nova

How to get only ID Name and Networks fields from Openstack nova list


My nova list giving output as :

            #  nova list
            +--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+
            | ID                                   | Name          | Status | Task State | Power State | Networks                                                                                |
            +--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+
            | 0017050b-62ba-475e-b598-4638d4293250 | VNFM-POC      | ACTIVE | -          | Running     | vnfm_net_1=172.16.10.10, 10.10.72.12                                                    |
            | ff21d7c9-dc92-4256-ae49-49aa54c6a67b | VNFM_Shreyans | ACTIVE | -          | Running     | vnfm_net_1=172.16.10.8, 10.10.72.20                                                     |
            | 3f0a1188-c151-4e5e-9930-969d0423601b | dsc-test-3    | ACTIVE | -          | Running     | dsc-sig=172.16.17.15, 10.10.72.15; dsc-InterInstance=172.16.18.15; dsc-OAM=172.16.16.20 |
            +--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+

I want to extract only ID Name Networks.

#  nova list | sed 's/ //g'| cut -d'|' -f 2,3,7
+--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+
ID|Name|Networks
+--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+
0017050b-62ba-475e-b598-4638d4293250|VNFM-POC|vnfm_net_1=172.16.10.10,10.10.72.12
ff21d7c9-dc92-4256-ae49-49aa54c6a67b|VNFM_Shreyans|vnfm_net_1=172.16.10.8,10.10.72.20
3f0a1188-c151-4e5e-9930-969d0423601b|dsc-test-3|dsc-sig=172.16.17.15,10.10.72.15;dsc-InterInstance=172.16.18.15;dsc-OAM=172.16.16.20
+--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+

Problem: My table format messed up.how to get only ID Name and Networks fields like below.

+--------------------------------------+---------------+-----------------------------------------------------------------------------------------+
| ID                                   | Name          | Networks                                                                                   |
+--------------------------------------+---------------+-----------------------------------------------------------------------------------------+
| 0017050b-62ba-475e-b598-4638d4293250 | VNFM-POC      | vnfm_net_1=172.16.10.10, 10.10.72.12                                                    |
| ff21d7c9-dc92-4256-ae49-49aa54c6a67b | VNFM_Shreyans | vnfm_net_1=172.16.10.8, 10.10.72.20                                                     |
| 3f0a1188-c151-4e5e-9930-969d0423601b | dsc-test-3    | dsc-sig=172.16.17.15, 10.10.72.15; dsc-InterInstance=172.16.18.15; dsc-OAM=172.16.16.20 |
+--------------------------------------+---------------+-----------------------------------------------------------------------------------------+

OR

ID          0017050b-62ba-475e-b598-4638d4293250
Name        VNFM-POC
Networks    vnfm_net_1=172.16.10.10,10.10.72.12

ID          ff21d7c9-dc92-4256-ae49-49aa54c6a67b
Name        VNFM_Shreyans
Networks    vnfm_net_1=172.16.10.8,10.10.72.20

ID          3f0a1188-c151-4e5e-9930-969d0423601b
Name        dsc-test-3
Networks    dsc-sig=172.16.17.15,10.10.72.15;dsc-InterInstance=172.16.18.15;dsc-OAM=172.16.16.20

Solution

  • $ nova list | awk -F'|' '/\|/ && !/ID/{print "ID\t"$2"\nName\t"$3"\nNetworks"$7"\n"}'
    ID   0017050b-62ba-475e-b598-4638d4293250 
    Name     VNFM-POC      
    Networks vnfm_net_1=172.16.10.10, 10.10.72.12                                                    
    
    ID   ff21d7c9-dc92-4256-ae49-49aa54c6a67b 
    Name     VNFM_Shreyans 
    Networks vnfm_net_1=172.16.10.8, 10.10.72.20                                                     
    
    ID   3f0a1188-c151-4e5e-9930-969d0423601b 
    Name     dsc-test-3    
    Networks dsc-sig=172.16.17.15, 10.10.72.15; dsc-InterInstance=172.16.18.15; dsc-OAM=172.16.16.20 
    

    Note that above command will have extra empty line at end of file...

    The best I could do with other format is:

    $ nova list | awk -F'|' '/\|/{print "|"$1"|"$2"|"$3"|"$7"|"} /+-/{print}'
                +--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+
    |            | ID                                   | Name          | Networks                                                                                |
                +--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+
    |            | 0017050b-62ba-475e-b598-4638d4293250 | VNFM-POC      | vnfm_net_1=172.16.10.10, 10.10.72.12                                                    |
    |            | ff21d7c9-dc92-4256-ae49-49aa54c6a67b | VNFM_Shreyans | vnfm_net_1=172.16.10.8, 10.10.72.20                                                     |
    |            | 3f0a1188-c151-4e5e-9930-969d0423601b | dsc-test-3    | dsc-sig=172.16.17.15, 10.10.72.15; dsc-InterInstance=172.16.18.15; dsc-OAM=172.16.16.20 |
                +--------------------------------------+---------------+--------+------------+-------------+-----------------------------------------------------------------------------------------+