实例VNIC:附加后自动刷新、IPv6限挂载态与脚注修正
This commit is contained in:
@@ -27,9 +27,15 @@ const emit = defineEmits<{ changed: [] }>()
|
||||
const message = useToast()
|
||||
const vnics = useAsync(() => listVnics(props.cfgId, props.instanceId, props.region))
|
||||
|
||||
/** 附加已受理但 OCI 挂载列表有可见性延迟:限时轮询等新卡入列,入列后交由过渡态轮询接管 */
|
||||
const expectAtLeast = ref(0)
|
||||
let expectUntil = 0
|
||||
|
||||
useTransientPoll(
|
||||
() => vnics.data.value,
|
||||
(list) => !!list?.some((v) => ATTACHMENT_TRANSIENT_STATES.includes(v.lifecycleState)),
|
||||
(list) =>
|
||||
!!list?.some((v) => ATTACHMENT_TRANSIENT_STATES.includes(v.lifecycleState)) ||
|
||||
((list?.length ?? 0) < expectAtLeast.value && Date.now() < expectUntil),
|
||||
() => void vnics.run({ silent: true }),
|
||||
)
|
||||
|
||||
@@ -44,6 +50,12 @@ function refresh() {
|
||||
emit('changed')
|
||||
}
|
||||
|
||||
function onAttached() {
|
||||
expectAtLeast.value = (vnics.data.value ?? []).length + 1
|
||||
expectUntil = Date.now() + 90_000
|
||||
refresh()
|
||||
}
|
||||
|
||||
async function doDetach(attachmentId: string) {
|
||||
detaching.value = attachmentId
|
||||
try {
|
||||
@@ -174,7 +186,7 @@ defineExpose({ refresh: () => vnics.run() })
|
||||
<td colspan="6" class="px-4.5 pt-0 pb-2.5">
|
||||
<div class="flex flex-wrap items-center gap-1.5">
|
||||
<span class="text-[10.5px] font-medium tracking-wider text-ink-3">IPV6</span>
|
||||
<template v-if="v.vnicId">
|
||||
<template v-if="v.vnicId && v.lifecycleState === 'ATTACHED'">
|
||||
<span
|
||||
v-for="addr in v.ipv6Addresses ?? []"
|
||||
:key="addr"
|
||||
@@ -204,7 +216,9 @@ defineExpose({ refresh: () => vnics.run() })
|
||||
+ IPv6
|
||||
</NButton>
|
||||
</template>
|
||||
<span v-else class="text-xs text-ink-3">无 · 附加完成后可添加</span>
|
||||
<span v-else class="text-xs text-ink-3">
|
||||
{{ v.vnicId ? '网卡未在挂载状态,不可操作 IPv6' : '无 · 附加完成后可添加' }}
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -221,7 +235,7 @@ defineExpose({ refresh: () => vnics.run() })
|
||||
|
||||
<FootNote>
|
||||
附加须实例运行中且 shape 有空余 VNIC 配额 · 主网卡不可分离 · 每卡 IPv6
|
||||
可多个(要求所在子网已启用 IPv6)· 次要网卡在 OS 内需自行配置 IP(dhclient / netplan)
|
||||
可多个(要求所在子网已启用 IPv6)
|
||||
</FootNote>
|
||||
|
||||
<AttachVnicModal
|
||||
@@ -230,7 +244,7 @@ defineExpose({ refresh: () => vnics.run() })
|
||||
:instance-id="instanceId"
|
||||
:region="region"
|
||||
:attached-count="(vnics.data.value ?? []).length"
|
||||
@attached="refresh"
|
||||
@attached="onAttached"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user