xref: /openbmc/entity-manager/docs/associations.md (revision 3f3fa4cd4e67bc811e96d1f70a814fb7b6fa6aa5)
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