1*3f3fa4cdSMatt Spinler# Associations 2*3f3fa4cdSMatt Spinler 3*3f3fa4cdSMatt SpinlerEntity Manager will create [associations][1] between entities in certain cases. 4*3f3fa4cdSMatt Spinler 5*3f3fa4cdSMatt Spinler## `contained_by`, `containing` 6*3f3fa4cdSMatt Spinler 7*3f3fa4cdSMatt SpinlerEntity Manager can model the [physical topology][2] of how entities plug into 8*3f3fa4cdSMatt Spinlereach other when upstream and downstream ports are added as `Exposes` elements. 9*3f3fa4cdSMatt SpinlerIt will then create the 'upstream containing downstream' and 'downstream 10*3f3fa4cdSMatt Spinlercontained_by upstream' associations for the connected entities. 11*3f3fa4cdSMatt Spinler 12*3f3fa4cdSMatt SpinlerFor example, taken from the referenced physical topology design: 13*3f3fa4cdSMatt Spinler 14*3f3fa4cdSMatt Spinlersuperchassis.json: 15*3f3fa4cdSMatt Spinler 16*3f3fa4cdSMatt Spinler```json 17*3f3fa4cdSMatt Spinler{ 18*3f3fa4cdSMatt Spinler "Exposes": [ 19*3f3fa4cdSMatt Spinler { 20*3f3fa4cdSMatt Spinler "Name": "MyPort", 21*3f3fa4cdSMatt Spinler "Type": "BackplanePort" 22*3f3fa4cdSMatt Spinler } 23*3f3fa4cdSMatt Spinler ], 24*3f3fa4cdSMatt Spinler "Name": "Superchassis" 25*3f3fa4cdSMatt Spinler} 26*3f3fa4cdSMatt Spinler``` 27*3f3fa4cdSMatt Spinler 28*3f3fa4cdSMatt Spinlersubchassis.json: 29*3f3fa4cdSMatt Spinler 30*3f3fa4cdSMatt Spinler```json 31*3f3fa4cdSMatt Spinler{ 32*3f3fa4cdSMatt Spinler "Exposes": [ 33*3f3fa4cdSMatt Spinler { 34*3f3fa4cdSMatt Spinler "ConnectsToType": "BackplanePort", 35*3f3fa4cdSMatt Spinler "Name": "MyDownstreamPort", 36*3f3fa4cdSMatt Spinler "Type": "DownstreamPort" 37*3f3fa4cdSMatt Spinler } 38*3f3fa4cdSMatt Spinler ], 39*3f3fa4cdSMatt Spinler "Name": "Subchassis" 40*3f3fa4cdSMatt Spinler} 41*3f3fa4cdSMatt Spinler``` 42*3f3fa4cdSMatt Spinler 43*3f3fa4cdSMatt SpinlerEntity Manager will create the 'Superchassis containing Subchassis' and 44*3f3fa4cdSMatt Spinler'Subchassis contained_by Superchassis` associations, putting the associations 45*3f3fa4cdSMatt Spinlerdefinition interface on the downstream entity. 46*3f3fa4cdSMatt Spinler 47*3f3fa4cdSMatt Spinler## `powered_by`, `powering` 48*3f3fa4cdSMatt Spinler 49*3f3fa4cdSMatt SpinlerIn addition to the `containing` associations, entity-manager will add 50*3f3fa4cdSMatt Spinler`powering`/`powered_by` associations between a power supply and its parent when 51*3f3fa4cdSMatt Spinlerits downstream port is marked as a `PowerPort`: 52*3f3fa4cdSMatt Spinler 53*3f3fa4cdSMatt Spinler```json 54*3f3fa4cdSMatt Spinler{ 55*3f3fa4cdSMatt Spinler "ConnectsToType": "Mobo Upstream Port", 56*3f3fa4cdSMatt Spinler "Name": "PSU $BUS Downstream Port", 57*3f3fa4cdSMatt Spinler "Type": "DownstreamPort", 58*3f3fa4cdSMatt Spinler "PowerPort": true 59*3f3fa4cdSMatt Spinler} 60*3f3fa4cdSMatt Spinler``` 61*3f3fa4cdSMatt Spinler 62*3f3fa4cdSMatt Spinler[1]: 63*3f3fa4cdSMatt Spinler https://github.com/openbmc/docs/blob/master/architecture/object-mapper.md#associations 64*3f3fa4cdSMatt Spinler[2]: https://github.com/openbmc/docs/blob/master/designs/physical-topology.md 65