inventory reporting with property data
What are you all doing to get clean inventory reports with consistent property value data? When creating inventory reports it can be a challenge to populate them with the desired property data due to the varying names, e.g. auto.productserial, auto.endpoint.serial_number, the data may be found under. The solution to add them all and edit the csv afterwards is clunky.
- Anonymous4 years ago
Makes sense, would be a matter of your logic defining inheritance priority. So if both auto.productserial and auto.serial_number both exist, which one should be unified.serial_number?
Obviously the first step would be to check the existence of any of the properties that would feed in. If only one exists, that becomes the unified value.
If more than one exists, check that the values are not null (you can have a property that exists without a value). If only one has a value, that one becomes the unified value.
Of the ones that exists, that have non-zero length values, you'd have to decide which one would take priority. This could be simple or complex, depending on how fancy you want to get.
Something simple might look like this:
// load in the properties that you want to feed into the unified property. // put them in order of priority. The later items in the list have priority // over earlier items in the list. properties_to_consider = [ "doesnt_exist_property", "auto.serial_number", "auto.productserial", "auto.some_other_serial" ] values = [:] unifiedvalue = "serial" // Lookup the property values, store any that exist as a result. properties_to_consider.each{ propValue = hostProps.get(it) ?: "" if (propValue.size() > 0){ // this ignores any non-existent or null properties values[it] = hostProps.get(it) } } values.each{k,v-> println("unified." + unifiedvalue + "=" + v) println("unified." + unifiedvalue + "_from=" + k) } return 0
You don't necessarily need to do the second println statement, but i find it handy in this kind of situation to record a property telling you which property won the priority contest. You may notice that this actually prints out all of them. That's true. But LM only pays attention to the last value of any duplicate property lines. In my case, with fake values for serial_number and productserial (and the other two are null in my case), the output looks like this:
unified.serial=123456789 unified.serial_from=auto.serial_number unified.serial=ABCDEFGHI unified.serial_from=auto.productserial
If you test this from the PS screen, you'll see that the last two lines overwrite the first two. That's why the order of the very first list is important. The last, existent, not null property value will be the one that goes into the unified property.