@@ -64,6 +64,7 @@ export async function set({
|
||||
allowedIpv4Addresses,
|
||||
allowedIpv6Addresses,
|
||||
attached,
|
||||
rateLimit,
|
||||
}) {
|
||||
const oldIpAddresses = vif.allowedIpv4Addresses.concat(
|
||||
vif.allowedIpv6Addresses
|
||||
@@ -91,6 +92,9 @@ export async function set({
|
||||
mac,
|
||||
currently_attached: attached,
|
||||
ipv4_allowed: newIpAddresses,
|
||||
qos_algorithm_type: rateLimit != null ? 'ratelimit' : undefined,
|
||||
qos_algorithm_params:
|
||||
rateLimit != null ? { kbps: String(rateLimit) } : undefined,
|
||||
})
|
||||
|
||||
await this.allocIpAddresses(newVif.$id, newIpAddresses)
|
||||
@@ -107,6 +111,7 @@ export async function set({
|
||||
return this.getXapi(vif).editVif(vif._xapiId, {
|
||||
ipv4Allowed: allowedIpv4Addresses,
|
||||
ipv6Allowed: allowedIpv6Addresses,
|
||||
rateLimit,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -129,6 +134,11 @@ set.params = {
|
||||
optional: true,
|
||||
},
|
||||
attached: { type: 'boolean', optional: true },
|
||||
rateLimit: {
|
||||
description: 'in kilobytes per seconds',
|
||||
optional: true,
|
||||
type: ['number', 'null'],
|
||||
},
|
||||
}
|
||||
|
||||
set.resolve = {
|
||||
|
||||
@@ -569,6 +569,16 @@ const TRANSFORMS = {
|
||||
MAC: obj.MAC,
|
||||
MTU: +obj.MTU,
|
||||
|
||||
// in kB/s
|
||||
rateLimit: (() => {
|
||||
if (obj.qos_algorithm_type === 'ratelimit') {
|
||||
const { kbps } = obj.qos_algorithm_params
|
||||
if (kbps !== undefined) {
|
||||
return +kbps
|
||||
}
|
||||
}
|
||||
})(),
|
||||
|
||||
$network: link(obj, 'network'),
|
||||
$VM: link(obj, 'VM'),
|
||||
}
|
||||
|
||||
@@ -58,5 +58,31 @@ export default {
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
// in kB/s
|
||||
rateLimit: {
|
||||
get: vif => {
|
||||
if (vif.qos_algorithm_type === 'ratelimit') {
|
||||
const { kbps } = vif.qos_algorithm_params
|
||||
if (kbps !== undefined) {
|
||||
return +kbps
|
||||
}
|
||||
}
|
||||
|
||||
// null is value used to remove the existing value
|
||||
//
|
||||
// we need to match this, to allow avoiding the `set` if the value is
|
||||
// already missing.
|
||||
return null
|
||||
},
|
||||
set: (value, vif) =>
|
||||
Promise.all([
|
||||
vif.set_qos_algorithm_type(value === null ? '' : 'ratelimit'),
|
||||
vif.update_qos_algorithm_params(
|
||||
'kbps',
|
||||
value === null ? null : String(value)
|
||||
),
|
||||
]),
|
||||
},
|
||||
}),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user