Back to Home

Managing HP ProLiant Servers through Open REST APIs or iLO on Steroids / Hewlett Packard Enterprise Blog

HP · REST API · restful api · iLO · ipmi · ProLiant

Manage HP ProLiant Servers through the Open REST API or iLO on Steroids

    Introduction from HP: This post was written by one of our customers who, on duty, wished to remain anonymous. All coincidences of names and IPs are considered random. You can try to do the same at any time in our demo center in Moscow - for those who wish, please write in the comments.

    Greetings. My name is Edward, and I am a system administrator at a small company that outsource the administration of IT infrastructure. Ahem ... Already looks like a club anonymous someone with problems? Well, all right, we really had one interesting problem, and today we will tell you how we encountered it and how we accidentally solved it.


    First, a little background. Still remember how fun it was to administer the remote hardware before, about 5-8 years ago? We write an application to engineers in the DC, wait for them to connect the KVM, configure the BIOS / CMOS, set the boot over the network, put the system in (it’s good if someone kind already wrote a preseed / kickstart file generator, and the DC has DHCP / PXE server). And then we got ipmi on all servers (well, over time). Oh, how happy we were at first!

    ipmitool -U user -P password power up -H XXX
    ipmitool -U user -P password password bootdev pxe -H XXX
    ipmitool -U user -P password power reset -H XXX

    And the server already seems to be putting the OS. It remains only to watch this in the console, if boring. The only sad thing was that the BIOS still had to be updated manually and configured (well, enable HT / VT-d there, at least). As a result, all servers were configured differently, depending on which quarter they were installed in. Well, you understand that the youngest admin always set the servers.

    When we found something critical, we walked and switched the settings with our hands. Mess, and only. But in general, all this suited us before the story happened to us, which I will talk about today.

    It is worth mentioning that we place part of the clients directly on our hardware (more precisely, on virtual machines on this hardware, which is driven through <crossed out with a seal with capital letters NDA>). Well, to make it easier for you to imagine, our system is very similar to OpenStack. And then, one fine day, a customer came to us and asked " on his hardware to make a system for managing virtual machines in a private cloud ." We were delighted, began to show him his decision (after signing the contract and the statement of work), he liked everything. I liked everything, the managers are already opening champagne (but I must say that the contract by our standards was very good). And then the client points a finger to the item TK and asks - " and with this how? ". The admins are sitting and looking perplexedly at this point - "new servers should automatically be added to the cloud after inventory, rack installation, and power-up connections . ” We started to show - look, we write the server here (1c), add its mac address here (a self-written web-face for managing the dhcp server and pxe), run the script, the server boots over the network, the system is installed (we are relieved exhaled, realizing that at least the system was installed on its own), then we catch the server upon reboot, press the Del key hard ... In general, the client’s representative looked at it, scratched his head, walked around the conversation, gathered his thoughts and said: “ Yes, where here automatically? Now let's throw everything except 1C, all the same, accountants will put the server there, and not me, and the place where you wrote the mac address". Well, and soon after that he left, adding that he hoped that we would still solve the problem.

    Then, as usual, we decided to read the TOR. We found all sorts of interesting points that we (well, those who did the task, and not those who signed and retold it to us) saw for the first time. For example, temperature monitoring bypassing the OS, electricity consumption monitoring, automatic BIOS setup ... We started to think. At first they were inclined to think that ipmitool could do all this. Then they presented how all this would look. We thought about how to update the settings, about monitoring sensors ... In general, we parted for the weekend with the task of "exploring all of Google for ipmi alternatives that they can."

    We arrive on Monday, everyone is sad, angry. And one admin is sitting and smiling. It was logical to pester him with questions about why he reads ithappens when we have such a disaster. As it turned out, he was glad that he was reading not ithappens, but Redfish server management spec v 1.0 ( read here ). They read everything together aloud, they stopped being angry. Redfish turned out to be exactly what we need. They took a manager, made him call all the server manufacturers to find a piece of hardware in which Redfish is implemented. They arrive in an hour and laughs, points a finger at the box at the entrance and says “ everything, I found". Actually, the box turned out to be a box from HP Proliant Gen9. We found the server, returned it to the laboratory (and who even guessed a brand-new unexplored server to take to the DC right away ...) and started to get acquainted with the HP REST API (which is the implementation of Redfish in HP servers).

    Since we are admins (this was later given to us by the pythonist and he wrote everything to us and made a beautiful web-interface), the first thing we did was write sh-nicknames that will do what we need. Of course, we would not advise you to go to the Rest API with the console curl and generate JSON via echo (well, or at least then don’t show it to anyone), but we will be glad to share examples of interaction with the HP ProLiant REST API (especially since the representatives HP asked us about this).

    In fact, there are plenty of possibilities there, in the documentation there are 2 hundred pages of a list of objects and a brief description of them. The first thing we tried to accomplish our main tasks, as proof-of-concept. Of course, some of them can be done through IPMI, but we decided to use one tool, namely the API.

    First of all (well, secondly, after connecting the server in the rack and after the HP iLO receives an IP address), we prescribe all the BIOS settings:

    # echo '{"AcpiRootBridgePxm":"Enabled","AcpiRtcSupport":"Disabled","AcpiSlit":"Enabled","AdjSecPrefetch":"Enabled","AdminEmail":"","AdminName":"","AdminOtherInfo":"","AdminPassword":"","AdminPhone":"","AdvancedMemProtection":"AdvancedEcc","AsrStatus":"Enabled","AsrTimeoutMinutes":"10","AssetTagProtection":"Unlocked","AttributeRegistry":"HpBiosAttributeRegistryP86.1.1.0","AutoPowerOn":"RestoreLastState","BootMode":"LegacyBios","BootOrderPolicy":"RetryIndefinitely","ChannelInterleaving":"Enabled","CollabPowerControl":"Enabled","ConsistentDevNaming":"LomsOnly","CustomPostMessage":"","DcuIpPrefetcher":"Enabled","DcuStreamPrefetcher":"Enabled","Description":"This is the Platform/BIOS Configuration (RBSU) Current Settings","Dhcpv4":"Enabled","DynamicPowerCapping":"Auto","DynamicPowerResponse":"Fast","EmbNicEnable":"Enabled","EmbSata1Enable":"Enabled","EmbSata2Enable":"Enabled","EmbVideoConnection":"Auto","EmbeddedDiagnostics":"Enabled","EmbeddedDiagsMode":"Auto","EmbeddedSata":"Raid","EmbeddedUefiShell":"Enabled","EmsConsole":"Disabled","EnergyPerfBias":"BalancedPerf","EraseUserDefaults":"No","ExtendedAmbientTemp":"Disabled","ExtendedMemTest":"Disabled","F11BootMenu":"Enabled","FanFailPolicy":"Shutdown","FanInstallReq":"EnableMessaging","HwPrefetcher":"Enabled","IntelDmiLinkFreq":"Auto","IntelPerfMonitoring":"Disabled","IntelProcVtd":"Enabled","IntelQpiFreq":"Auto","IntelQpiPowerManagement":"Enabled","IntelTxt":"Disabled","IntelligentProvisioning":"Enabled","Ipv4Address":"0.0.0.0","Ipv4Gateway":"0.0.0.0","Ipv4PrimaryDNS":"0.0.0.0","Ipv4SecondaryDNS":"0.0.0.0","Ipv4SubnetMask":"0.0.0.0","MaxMemBusFreqMHz":"Auto","MaxPcieSpeed":"MaxSupported","MemFastTraining":"Enabled","MinProcIdlePkgState":"C6Retention","MinProcIdlePower":"C6","MixedPowerSupplyReportngi":"Enabled","Modified":"2015-02-12T20:16:59+00:00","Name":"BIOS Current Settings","NetworkBootRetry":"Enabled","NicBoot1":"NetworkBoot","NicBoot2":"Disabled","NmiDebugButton":"Enabled","NodeInterleaving":"Disabled","OldAdminPassword":"","OldPowerOnPassword":"","PciBusPadding":"Enabled","PostF1Prompt":"Delayed20Sec","PowerButton":"Enabled","PowerOnDelay":"None","PowerOnLogo":"Enabled","PowerOnPassword":"","PowerProfile":"BalancedPowerPerf","PowerRegulator":"DynamicPowerSavings","PreBootNetwork":"EmbNic","ProcCoreDisable":0,"ProcHyperthreading":"Enabled","ProcNoExecute":"Enabled","ProcTurbo":"Enabled","ProcVirtualization":"Disabled","ProcX2Apic":"Enabled","ProductId":"777424-AA1","QpiBandwidthOpt":"Balanced","QpiSnoopConfig":"Standard","RedundantPowerSupply":"BalancedMode","RemovableFlashBootSeq":"ExternalKeysFirst","RestoreDefaults":"No","RestoreManufacturingDefaults":"No","RomSelection":"CurrentRom","SataSecureErase":"Disabled","SaveUserDefaults":"No","SecureBoot":"Disabled","SerialConsoleBaudRate":"115200","SerialConsoleEmulation":"Vt100Plus","SerialConsolePort":"Auto","SerialNumber":"8CW4340081","ServerAssetTag":"","ServerName":"","ServerOtherInfo":"","ServerPrimaryOs":"","ServiceEmail":"","ServiceName":"","ServiceOtherInfo":"","ServicePhone":"","SettingsResult":{"ETag":"","Messages":[{"MessageArgs":[],"MessageID":"Base.1.0:Success"}],"Time":""},"Sriov":"Enabled","ThermalConfig":"OptimalCooling","ThermalShutdown":"Enabled","TimeZone":"Utc0","TpmBinding":"Disabled","TpmOperation":"Disable","TpmState":"NotPresent","TpmType":"NoTpm","TpmVisibility":"Visible","Type":"HpBios.1.0.0","UefiOptimizedBoot":"Enabled","UefiPxeBoot":"Auto","UefiShellBootOrder":"Disabled","UefiShellStartup":"Disabled","UefiShellStartupLocation":"AttachedMedia","UefiShellStartupUri":"","UrlBootFile":"","Usb3Mode":"Auto","UsbBoot":"Enabled","UsbControl":"UsbEnabled","UtilityLang":"English","VideoOptions":"BothVideoEnabled","VirtualInstallDisk":"Disabled","VirtualSerialPort":"Com2Irq3","WakeOnLan":"Enabled","links":{"BaseConfigs":{"href":"/rest/v1/systems/1/bios/BaseConfigs"},"Boot":{"href":"/rest/v1/systems/1/bios/Boot"},"Mappings":{"href":"/rest/v1/systems/1/bios/Mappings"},"Settings":{"href":"/rest/v1/systems/1/bios/Settings"}}}' | curl -v -k -X PATCH https://Administrator:[email protected]/rest/v1/systems/1/Bios/Settings -H "Content-Type: application/json" --data-binary @- ; echo


    Learn to manage food. Reboot "on the button":

    # echo '{"Action":"Reset","ResetType":"ForceRestart"}' | curl -v -k -X POST https://Administrator:[email protected]/rest/v1/systems/1 -H "Content-Type: application/json" --data-binary @- ; echo

    “We pull out the cable from the outlet”:

    # echo '{"Action":"Reset","ResetType":"ForceOff"}' | curl -v -k -X POST https://Administrator:[email protected]/rest/v1/systems/1 -H "Content-Type: application/json" --data-binary @- ; echo

    Turn on the server:

    # echo '{"Action":"Reset","ResetType":"On"}' | curl -v -k -X POST https://Administrator:[email protected]/rest/v1/systems/1 -H "Content-Type: application/json" --data-binary @- ; echo

    We send the engineer to "press the power button":

    # echo '{"Action":"Reset","ResetType":"PushPowerButton"}' | curl -v -k -X POST https://Administrator:[email protected]/rest/v1/systems/1 -H "Content-Type: application/json" --data-binary @- ; echo

    We ask the server who he is:

    # curl -v -k -X GET https://Administrator:[email protected]/rest/v1 -H "Content-Type: application/json"
    {"Name":"HP RESTful Root Service","Oem":{"Hp":{"Manager":[{"DefaultLanguage":"en","FQDN":"ILO8CW4340081.","HostName":"ILO8CW4340081","Languages":[{"Language":"en","TranslationName":"English","Version":"2.02"}],"ManagerFirmwareVersion":"2.02","ManagerType":"iLO 4"}],"Sessions":{"CertCommonName":"ILO8CW4340081","KerberosEnabled":false,"LDAPAuthLicenced":false,"LDAPEnabled":false,"LocalLoginEnabled":true,"LoginFailureDelay":0,"LoginHint":{"Hint":"POST to /Sessions to login using the following JSON object:","HintPOSTData":{"Password":"password","UserName":"username"}},"SecurityOverride":true,"ServerName":""},"Type":"HpiLOServiceExt.0.9.5","links":{"Providers":{"href":"/rest/v1/Providers"}}}},"ServiceVersion":"0.9.5","Time":"2015-05-06T18:01:55Z","Type":"ServiceRoot.0.9.5","links":{"AccountService":{"href":"/rest/v1/AccountService"},"Chassis":{"href":"/rest/v1/Chassis"},"Managers":{"href":"/rest/v1/Managers"},"Registries":{"href":"/rest/v1/Registries"},"Schemas":{"href":"/rest/v1/Schemas"},"Sessions":{"href":"/rest/v1/Sessions"},"Systems":{"href":"/rest/v1/Systems"},"self":{"href":"/rest/v1/root"}}}

    With a PATCH request in the same pen, you can change the server information inside iLo.

    Let’s ask the MAC addresses of the server (yes, in the end we went ahead and the DHCP server itself took an inventory of new servers if we found an unfamiliar iLO in a separate VLAN — we would give out dynamic addresses for iLO, and then we would start recording static addresses for network cards of the server and iLo interface):

    # curl -v -k -X GET https://Administrator:[email protected]/rest/v1/systems/1 -H "Content-Type: application/json"
    {"AvailableActions":[{"Action":"Reset","Capabilities":[{"AllowableValues":["On","ForceOff","ForceRestart","Nmi","PushPowerButton"],"PropertyName":"ResetType"}]}],"Bios":{"Current":{"VersionString":"P86 v1.30 (09/04/2014)"}},"Boot":{"BootSourceOverrideEnabled":"Disabled","BootSourceOverrideSupported":["None","Floppy","Cd","Hdd","Usb","Utilities","Diags","BiosSetup","Pxe","UefiShell","UefiTarget"],"BootSourceOverrideTarget":"None","UefiTargetBootSourceOverride":"None","UefiTargetBootSourceOverrideSupported":["NIC.LOM.1.1.IPv4","NIC.LOM.1.1.IPv6"]},"Description":"Computer System View","HostCorrelation":{"HostMACAddress":["14:58:d0:d3:20:8e","14:58:d0:d3:20:8f"],"HostName":"","IPAddress":[""]},"IndicatorLED":"Off","Manufacturer":"HP","Memory":{"TotalSystemMemoryGB":32},"Model":"ProLiant DL120 Gen9","Name":"Computer System","Oem":{"Hp":{"AvailableActions":[{"Action":"PowerButton","Capabilities":[{"AllowableValues":["Press","PressAndHold"],"PropertyName":"PushType"},{"AllowableValues":["/Oem/Hp"],"PropertyName":"Target"}]}],"Bios":{"Backup":{"Date":"v1.30 (09/04/2014)","Family":"P86","VersionString":"P86 v1.30 (09/04/2014)"},"Bootblock":{"Date":"","Family":"P86","VersionString":"P86 "},"Current":{"Date":"09/04/2014","Family":"P86","VersionString":"P86 v1.30 (09/04/2014)"},"UefiClass":2},"PowerAllocationLimit":900,"PowerAutoOn":"Restore","PowerOnDelay":"Minimum","PowerRegulatorMode":"Dynamic","PowerRegulatorModesSupported":["OSControl","Dynamic","Max","Min"],"Type":"HpComputerSystemExt.0.10.0","VirtualUUID":null,"links":{"BIOS":{"href":"/rest/v1/systems/1/bios"},"PCIDevices":{"href":"/rest/v1/Systems/1/PCIDevices"},"PCISlots":{"href":"/rest/v1/Systems/1/PCISlots"},"SecureBoot":{"href":"/rest/v1/Systems/1/SecureBoot"}}}},"Power":"Off","Processors":{"Count":1,"ProcessorFamily":"Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz"},"SKU":"777424-AA1","SerialNumber":"8CW4340081","Status":{"Health":"OK","State":"Disabled"},"SystemType":"Physical","Type":"ComputerSystem.0.9.5","UUID":"34373737-3432-4338-5734-333430303831","links":{"Chassis":[{"href":"/rest/v1/Chassis/1"}],"Manager":[{"href":"/rest/v1/Managers/1"}],"self":{"href":"/rest/v1/Systems/1"}}}

    From the previous JSON, we also pulled out the amount of memory with the CPU model, then the developers made integration with 1C, the server sent data about itself and there. Here we also determined the BIOS version to curse about outdated (or simply differing in cluster) versions.

    Even through the REST API, you can take readings of power metrics (unfortunately, not at all “levels” of the iLO license):

    # curl -v -k -X GET https://Administrator:[email protected]/rest/v1/chassis/1/PowerMetrics -H "Content-Type: application/json" 

    We also found some kind of creepy pen that describes the status of the server - fan speed, temperature, and the state of various pieces of iron inside the server.

    # curl -v -k -X GET https://Administrator:[email protected]/rest/v1/Chassis/1/ThermalMetrics -H "Content-Type: application/json" 
    {"Fans":[{"CurrentReading":33,"FanName":"Fan 1","Oem":{"Hp":{"Location":"System","Type":"HpServerFan.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Percent"},{"CurrentReading":33,"FanName":"Fan 2","Oem":{"Hp":{"Location":"System","Type":"HpServerFan.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Percent"},{"CurrentReading":33,"FanName":"Fan 3","Oem":{"Hp":{"Location":"System","Type":"HpServerFan.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Percent"},{"CurrentReading":33,"FanName":"Fan 4","Oem":{"Hp":{"Location":"System","Type":"HpServerFan.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Percent"},{"CurrentReading":33,"FanName":"Fan 5","Oem":{"Hp":{"Location":"System","Type":"HpServerFan.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Percent"},{"CurrentReading":33,"FanName":"Fan 6","Oem":{"Hp":{"Location":"System","Type":"HpServerFan.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Percent"}],"Name":"ThermalMetrics","Temperatures":[{"Context":"Ambient","CurrentReading":21,"LowerThresholdCritical":46,"LowerThresholdNonCritical":42,"Name":"01-Inlet Ambient","Oem":{"Hp":{"LocationXmm":11,"LocationYmm":0,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"CPU","CurrentReading":40,"LowerThresholdCritical":0,"LowerThresholdNonCritical":70,"Name":"02-CPU 1","Oem":{"Hp":{"LocationXmm":7,"LocationYmm":9,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"CPU","CurrentReading":40,"LowerThresholdCritical":0,"LowerThresholdNonCritical":70,"Name":"03-CPU 2","Oem":{"Hp":{"LocationXmm":12,"LocationYmm":9,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"GPU","CurrentReading":27,"LowerThresholdCritical":0,"LowerThresholdNonCritical":87,"Name":"04-P1 DIMM 1-2","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":10,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"GPU","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":87,"Name":"05-P1 DIMM 3-4","Oem":{"Hp":{"LocationXmm":5,"LocationYmm":10,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"GPU","CurrentReading":28,"LowerThresholdCritical":0,"LowerThresholdNonCritical":87,"Name":"06-P2 DIMM 1-2","Oem":{"Hp":{"LocationXmm":14,"LocationYmm":10,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"GPU","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":87,"Name":"07-P2 DIMM 3-4","Oem":{"Hp":{"LocationXmm":11,"LocationYmm":10,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":60,"Name":"08-HD Max","Oem":{"Hp":{"LocationXmm":4,"LocationYmm":2,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":41,"LowerThresholdCritical":0,"LowerThresholdNonCritical":105,"Name":"09-Chipset","Oem":{"Hp":{"LocationXmm":7,"LocationYmm":13,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":40,"LowerThresholdCritical":0,"LowerThresholdNonCritical":0,"Name":"10-P/S 1","Oem":{"Hp":{"LocationXmm":1,"LocationYmm":14,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":0,"Name":"11-P/S 2","Oem":{"Hp":{"LocationXmm":2,"LocationYmm":14,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":30,"LowerThresholdCritical":120,"LowerThresholdNonCritical":115,"Name":"12-VR P1","Oem":{"Hp":{"LocationXmm":7,"LocationYmm":8,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":30,"LowerThresholdCritical":120,"LowerThresholdNonCritical":115,"Name":"13-VR P2","Oem":{"Hp":{"LocationXmm":12,"LocationYmm":8,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":26,"LowerThresholdCritical":120,"LowerThresholdNonCritical":115,"Name":"14-VR P1 Zone","Oem":{"Hp":{"LocationXmm":7,"LocationYmm":7,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":25,"LowerThresholdCritical":120,"LowerThresholdNonCritical":115,"Name":"15-VR P2 Zone","Oem":{"Hp":{"LocationXmm":12,"LocationYmm":7,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":26,"LowerThresholdCritical":120,"LowerThresholdNonCritical":115,"Name":"16-VR P1 Mem","Oem":{"Hp":{"LocationXmm":8,"LocationYmm":7,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":26,"LowerThresholdCritical":120,"LowerThresholdNonCritical":115,"Name":"17-VR P2 Mem","Oem":{"Hp":{"LocationXmm":13,"LocationYmm":7,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":60,"Name":"18-Storage Batt","Oem":{"Hp":{"LocationXmm":0,"LocationYmm":7,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":30,"LowerThresholdCritical":85,"LowerThresholdNonCritical":80,"Name":"19-iLO Zone","Oem":{"Hp":{"LocationXmm":12,"LocationYmm":13,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":30,"LowerThresholdCritical":105,"LowerThresholdNonCritical":100,"Name":"20-System Board","Oem":{"Hp":{"LocationXmm":7,"LocationYmm":14,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":28,"LowerThresholdCritical":105,"LowerThresholdNonCritical":100,"Name":"21-System Board","Oem":{"Hp":{"LocationXmm":11,"LocationYmm":13,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":24,"LowerThresholdCritical":127,"LowerThresholdNonCritical":126,"Name":"22-P/S Zone","Oem":{"Hp":{"LocationXmm":4,"LocationYmm":9,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":28,"LowerThresholdCritical":0,"LowerThresholdNonCritical":126,"Name":"23-System Board","Oem":{"Hp":{"LocationXmm":4,"LocationYmm":15,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":29,"LowerThresholdCritical":0,"LowerThresholdNonCritical":126,"Name":"24-System Board","Oem":{"Hp":{"LocationXmm":9,"LocationYmm":15,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":29,"LowerThresholdCritical":0,"LowerThresholdNonCritical":126,"Name":"25-System Board","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":15,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":100,"Name":"26-PCI 1","Oem":{"Hp":{"LocationXmm":4,"LocationYmm":13,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":100,"Name":"27-PCI 2","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":13,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":100,"Name":"28-PCI 3","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":13,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":26,"LowerThresholdCritical":0,"LowerThresholdNonCritical":126,"Name":"29-PCI 1 Zone","Oem":{"Hp":{"LocationXmm":4,"LocationYmm":15,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":24,"LowerThresholdCritical":0,"LowerThresholdNonCritical":126,"Name":"30-PCI 2 Zone","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":15,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":25,"LowerThresholdCritical":0,"LowerThresholdNonCritical":126,"Name":"31-PCI 3 Zone","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":15,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"Health":"OK","State":"Enabled"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":100,"Name":"32-LOM Card","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":13,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"Expansion Bay","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":126,"Name":"33-I/O Board","Oem":{"Hp":{"LocationXmm":10,"LocationYmm":15,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"},{"Context":"System Board","CurrentReading":0,"LowerThresholdCritical":0,"LowerThresholdNonCritical":100,"Name":"34-LOM","Oem":{"Hp":{"LocationXmm":6,"LocationYmm":14,"Type":"HpSeaOfSensors.0.9.5"}},"Status":{"State":"Absent"},"Units":"Celsius"}],"Type":"ThermalMetrics.0.9.5","links":{"self":{"href":"/rest/v1/Chassis/1/ThermalMetrics"}}}

    We also found an object that says about the state of the server as a whole (OK / fail) and what it is doing now (in our example, it was loading):

    # curl -v -k -X  GET https://Administrator:[email protected]/rest/v1/Chassis/1 -H "Content-Type: application/json" 
    ...
    "Status":{"Health":"OK","State":"Starting"}
    ...

    In general, we eventually wrote a sh-nick and gave it to the developer. He laughed at us, we scolded him for this, threatened to take the root ... But then he wrote a module in our cloud, which can add and manage servers through Redfish (and the HP REST API, respectively). Well, we eventually completed the order.

    Probably it's time to round off. Let's talk about those who played the main roles in this whole story.


    Thanks for attention!

    Read Next