|  | #!/usr/bin/env python | 
|  |  | 
|  | r""" | 
|  | This module contains functions which pertain to firmware. | 
|  | """ | 
|  |  | 
|  | import bmc_ssh_utils as bsu | 
|  | import var_funcs as vf | 
|  |  | 
|  |  | 
|  | def get_hard_disk_info(device="/dev/sdb"): | 
|  | r""" | 
|  | Get firmware information for the given device on the OS and return it as a | 
|  | dictionary. | 
|  |  | 
|  | Description of argument(s): | 
|  | device                          The device to be passed to the hdparm and | 
|  | lsblk commands (e.g. "/dev/sdb"). | 
|  |  | 
|  | Example result: | 
|  |  | 
|  | sda_info: | 
|  | [model_number]:                        MTFDDAK1T9TCB 00LY461 00LY570IBM | 
|  | [serial_number]:                       179C413F | 
|  | [firmware_revision]:                   MJ06 | 
|  | [transport]:                           Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, | 
|  | SATA Rev 2.6, SATA Rev 3.0 | 
|  | [used]:                                unknown (minor revision code 0x006d) | 
|  | [supported]:                           enhanced erase | 
|  | [likely_used]:                         10 | 
|  | [lba_user_addressable_sectors]:        268435455 | 
|  | [lba48_user_addressable_sectors]:      3750748848 | 
|  | [logical_sector_size]:                 512 bytes | 
|  | [physical_sector_size]:                4096 bytes | 
|  | [logical_sector-0_offset]:             0 bytes | 
|  | [device_size_with_m_=_1024*1024]:      1831420 MBytes | 
|  | [device_size_with_m_=_1000*1000]:      1920383 MBytes (1920 GB) | 
|  | [form_factor]:                         2.5 inch | 
|  | [nominal_media_rotation_rate]:         Solid State Device | 
|  | [queue_depth]:                         32 | 
|  | [standby_timer_values]:                spec'd by Standard, with device specific minimum | 
|  | [r/w_multiple_sector_transfer]:        Max = 16 Current = 16 | 
|  | [advanced_power_management_level]:     254 | 
|  | [dma]:                                 mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 | 
|  | [cycle_time]:                          no flow control=120ns IORDY flow control=120ns | 
|  | [pio]:                                 pio0 pio1 pio2 pio3 pio4 | 
|  | [security]: | 
|  | [not_expired]:                         security count | 
|  | [logical_unit_wwn_device_identifier]:  500a0751179c413f | 
|  | [naa]:                                 5 | 
|  | [ieee_oui]:                            00a075 | 
|  | [unique_id]:                           1179c413f | 
|  | [checksum]:                            correct | 
|  | [name]:                                sda1 | 
|  | [maj:min]:                             8:1 | 
|  | [rm]:                                  1 | 
|  | [size]:                                4M | 
|  | [ro]:                                  0 | 
|  | [type]:                                part | 
|  | [mountpoint]: | 
|  |  | 
|  | """ | 
|  |  | 
|  | cmd_buf = "hdparm -I " + device + " | egrep \":.+\" | sed -re" +\ | 
|  | " \"s/[ \t]+/ /g\"" | 
|  | stdout, stderr, rc = bsu.os_execute_command(cmd_buf) | 
|  |  | 
|  | firmware_dict = vf.key_value_outbuf_to_dict(stdout) | 
|  |  | 
|  | cmd_buf = "lsblk -P " + device + " | sed -re 's/\" /\"\\n/g'" | 
|  | stdout, stderr, rc = bsu.os_execute_command(cmd_buf) | 
|  | firmware_dict.update(vf.key_value_outbuf_to_dict(stdout, delim='=', | 
|  | strip=" \"")) | 
|  |  | 
|  | return firmware_dict |