entity-manager unexpected handling of template parameters

Patrick Venture venture at google.com
Sat Aug 10 05:20:20 AEST 2019


On Fri, Aug 9, 2019 at 11:57 AM Patrick Venture <venture at google.com> wrote:
>
> On Fri, Aug 9, 2019 at 11:50 AM Patrick Venture <venture at google.com> wrote:
> >
> > On Fri, Aug 9, 2019 at 11:45 AM James Feist <james.feist at linux.intel.com> wrote:
> > >
> > > On 8/9/19 11:33 AM, Patrick Venture wrote:
> > > > On Fri, Aug 9, 2019 at 11:22 AM James Feist <james.feist at linux.intel.com> wrote:
> > > >>
> > > >> On 8/9/19 9:53 AM, Patrick Venture wrote:
> > > >>> Given the following:
> > > >>>
> > > >>> busctl introspect --no-pager xyz.openbmc_project.FruDevice
> > > >>> /xyz/openbmc_project/FruDevice/Altie
> > > >>> NAME                                TYPE      SIGNATURE RESULT/VALUE
> > > >>>               FLAGS
> > > >>> org.freedesktop.DBus.Introspectable interface -         -
> > > >>>               -
> > > >>> .Introspect                         method    -         s
> > > >>>               -
> > > >>> org.freedesktop.DBus.Peer           interface -         -
> > > >>>               -
> > > >>> .GetMachineId                       method    -         s
> > > >>>               -
> > > >>> .Ping                               method    -         -
> > > >>>               -
> > > >>> org.freedesktop.DBus.Properties     interface -         -
> > > >>>               -
> > > >>> .Get                                method    ss        v
> > > >>>               -
> > > >>> .GetAll                             method    s         a{sv}
> > > >>>               -
> > > >>> .Set                                method    ssv       -
> > > >>>               -
> > > >>> .PropertiesChanged                  signal    sa{sv}as  -
> > > >>>               -
> > > >>> xyz.openbmc_project.FruDevice       interface -         -
> > > >>>               -
> > > >>> .ADDRESS                            property  u         82
> > > >>>               emits-change
> > > >>> .BOARD_LANGUAGE_CODE                property  s         "25"
> > > >>>               emits-change
> > > >>> .BOARD_MANUFACTURER                 property  s         "Inventec"
> > > >>>               emits-change
> > > >>> .BOARD_MANUFACTURE_DATE             property  s         "Thu Jul 11
> > > >>> 17:09:00 2019" emits-change
> > > >>> .BOARD_PART_NUMBER                  property  s         "1051867-01"
> > > >>>               emits-change
> > > >>> .BOARD_PRODUCT_NAME                 property  s         "Altie"
> > > >>>               emits-change
> > > >>> .BOARD_SERIAL_NUMBER                property  s
> > > >>> "ALTIVT192700026"          emits-change
> > > >>> .BUS                                property  u         1
> > > >>>               emits-change
> > > >>> .Common_Format_Version              property  s         "1"
> > > >>>               emits-change
> > > >>>
> > > >>> I expected entity-manager with this profile to populate dbus properly:
> > > >>> configurations/altie.json
> > > >>> {
> > > >>>       "Name" : "Altie",
> > > >>>       "Probe" : "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'Altie'})",
> > > >>>       "Type": "Board",
> > > >>>       "xyz.openbmc_project.Inventory.Decorator.Asset": {
> > > >>>           "Manufacturer": "$BOARD_MANUFACTURER",
> > > >>>           "Model": "$BOARD_PRODUCT_NAME",
> > > >>>           "PartNumber": "$BOARD_PART_NUMBER",
> > > >>>           "SerialNumber": "$BOARD_SERIAL_NUMBER"
> > > >>>       }
> > > >>> }
> > > >>>
> > > >>> Instead:
> > > >>> root at semitruck:~# busctl introspect --no-pager
> > > >>> xyz.openbmc_project.EntityManager
> > > >>> /xyz/openbmc_project/inventory/system/board/Altie
> > > >>> NAME                                          TYPE      SIGNATURE
> > > >>> RESULT/VALUE                             FLAGS
> > > >>> org.freedesktop.DBus.Introspectable           interface -         -
> > > >>>                                       -
> > > >>> .Introspect                                   method    -         s
> > > >>>                                       -
> > > >>> org.freedesktop.DBus.Peer                     interface -         -
> > > >>>                                       -
> > > >>> .GetMachineId                                 method    -         s
> > > >>>                                       -
> > > >>> .Ping                                         method    -         -
> > > >>>                                       -
> > > >>> org.freedesktop.DBus.Properties               interface -         -
> > > >>>                                       -
> > > >>> .Get                                          method    ss        v
> > > >>>                                       -
> > > >>> .GetAll                                       method    s
> > > >>> a{sv}                                    -
> > > >>> .Set                                          method    ssv       -
> > > >>>                                       -
> > > >>> .PropertiesChanged                            signal    sa{sv}as  -
> > > >>>                                       -
> > > >>> xyz.openbmc_project.AddObject                 interface -         -
> > > >>>                                       -
> > > >>> .AddObject                                    method    a{sv}     -
> > > >>>                                       -
> > > >>> xyz.openbmc_project.Inventory.Decorator.Asset interface -         -
> > > >>>                                       -
> > > >>> .Manufacturer                                 property  s
> > > >>> "$BOARD_MANUFACTURER"                    emits-change
> > > >>> .Model                                        property  s
> > > >>> "$BOARD_PRODUCT_NAME"                    emits-change
> > > >>> .PartNumber                                   property  s
> > > >>> "$BOARD_PART_NUMBER"                     emits-change
> > > >>> .SerialNumber                                 property  s
> > > >>> "$BOARD_SERIAL_NUMBER"                   emits-change
> > > >>> xyz.openbmc_project.Inventory.Item.Board      interface -         -
> > > >>>                                       -
> > > >>> .Name                                         property  s
> > > >>> "Altie"                                  emits-change
> > > >>> .Probe                                        property  s
> > > >>> "xyz.openbmc_project.FruDevice({\'BOA... emits-change
> > > >>> .Type                                         property  s
> > > >>> "Board"                                  emits-change
> > > >>>
> > > >>> I must be doing something obvious and silly.  Please advise.
> > > >>
> > > >> Entity-manager caches the result and only updates if etc/os-release
> > > >> changes. There is a version file in /var/configuration/version, if you
> > > >> delete this it'll rescan fresh. It looks right to me.. so I imagine this
> > > >> is what is happening.
> > > >
> > > > I deleted the /var/configuration/version file and rebooted the BMC.
> > > > it didn't pick it up -- I decided a rescan was too subtle :)
> > > >
> > > > Any other ideas?  I've started digging into entity-manager further.
> > >
> > > Sorry I don't see anything obvious... it should all be happening in this
> > > function
> > > https://github.com/openbmc/entity-manager/blob/b295e1d8385544f12a436ef63153d373ff8de625/src/EntityManager.cpp#L1130
> > >
> > >
> > > Specifically it should be making it to here:
> > >
> > > https://github.com/openbmc/entity-manager/blob/b295e1d8385544f12a436ef63153d373ff8de625/src/EntityManager.cpp#L1291
> >
> > Thanks, that's where I'm now looking --
>
> I deleted everything from /var/configuration/ rebooted, and added some
> debug to dig into the specific template replacement:
>
> Aug 09 18:51:47 semitruck entity-manager[2700]: strPtr value:
> '$BOARD_MANUFACTURER'
> Aug 09 18:51:47 semitruck entity-manager[2700]: templateName:
> $BOARD_MANUFACTURER, find: true
> Aug 09 18:51:47 semitruck entity-manager[2700]: keyPair.value(): "Inventec"
>
> Aug 09 18:51:47 semitruck entity-manager[2700]: strPtr value:
> '$BOARD_PRODUCT_NAME'
> Aug 09 18:51:47 semitruck entity-manager[2700]: templateName:
> $BOARD_PRODUCT_NAME, find: true
> Aug 09 18:51:47 semitruck entity-manager[2700]: keyPair.value(): "Altie"

So the visitor is finding and applying the value to the template, but
that change isn't propagating up.  It works for the card that's found
afterwards...  The only real difference is, the other profile also
Exposes, whereas this one doesn't.  Is there a step that's skipped if
there isn't an "Exposes" key?

>
>
>
> >
> > >
> > > foundDevice should be your fru.... and should be populated here:
> > >
> > > https://github.com/openbmc/entity-manager/blob/b295e1d8385544f12a436ef63153d373ff8de625/src/EntityManager.cpp#L425
> >
> > I did not think to look here, thanks!
> >
> > >
> > > Hope that helps
> > >
> > > -James
> > >
> > >
> > >
> > > >
> > > >>
> > > >> -James
> > > >>>
> > > >>> Thanks,
> > > >>> Patrick
> > > >>>


More information about the openbmc mailing list