Repository navigation
Conversation
|
@claude /review Only report on issues of potential concern; we don't need commentary on anything that doesn't require further consideration. |
|
Claude finished @jnovinger's task in 8m 40s —— View job Review: docs-only PR (
|
| Claim | Verified against |
|---|---|
| Default profiles + their attribute sets (CPU/Memory/Hard disk/GPU/Expansion card/Power supply/Fan) | dcim/migrations/initial_data/module_type_profiles/*.json — all seven tables match exactly |
| Expansion card profile missing on installs that reached v4.3 before v4.3.4 | docs/release-notes/version-4.3.md:85 (#19571, v4.3.4), added to the existing 0206 migration |
| Memory/Hard disk/Power supply schemas carry defaults the form pre-fills | JSONSchemaProperty.to_form_field() sets initial=self.default |
| Bay types enforce "share at least one type"; unset on either side = unconstrained | Module.is_bay_compatible |
{module} resolves to the position of the containing bay; single token → leaf bay in a nested tree |
dcim/utils.py:76-109, resolve_module_placeholder() |
Install into a bay with no position is rejected when templates use {module} |
same, raises → AbortRequest |
{module}-Bay[1-8] range expansion works alongside the token |
ALPHANUMERIC_EXPANSION_PATTERN splits on the brackets only |
| Bay types are copied onto bays instantiated from templates, for both device creation and module install | devices.py:1126-1129, modules.py:600-604 |
| Device-list Add Components > Module Bays has no bay-type field (bulk edit does) | ModuleBayBulkCreateForm vs. ModuleBayBulkEditForm — and notably ModuleBayTemplateCreateForm does include it, so step 6's instruction is right too |
| Single position value replicated across all bays in that form | ComponentCreateForm.clean() |
Module import keys on device name, module_bay name within device, module_type model |
ModuleImportForm |
| Model name collision risk across manufacturers | ModuleType unique constraint is (manufacturer, model) |
| Disabled bay rejects installs but doesn't evict an existing module | Module.clean(); ModuleBay.clean() has no such guard |
| Delete cascades to nested modules; module always requires a bay | ModularComponentModel.module CASCADE, Module.module_bay non-nullable |
Cross-device move conditions, Failed status, serial in global search, ?profile=…&attr_…= filters |
docs/models/dcim/module.md, ModuleStatusChoices, ModuleIndex, AttributeFiltersMixin |
| Child device types must be 0U | DeviceType.clean() |
Links (modulebaytype.md, modulebay.md, devicebay.md, etc.), the three in-page anchors, mermaid fence config, no-highlight usage, and the nav placement in mkdocs.yml are all fine. Structure mirrors the transceivers page, and nothing here contradicts it.
· 23654-modeling-servers-doc
Agreed, fixed in 6dafba2
Fixed in 6dafba2: the BOSS-N1's |
Closes: #23654
Adds a best practices page for modeling physical servers with modules, module bays and module type profiles, alongside the existing pluggable transceivers guide. It covers when to nest modules and when to stay flat, an eight-step setup from profiles through bulk import, and moving and removing modules. Two worked examples follow the same shape (device type, module types, installation, then a day-2 task): a Dell PowerEdge R760 ending with replacing a failed drive, and a nested GPU platform (Meta Grand Teton) ending with moving an accelerator tray to a spare chassis.
The examples were checked against the vendor documentation, and the behavior the page describes was checked against a test instance (child bays created on install,
{module}resolution in bay and component names, bay type compatibility, the two-pass bulk import, cascade on move and delete, disabled bays rejecting installs).