feat(xo-web/health): filter duplicated MAC addresses by running VMs (#5917)
See xoa-support#4054
This commit is contained in:
parent
216b759df1
commit
919d118f21
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
- [Backup] Go back to previous page instead of going to the overview after editing a job: keeps current filters and page (PR [#5913](https://github.com/vatesfr/xen-orchestra/pull/5913))
|
- [Backup] Go back to previous page instead of going to the overview after editing a job: keeps current filters and page (PR [#5913](https://github.com/vatesfr/xen-orchestra/pull/5913))
|
||||||
- [Health] Do not take into consideration duplicated MAC addresses from CR VMs (PR [#5916](https://github.com/vatesfr/xen-orchestra/pull/5916))
|
- [Health] Do not take into consideration duplicated MAC addresses from CR VMs (PR [#5916](https://github.com/vatesfr/xen-orchestra/pull/5916))
|
||||||
|
- [Health] Ability to filter duplicated MAC addresses by running VMs (PR [#5917](https://github.com/vatesfr/xen-orchestra/pull/5917))
|
||||||
|
|
||||||
### Bug fixes
|
### Bug fixes
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@ const messages = {
|
|||||||
filterOnlyManaged: 'Managed disks',
|
filterOnlyManaged: 'Managed disks',
|
||||||
filterOnlyOrphaned: 'Orphaned disks',
|
filterOnlyOrphaned: 'Orphaned disks',
|
||||||
filterOnlyRegular: 'Normal disks',
|
filterOnlyRegular: 'Normal disks',
|
||||||
|
filterOnlyRunningVms: 'Running VMs',
|
||||||
filterOnlySnapshots: 'Snapshot disks',
|
filterOnlySnapshots: 'Snapshot disks',
|
||||||
filterOnlyUnmanaged: 'Unmanaged disks',
|
filterOnlyUnmanaged: 'Unmanaged disks',
|
||||||
filterSaveAs: 'Save…',
|
filterSaveAs: 'Save…',
|
||||||
|
@ -80,14 +80,14 @@ const AlarmColPool = connectStore(() => ({
|
|||||||
const DUPLICATED_MAC_ADDRESSES_COLUMNS = [
|
const DUPLICATED_MAC_ADDRESSES_COLUMNS = [
|
||||||
{
|
{
|
||||||
name: _('vifMacLabel'),
|
name: _('vifMacLabel'),
|
||||||
itemRenderer: macAddress => <pre>{macAddress}</pre>,
|
itemRenderer: ({ mac }) => <pre>{mac}</pre>,
|
||||||
sortCriteria: macAddress => macAddress,
|
sortCriteria: ({ mac }) => mac,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: _('vifs'),
|
name: _('vifs'),
|
||||||
itemRenderer: (macAddress, { vifsByMac }) => (
|
itemRenderer: ({ vifs }) => (
|
||||||
<div>
|
<div>
|
||||||
{vifsByMac[macAddress].map(vif => (
|
{vifs.map(vif => (
|
||||||
<Row key={vif.id}>
|
<Row key={vif.id}>
|
||||||
<Col>
|
<Col>
|
||||||
{_('vifOnVmWithNetwork', {
|
{_('vifOnVmWithNetwork', {
|
||||||
@ -103,6 +103,10 @@ const DUPLICATED_MAC_ADDRESSES_COLUMNS = [
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const DUPLICATED_MAC_ADDRESSES_FILTERS = {
|
||||||
|
filterOnlyRunningVms: 'nRunningVms:>1',
|
||||||
|
}
|
||||||
|
|
||||||
const SR_COLUMNS = [
|
const SR_COLUMNS = [
|
||||||
{
|
{
|
||||||
name: _('srName'),
|
name: _('srName'),
|
||||||
@ -532,6 +536,7 @@ const HANDLED_VDI_TYPES = new Set(['system', 'user', 'ephemeral'])
|
|||||||
guestToolsVms: getGuestToolsVms,
|
guestToolsVms: getGuestToolsVms,
|
||||||
userSrs: getUserSrs,
|
userSrs: getUserSrs,
|
||||||
vifsByMac: getVifsByMac,
|
vifsByMac: getVifsByMac,
|
||||||
|
vms: getVms,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export default class Health extends Component {
|
export default class Health extends Component {
|
||||||
@ -584,11 +589,16 @@ export default class Health extends Component {
|
|||||||
_getDuplicatedMacAddresses = createCollectionWrapper(
|
_getDuplicatedMacAddresses = createCollectionWrapper(
|
||||||
createSelector(
|
createSelector(
|
||||||
() => this._getVifsByMac(),
|
() => this._getVifsByMac(),
|
||||||
vifsByMac => {
|
() => this.props.vms,
|
||||||
|
(vifsByMac, vms) => {
|
||||||
const duplicatedMacAddresses = []
|
const duplicatedMacAddresses = []
|
||||||
for (const [macAddress, vifs] of Object.entries(vifsByMac)) {
|
for (const [macAddress, vifs] of Object.entries(vifsByMac)) {
|
||||||
if (vifs.length > 1) {
|
if (vifs.length > 1) {
|
||||||
duplicatedMacAddresses.push(macAddress)
|
duplicatedMacAddresses.push({
|
||||||
|
mac: macAddress,
|
||||||
|
nRunningVms: vifs.filter(vif => vms[vif.$VM].power_state === 'Running').length,
|
||||||
|
vifs,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return duplicatedMacAddresses.sort()
|
return duplicatedMacAddresses.sort()
|
||||||
@ -754,8 +764,8 @@ export default class Health extends Component {
|
|||||||
collection={props.areObjectsFetched ? duplicatedMacAddresses : null}
|
collection={props.areObjectsFetched ? duplicatedMacAddresses : null}
|
||||||
columns={DUPLICATED_MAC_ADDRESSES_COLUMNS}
|
columns={DUPLICATED_MAC_ADDRESSES_COLUMNS}
|
||||||
component={SortedTable}
|
component={SortedTable}
|
||||||
data-vifsByMac={this.props.vifsByMac}
|
|
||||||
emptyMessage={_('noDuplicatedMacAddresses')}
|
emptyMessage={_('noDuplicatedMacAddresses')}
|
||||||
|
filters={DUPLICATED_MAC_ADDRESSES_FILTERS}
|
||||||
stateUrlParam='s_duplicated_mac_addresses'
|
stateUrlParam='s_duplicated_mac_addresses'
|
||||||
/>
|
/>
|
||||||
</CardBlock>
|
</CardBlock>
|
||||||
|
Loading…
Reference in New Issue
Block a user