Vue3 migration - vue-migration.js launch + shell compatibility fixes

Signed-off-by: Francesco Torchia <francesco.torchia@suse.com>
This commit is contained in:
Francesco Torchia 2024-09-10 17:26:19 +02:00
parent 9613ada5a7
commit aba9c167e0
No known key found for this signature in database
GPG Key ID: E6D011B7415D4393
150 changed files with 2297 additions and 2244 deletions

View File

@ -1,175 +1,247 @@
module.exports = {
root: true,
env: {
browser: true,
node: true
"root": true,
"env": {
"browser": true,
"node": true
},
globals: { NodeJS: true, Timer: true },
extends: [
'standard',
'eslint:recommended',
'@nuxtjs/eslint-config-typescript',
'plugin:cypress/recommended'
"globals": {
"NodeJS": true,
"Timer": true
},
"extends": [
"standard",
"eslint:recommended",
"@nuxtjs/eslint-config-typescript",
"plugin:cypress/recommended"
],
// add your custom rules here
rules: {
'dot-notation': 'off',
'generator-star-spacing': 'off',
'guard-for-in': 'off',
'linebreak-style': 'off',
'new-cap': 'off',
'no-empty': 'off',
'no-extra-boolean-cast': 'off',
'no-new': 'off',
'no-plusplus': 'off',
'no-useless-escape': 'off',
'nuxt/no-cjs-in-config': 'off',
'semi-spacing': 'off',
'space-in-parens': 'off',
strict: 'off',
'unicorn/no-new-buffer': 'off',
'vue/html-self-closing': 'off',
'vue/multi-word-component-names': 'off',
'vue/no-reserved-component-names': 'off',
'vue/no-unused-components': 'warn',
'vue/no-v-html': 'error',
'wrap-iife': 'off',
'array-bracket-spacing': 'warn',
'arrow-parens': 'warn',
'arrow-spacing': ['warn', { before: true, after: true }],
'block-spacing': ['warn', 'always'],
'brace-style': ['warn', '1tbs'],
'comma-dangle': ['warn', 'only-multiline'],
'comma-spacing': 'warn',
curly: 'warn',
eqeqeq: 'warn',
'func-call-spacing': ['warn', 'never'],
'implicit-arrow-linebreak': 'warn',
indent: ['warn', 2],
'keyword-spacing': 'warn',
'lines-between-class-members': ['warn', 'always', { exceptAfterSingleLine: true }],
'multiline-ternary': ['warn', 'never'],
'newline-per-chained-call': ['warn', { ignoreChainWithDepth: 4 }],
'no-caller': 'warn',
'no-cond-assign': ['warn', 'except-parens'],
'no-console': 'warn',
'no-debugger': 'warn',
'no-eq-null': 'warn',
'no-eval': 'warn',
'no-trailing-spaces': 'warn',
'no-undef': 'warn',
'no-unused-vars': 'warn',
'no-whitespace-before-property': 'warn',
'object-curly-spacing': ['warn', 'always'],
'object-property-newline': 'warn',
'object-shorthand': 'warn',
'padded-blocks': ['warn', 'never'],
'prefer-arrow-callback': 'warn',
'prefer-template': 'warn',
'quote-props': 'warn',
'rest-spread-spacing': 'warn',
semi: ['warn', 'always'],
'space-before-function-paren': ['warn', 'never'],
'space-infix-ops': 'warn',
'spaced-comment': 'warn',
'switch-colon-spacing': 'warn',
'template-curly-spacing': ['warn', 'always'],
'yield-star-spacing': ['warn', 'both'],
'key-spacing': ['warn', {
align: {
beforeColon: false,
afterColon: true,
on: 'value',
mode: 'minimum'
},
multiLine: {
beforeColon: false,
afterColon: true
},
}],
'object-curly-newline': ['warn', {
ObjectExpression: {
multiline: true,
minProperties: 3
},
ObjectPattern: {
multiline: true,
minProperties: 4
},
ImportDeclaration: {
multiline: true,
minProperties: 5
},
ExportDeclaration: {
multiline: true,
minProperties: 3
}
}],
'padding-line-between-statements': [
'warn',
"rules": {
"dot-notation": "off",
"generator-star-spacing": "off",
"guard-for-in": "off",
"linebreak-style": "off",
"new-cap": "off",
"no-empty": "off",
"no-extra-boolean-cast": "off",
"no-new": "off",
"no-plusplus": "off",
"no-useless-escape": "off",
"nuxt/no-cjs-in-config": "off",
"semi-spacing": "off",
"space-in-parens": "off",
"strict": "off",
"unicorn/no-new-buffer": "off",
"vue/html-self-closing": "off",
"vue/multi-word-component-names": "off",
"vue/no-reserved-component-names": "off",
"vue/no-unused-components": "warn",
"vue/no-v-html": "error",
"wrap-iife": "off",
"array-bracket-spacing": "warn",
"arrow-parens": "warn",
"arrow-spacing": [
"warn",
{
blankLine: 'always',
prev: '*',
next: 'return',
},
{
blankLine: 'always',
prev: 'function',
next: 'function',
},
// This configuration would require blank lines after every sequence of variable declarations
{
blankLine: 'always',
prev: ['const', 'let', 'var'],
next: '*'
},
{
blankLine: 'any',
prev: ['const', 'let', 'var'],
next: ['const', 'let', 'var']
"before": true,
"after": true
}
],
quotes: [
'warn',
'single',
{
avoidEscape: true,
allowTemplateLiterals: true
},
"block-spacing": [
"warn",
"always"
],
'space-unary-ops': [
'warn',
"brace-style": [
"warn",
"1tbs"
],
"comma-dangle": [
"warn",
"only-multiline"
],
"comma-spacing": "warn",
"curly": "warn",
"eqeqeq": "warn",
"func-call-spacing": [
"warn",
"never"
],
"implicit-arrow-linebreak": "warn",
"indent": [
"warn",
2
],
"keyword-spacing": "warn",
"lines-between-class-members": [
"warn",
"always",
{
words: true,
nonwords: false,
"exceptAfterSingleLine": true
}
],
// FIXME: The following is disabled due to new linter and old JS code. These should all be enabled and underlying issues fixed
'vue/order-in-components': 'off',
'vue/no-lone-template': 'off',
'vue/v-slot-style': 'off',
'vue/component-tags-order': 'off',
'vue/no-mutating-props': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'array-callback-return': 'off',
"multiline-ternary": [
"warn",
"never"
],
"newline-per-chained-call": [
"warn",
{
"ignoreChainWithDepth": 4
}
],
"no-caller": "warn",
"no-cond-assign": [
"warn",
"except-parens"
],
"no-console": "warn",
"no-debugger": "warn",
"no-eq-null": "warn",
"no-eval": "warn",
"no-trailing-spaces": "warn",
"no-undef": "warn",
"no-unused-vars": "warn",
"no-whitespace-before-property": "warn",
"object-curly-spacing": [
"warn",
"always"
],
"object-property-newline": "warn",
"object-shorthand": "warn",
"padded-blocks": [
"warn",
"never"
],
"prefer-arrow-callback": "warn",
"prefer-template": "warn",
"quote-props": "warn",
"rest-spread-spacing": "warn",
"semi": [
"warn",
"always"
],
"space-before-function-paren": [
"warn",
"never"
],
"space-infix-ops": "warn",
"spaced-comment": "warn",
"switch-colon-spacing": "warn",
"template-curly-spacing": [
"warn",
"always"
],
"yield-star-spacing": [
"warn",
"both"
],
"key-spacing": [
"warn",
{
"align": {
"beforeColon": false,
"afterColon": true,
"on": "value",
"mode": "minimum"
},
"multiLine": {
"beforeColon": false,
"afterColon": true
}
}
],
"object-curly-newline": [
"warn",
{
"ObjectExpression": {
"multiline": true,
"minProperties": 3
},
"ObjectPattern": {
"multiline": true,
"minProperties": 4
},
"ImportDeclaration": {
"multiline": true,
"minProperties": 5
},
"ExportDeclaration": {
"multiline": true,
"minProperties": 3
}
}
],
"padding-line-between-statements": [
"warn",
{
"blankLine": "always",
"prev": "*",
"next": "return"
},
{
"blankLine": "always",
"prev": "function",
"next": "function"
},
{
"blankLine": "always",
"prev": [
"const",
"let",
"var"
],
"next": "*"
},
{
"blankLine": "any",
"prev": [
"const",
"let",
"var"
],
"next": [
"const",
"let",
"var"
]
}
],
"quotes": [
"warn",
"single",
{
"avoidEscape": true,
"allowTemplateLiterals": true
}
],
"space-unary-ops": [
"warn",
{
"words": true,
"nonwords": false
}
],
"vue/order-in-components": "off",
"vue/no-lone-template": "off",
"vue/v-slot-style": "off",
"vue/component-tags-order": "off",
"vue/no-mutating-props": "off",
"@typescript-eslint/no-unused-vars": "off",
"array-callback-return": "off",
"vue/one-component-per-file": "off",
"vue/no-deprecated-slot-attribute": "off",
"vue/require-explicit-emits": "off",
"vue/v-on-event-hyphenation": "off"
},
overrides: [
"overrides": [
{
files: ['*.js'],
rules: {
// FIXME: The following is disabled due to new linter and old JS code. These should all be enabled and underlying issues fixed
'prefer-regex-literals': 'off',
'vue/component-definition-name-casing': 'off',
'no-unreachable-loop': 'off',
'computed-property-spacing': 'off',
"files": [
"*.js"
],
"rules": {
"prefer-regex-literals": "off",
"vue/component-definition-name-casing": "off",
"no-unreachable-loop": "off",
"computed-property-spacing": "off"
}
}
]
};
}

View File

@ -8,14 +8,17 @@
"dependencies": {
"@rancher/components": "0.3.0-alpha.1",
"@rancher/shell": "2.0.0",
"@vue/cli-plugin-babel": "5.0.8",
"@vue/cli-plugin-typescript": "5.0.8",
"@vue/cli-service": "5.0.8",
"cache-loader": "^4.1.0",
"codemirror": ">=5.64.0 <6",
"codemirror-editor-vue3": "^2.7.0",
"core-js": "3.25.3",
"css-loader": "4.3.0",
"@vue/cli-plugin-babel": "5.0.8",
"@vue/cli-service": "5.0.8",
"@vue/cli-plugin-typescript": "5.0.8",
"cache-loader": "^4.1.0",
"yaml": "2.0.0",
"node-polyfill-webpack-plugin": "^3.0.0"
"diff_match_patch": "^0.1.1",
"node-polyfill-webpack-plugin": "^3.0.0",
"yaml": "2.0.0"
},
"resolutions": {
"@vue/cli-plugin-babel": "5.0.8",
@ -46,13 +49,13 @@
"publish-pkgs": "./node_modules/@rancher/shell/scripts/extension/publish",
"parse-tag-name": "./node_modules/@rancher/shell/scripts/extension/parse-tag-name",
"lint": "./node_modules/.bin/eslint --max-warnings 0 --ext .js,.ts,.vue .",
"test": "jest --watch"
"test": "jest --watch",
"migrate": "node ./vue-migrate.js"
},
"devDependencies": {
"@types/jest": "^29.5.12",
"@types/lodash": "^4.17.5",
"@vue/vue2-jest": "^29.2.6",
"babel-plugin-transform-require-context": "^0.1.1",
"ts-jest": "^29.1.4"
"@vue/vue3-jest": "^27.0.0-alpha.1",
"babel-plugin-transform-require-context": "^0.1.1"
}
}

View File

@ -122,9 +122,7 @@ export default {
</div>
<div class="mt-10">
<Tag
v-for="(tag) in value"
:key="tag"
class="tag"
v-for="((tag), i) in value" :key="i" class="tag"
>
<span>
{{ tag }}
@ -157,7 +155,7 @@ export default {
>
<input
ref="addTagInput"
v-model="inputValue"
v-model:value="inputValue"
type="text"
size="small"
@blur="confirmAdd"

View File

@ -88,7 +88,7 @@ export default {
<div class="filter-popup">
<div>
<LabeledSelect
v-model="parentSriov"
v-model:value="parentSriov"
:options="parentSriovOptions"
:searchable="true"
:label="label"
@ -121,7 +121,7 @@ export default {
width: 300px;
}
::v-deep .box {
:deep() .box {
display: grid;
grid-template-columns: 40% 40% 10%;
column-gap: 1.75%;

View File

@ -117,7 +117,7 @@ export default {
<template>
<div class="filter">
<template v-for="(label, index) in searchLabels">
<template v-for="(label, index) in searchLabels" :key="index">
<span v-if="label.key" :key="`${label.key}${index}`" class="banner-item bg-warning">
{{ label.key }}{{ label.value ? "=" : '' }}{{ label.value }}<i class="icon icon-close" @click="remove(label)" />
</span>
@ -139,11 +139,11 @@ export default {
<div class="filter-popup">
<div>
<ArrayList
v-model="searchLabels"
v-model:value="searchLabels"
:show-header="true"
:default-add-value="defaultAddValue"
:initial-empty-row="true"
@input="filterRows"
@update:value="filterRows"
>
<template v-slot:column-headers>
<div class="box">
@ -162,11 +162,11 @@ export default {
<Select
ref="select"
key="label"
v-model="scope.row.value.key"
v-model:value="scope.row.value.key"
:append-to-body="false"
:searchable="true"
:options="optionLabels"
@input="filterRows"
@update:value="filterRows"
/>
</div>
<div class="value">
@ -174,13 +174,13 @@ export default {
v-if="calcValueOptions(scope.row.value.key).length > 0"
ref="select"
key="value"
v-model="scope.row.value.value"
v-model:value="scope.row.value.value"
:append-to-body="false"
:searchable="true"
:options="calcValueOptions(scope.row.value.key)"
@input="filterRows"
@update:value="filterRows"
/>
<LabeledInput v-else v-model="scope.row.value.value" @input="filterRows" />
<LabeledInput v-else v-model:value="scope.row.value.value" @update:value="filterRows" />
</div>
</template>
@ -234,7 +234,7 @@ export default {
width: 600px;
}
::v-deep .box {
:deep() .box {
display: grid;
grid-template-columns: 40% 40% 10%;
column-gap: 1.75%;

View File

@ -161,7 +161,7 @@ export default {
<div>
<LabeledSelect
v-model="version"
v-model:value="version"
class="mb-10"
:label="t('harvester.upgradePage.versionLabel')"
:options="versionOptions"
@ -173,7 +173,7 @@ export default {
class="mb-5"
>
<Checkbox
v-model="enableLogging"
v-model:value="enableLogging"
class="check"
type="checkbox"
:label="t('harvester.upgradePage.enableLogging')"
@ -187,7 +187,7 @@ export default {
></p>
<Checkbox
v-model="readyReleaseNote"
v-model:value="readyReleaseNote"
class="check"
type="checkbox"
label-key="harvester.upgradePage.checkReady"

View File

@ -42,7 +42,7 @@ export default {
<h4>{{ title }} <span class="float-r text-info">{{ precent }}%</span></h4>
<div>
<div>
<Collapse :open.sync="open">
<Collapse v-model:open="open">
<template #title>
<div class="total-bar">
<span class="bar"><PercentageBar :value="precent" preferred-direction="MORE" /></span>
@ -52,7 +52,7 @@ export default {
<template>
<div class="custom-content">
<div v-for="item in list" :key="item.name" class="item">
<div v-for="(item, i) in list" :key="i" >
<p>{{ item.name }} <span class="status" :class="{ [item.state]: true }">{{ item.state }}</span></p>
<PercentageBar :value="item.percent" preferred-direction="MORE" />
<p class="warning">

View File

@ -104,7 +104,7 @@ export default {
<template>
<div>
<div v-for="setting in categorySettings" :key="setting.id" class="advanced-setting mb-20">
<div v-for="(setting, i) in categorySettings" :key="i" >
<div class="header">
<div class="title">
<h1>

View File

@ -204,7 +204,7 @@ export default {
/>
<div class="displayed-banners">
<Banner v-for="(keys,index) in displayedKeys" :key="index" color="info" :closable="true" @close="removeKey(keys)">
<Banner v-for="(keys,index) in displayedKeys" :key="index">
<span v-clean-html="keys"></span>
</Banner>
</div>

View File

@ -318,7 +318,7 @@ export default {
<hr>
<div v-for="(keys, index) in preferredShortcutKeys" :key="index" class="mb-5">
<div v-for="(keys, index) in preferredShortcutKeys" :key="index">
<button class="btn btn-sm bg-primary" @click="sendCustomKeys(keys.value)">
{{ keys.label }}
</button>

View File

@ -26,7 +26,7 @@ export default {
<div>
<TextAreaAutoGrow
v-model="value.value"
v-model:value="value.value"
:min-height="254"
/>
</div>

View File

@ -51,16 +51,16 @@ export default {
<div class="row">
<div class="col span-12">
<RadioGroup
v-model="parseDefaultValue.enable"
v-model:value="parseDefaultValue.enable"
class="mb-20"
name="model"
:options="[true,false]"
:labels="[t('generic.enabled'), t('generic.disabled')]"
@input="update"
@update:value="update"
/>
<UnitInput
v-if="parseDefaultValue.enable"
v-model="parseDefaultValue.expiringInHours"
v-model:value="parseDefaultValue.expiringInHours"
v-int-number
class="mb-20"
:min="1"
@ -69,14 +69,14 @@ export default {
:suffix="parseDefaultValue.expiringInHours === 1 ? 'Hour' : 'Hours'"
:label="t('harvester.setting.autoRotateRKE2Certs.expiringInHours')"
:mode="mode"
@input="update"
@update:value="update"
/>
</div>
</div>
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -121,16 +121,16 @@ export default {
</script>
<template>
<div class="row" @input="update">
<div class="row" @update:value="update">
<div class="col span-12">
<LabeledSelect v-model="parseDefaultValue.type" class="mb-20" :label="t('harvester.fields.type')" :options="typeOption" @input="update" />
<LabeledSelect v-model:value="parseDefaultValue.type" class="mb-20" :label="t('harvester.fields.type')" :options="typeOption" @update:value="update" />
<LabeledInput v-model="parseDefaultValue.endpoint" class="mb-5" :placeholder="endpointPlaceholder" :mode="mode" label="Endpoint" />
<LabeledInput v-model:value="parseDefaultValue.endpoint" class="mb-5" :placeholder="endpointPlaceholder" :mode="mode" label="Endpoint" />
<Tip class="mb-20" icon="icon icon-info" :text="t('harvester.backup.backupTargetTip')" />
<template v-if="isS3">
<LabeledInput
v-model="parseDefaultValue.bucketName"
v-model:value="parseDefaultValue.bucketName"
class="mb-20"
:mode="mode"
label="Bucket Name"
@ -138,7 +138,7 @@ export default {
/>
<LabeledInput
v-model="parseDefaultValue.bucketRegion"
v-model:value="parseDefaultValue.bucketRegion"
class="mb-20"
:mode="mode"
label="Bucket Region"
@ -146,7 +146,7 @@ export default {
/>
<LabeledInput
v-model="parseDefaultValue.accessKeyId"
v-model:value="parseDefaultValue.accessKeyId"
:placeholder="t('harvester.setting.placeholder.accessKeyId')"
class="mb-20"
:mode="mode"
@ -155,7 +155,7 @@ export default {
/>
<Password
v-model="parseDefaultValue.secretAccessKey"
v-model:value="parseDefaultValue.secretAccessKey"
class="mb-20"
:mode="mode"
:placeholder="t('harvester.setting.placeholder.secretAccessKey')"
@ -163,7 +163,7 @@ export default {
required
/>
<LabeledSelect v-model="parseDefaultValue.virtualHostedStyle" class="mb-20" label="Virtual Hosted-Style" :options="virtualHostedStyleType" @input="update" />
<LabeledSelect v-model:value="parseDefaultValue.virtualHostedStyle" class="mb-20" label="Virtual Hosted-Style" :options="virtualHostedStyleType" @update:value="update" />
<div class="mb-20">
<Tip icon="icon icon-info">

View File

@ -233,20 +233,19 @@ export default {
<div class="row mb-20">
<div class="col span-12">
<LabeledInput
v-model="mirror.key"
v-model:value="mirror.key"
:mode="mode"
required
label-key="harvester.setting.containerdRegistry.mirrors.registryName"
@keydown.native.enter.prevent="()=>{}"
@input="update"
@update:value="update"
/>
</div>
</div>
<div class="mb-20">
<LabeledSelect
:key="mirror.idx"
v-model="mirror.value.Endpoints"
v-model:value="mirror.value.Endpoints"
:mode="mode"
required
label-key="harvester.setting.containerdRegistry.mirrors.endpoints"
@ -255,20 +254,20 @@ export default {
:searchable="true"
:options="[]"
@keydown.native.enter.prevent="()=>{}"
@input="update"
@update:value="update"
/>
</div>
<div class="row mb-20">
<KeyValue
v-model="mirror.value.Rewrites"
v-model:value="mirror.value.Rewrites"
:add-label="t('harvester.setting.containerdRegistry.mirrors.rewrite.addRewrite')"
:mode="mode"
:title="t('harvester.setting.containerdRegistry.mirrors.rewrite.rewrite')"
:read-allowed="false"
:value-can-be-empty="true"
@keydown.native.enter.prevent="()=>{}"
@input="update"
@update:value="update"
/>
</div>
</infobox>
@ -291,11 +290,11 @@ export default {
<div class="col span-12">
<div class="col span-12">
<LabeledInput
v-model="config.key"
v-model:value="config.key"
:mode="mode"
:placeholder="t('harvester.setting.containerdRegistry.configs.registryPlaceholder')"
label-key="harvester.setting.containerdRegistry.configs.registryEDQNorIP"
@input="update"
@update:value="update"
/>
</div>
</div>
@ -304,19 +303,19 @@ export default {
<div class="row mb-20">
<div class="col span-6">
<LabeledInput
v-model="config.value.Auth.Username"
v-model:value="config.value.Auth.Username"
:mode="mode"
label-key="harvester.setting.containerdRegistry.configs.username"
@input="update"
@update:value="update"
/>
</div>
<div class="col span-6">
<LabeledInput
v-model="config.value.Auth.Password"
v-model:value="config.value.Auth.Password"
:mode="mode"
label-key="harvester.setting.containerdRegistry.configs.password"
@input="update"
@update:value="update"
/>
</div>
</div>
@ -324,34 +323,34 @@ export default {
<div class="row mb-20">
<div class="col span-6">
<LabeledInput
v-model="config.value.Auth.Auth"
v-model:value="config.value.Auth.Auth"
:mode="mode"
type="multiline"
:min-height="150"
label-key="harvester.setting.containerdRegistry.configs.auth"
@input="update"
@update:value="update"
/>
</div>
<div class="col span-6">
<LabeledInput
v-model="config.value.Auth.IdentityToken"
v-model:value="config.value.Auth.IdentityToken"
:mode="mode"
type="multiline"
:min-height="150"
label-key="harvester.setting.containerdRegistry.configs.identityToken"
@input="update"
@update:value="update"
/>
</div>
</div>
<div class="row">
<LabeledSelect
v-model="config.value.TLS.InsecureSkipVerify"
v-model:value="config.value.TLS.InsecureSkipVerify"
:mode="mode"
label-key="harvester.setting.containerdRegistry.configs.insecureSkipVerify"
:options="insecureSkipVerifyOption"
@input="update"
@update:value="update"
/>
</div>
</infobox>

View File

@ -181,7 +181,7 @@ export default {
<template>
<div>
<InfoBox v-for="(driver, idx) in configArr" :key="driver.key" class="box">
<InfoBox v-for="(driver, idx) in configArr" :key="idx">
<button :disabled="disableEdit(driver.key)" type="button" class="role-link btn btn-sm remove" @click="remove(idx)">
<i class="icon icon-x" />
</button>
@ -189,7 +189,7 @@ export default {
<div class="row">
<div class="col span-4">
<LabeledSelect
v-model="driver.key"
v-model:value="driver.key"
:mode="mode"
required
:disabled="disableEdit(driver.key)"
@ -197,33 +197,33 @@ export default {
:searchable="true"
:options="provisioners"
@keydown.native.enter.prevent="()=>{}"
@input="update"
@update:value="update"
/>
</div>
<div class="col span-4">
<LabeledSelect
v-model="driver.value.volumeSnapshotClassName"
v-model:value="driver.value.volumeSnapshotClassName"
:mode="mode"
required
:disabled="disableEdit(driver.key)"
:options="getVolumeSnapshotOptions(driver.key)"
:label="t('harvester.setting.csiDriverConfig.volumeSnapshotClassName')"
@keydown.native.enter.prevent="()=>{}"
@input="update"
@update:value="update"
/>
</div>
<div class="col span-4">
<LabeledSelect
v-model="driver.value.backupVolumeSnapshotClassName"
v-model:value="driver.value.backupVolumeSnapshotClassName"
:mode="mode"
required
:disabled="disableEdit(driver.key)"
:options="getVolumeSnapshotOptions(driver.key)"
:label="t('harvester.setting.csiDriverConfig.backupVolumeSnapshotClassName')"
@keydown.native.enter.prevent="()=>{}"
@input="update"
@update:value="update"
/>
</div>
</div>

View File

@ -32,7 +32,7 @@ export default {
>
<div class="col span-12">
<UnitInput
v-model="terminationGracePeriodSeconds"
v-model:value="terminationGracePeriodSeconds"
:suffix="terminationGracePeriodSeconds === 1 ? 'Second' : 'Seconds'"
:label="t('harvester.virtualMachine.terminationGracePeriodSeconds.label')"
:mode="mode"

View File

@ -57,25 +57,25 @@ export default {
<t k="harvester.setting.httpProxy.warning" :raw="true" />
</Banner>
<div class="row" @input="update">
<div class="row" @update:value="update">
<div class="col span-12">
<template>
<LabeledInput
v-model="parseDefaultValue.httpProxy"
v-model:value="parseDefaultValue.httpProxy"
class="mb-20"
:mode="mode"
label="http-proxy"
/>
<LabeledInput
v-model="parseDefaultValue.httpsProxy"
v-model:value="parseDefaultValue.httpsProxy"
class="mb-20"
:mode="mode"
label="https-proxy"
/>
<LabeledInput
v-model="parseDefaultValue.noProxy"
v-model:value="parseDefaultValue.noProxy"
class="mb-20"
:mode="mode"
label="no-proxy"

View File

@ -60,12 +60,12 @@ export default {
<div class="col span-12">
<template>
<ArrayList
v-model="parseDefaultValue.ntpServers"
v-model:value="parseDefaultValue.ntpServers"
:title="t('harvester.host.ntp.label')"
:protip="t('harvester.host.ntp.tips')"
:value-placeholder="t('harvester.host.ntp.placeholder')"
:mode="mode"
@input="update"
@update:value="update"
/>
</template>
</div>

View File

@ -54,7 +54,7 @@ export default {
<div class="col span-12">
<template>
<UnitInput
v-model="parseDefaultValue.cpu"
v-model:value="parseDefaultValue.cpu"
v-int-number
label-key="harvester.generic.cpu"
suffix="%"
@ -62,11 +62,11 @@ export default {
required
:mode="mode"
class="mb-20"
@input="update"
@update:value="update"
/>
<UnitInput
v-model="parseDefaultValue.memory"
v-model:value="parseDefaultValue.memory"
v-int-number
label-key="harvester.generic.memory"
suffix="%"
@ -74,11 +74,11 @@ export default {
required
:mode="mode"
class="mb-20"
@input="update"
@update:value="update"
/>
<UnitInput
v-model="parseDefaultValue.storage"
v-model:value="parseDefaultValue.storage"
v-int-number
label-key="harvester.generic.storage"
suffix="%"
@ -86,7 +86,7 @@ export default {
required
:mode="mode"
class="mb-20"
@input="update"
@update:value="update"
/>
</template>
</div>

View File

@ -138,22 +138,22 @@ export default {
<div class="row mt-10">
<div class="col span-12">
<LabeledSelect
v-model="parsedDefaultValue.protocols"
v-model:value="parsedDefaultValue.protocols"
:mode="mode"
label-key="harvester.sslParameters.protocols.label"
:multiple="true"
:options="protocolOptions"
@input="update"
@update:value="update"
/>
</div>
</div>
<div class="row mt-20">
<div class="col span-12">
<LabeledInput
v-model="parsedDefaultValue.ciphers"
v-model:value="parsedDefaultValue.ciphers"
:mode="mode"
label-key="harvester.sslParameters.ciphers.label"
@input="update"
@update:value="update"
/>
</div>
</div>

View File

@ -165,19 +165,19 @@ export default {
<template>
<div
:class="mode"
@input="update"
@update:value="update"
>
<Banner color="warning">
<t k="harvester.setting.storageNetwork.warning" :raw="true" />
</Banner>
<RadioGroup
v-model="openVlan"
v-model:value="openVlan"
class="mb-20"
name="model"
:options="[true,false]"
:labels="[t('generic.enabled'), t('generic.disabled')]"
@input="update"
@update:value="update"
/>
<div v-if="openVlan">
@ -190,16 +190,16 @@ export default {
/>
<LabeledSelect
v-model="parsedDefaultValue.clusterNetwork"
v-model:value="parsedDefaultValue.clusterNetwork"
label-key="harvester.setting.storageNetwork.clusterNetwork"
class="mb-20"
required
:options="clusterNetworkOptions"
@input="update"
@update:value="update"
/>
<LabeledInput
v-model="parsedDefaultValue.range"
v-model:value="parsedDefaultValue.range"
class="mb-5"
:mode="mode"
required
@ -211,12 +211,12 @@ export default {
</Tip>
<ArrayList
v-model="exclude"
v-model:value="exclude"
:show-header="true"
:default-add-value="defaultAddValue"
:mode="mode"
:add-label="t('harvester.setting.storageNetwork.exclude.addIp')"
@input="update"
@update:value="update"
>
<template v-slot:column-headers>
<div class="box">
@ -228,9 +228,9 @@ export default {
<template v-slot:columns="scope">
<div class="key">
<input
v-model="scope.row.value"
v-model:value="scope.row.value"
:placeholder="t('harvester.setting.storageNetwork.exclude.placeholder')"
@input="update"
@update:value="update"
/>
</div>
</template>

View File

@ -105,7 +105,7 @@ export default {
<div class="col span-12">
<template>
<LabeledInput
v-model="parseDefaultValue.repository"
v-model:value="parseDefaultValue.repository"
class="mb-20"
:mode="mode"
required
@ -113,7 +113,7 @@ export default {
/>
<LabeledInput
v-model="parseDefaultValue.tag"
v-model:value="parseDefaultValue.tag"
class="mb-20"
:mode="mode"
required
@ -121,7 +121,7 @@ export default {
/>
<LabeledSelect
v-model="parseDefaultValue.imagePullPolicy"
v-model:value="parseDefaultValue.imagePullPolicy"
class="mb-20"
required
label-key="harvester.setting.supportBundleImage.imagePullPolicy"

View File

@ -61,12 +61,12 @@ export default {
<div class="row">
<div class="col span-12">
<LabeledSelect
v-model="namespaces"
v-model:value="namespaces"
:multiple="true"
label-key="nameNsDescription.namespace.label"
:mode="mode"
:options="namespaceOptions"
@input="update"
@update:value="update"
/>
</div>
</div>

View File

@ -51,7 +51,7 @@ export default {
<div class="row" @input="update">
<div class="col span-12">
<RadioGroup
v-model="parseDefaultValue.enable"
v-model:value="parseDefaultValue.enable"
class="mb-20"
name="model"
:options="[true,false]"
@ -72,7 +72,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -92,7 +92,7 @@ export default {
</script>
<template>
<div class="disk" @input="update">
<div class="disk" @update:value="update">
<Banner
v-if="mountedMessage"
color="error"
@ -107,7 +107,7 @@ export default {
>
<template #value>
<div class="mt-5">
<Tag v-for="(prop, key) in value.tags" :key="key + prop" class="mr-5">
<Tag v-for="(prop, key) in value.tags" :key="key">
{{ prop }}
</Tag>
</div>

View File

@ -57,9 +57,7 @@ export default {
<div>
<div v-if="inventory.warningMessages.length > 0">
<Banner
v-for="msg in inventory.warningMessages"
:key="msg.text"
color="error"
v-for="(msg, i) in inventory.warningMessages" :key="i" color="error"
:label="msg.text"
/>
</div>
@ -117,7 +115,7 @@ export default {
>
<div class="col span-6">
<RadioGroup
v-model="enableInventory"
v-model:value="enableInventory"
:options="[
{ label: t('generic.enabled'), value: true },
{ label: t('generic.disabled'), value: false }

View File

@ -102,9 +102,9 @@ export default {
default-sort-by="age"
:rows="rows"
key-field="_key"
v-on="$listeners"
>
<template slot="cell:state" slot-scope="scope">
<template cell:state="scope">
<div class="state">
<HarvesterVmState class="vmstate" :row="scope.row" :all-cluster-network="allClusterNetwork" />
</div>
@ -116,11 +116,11 @@ export default {
<style lang="scss" scoped>
#host-instances {
::v-deep thead th {
:deep() thead th {
vertical-align: middle;
}
::v-deep .state {
:deep() .state {
display: flex;
.vmstate {

View File

@ -87,7 +87,7 @@ export default {
<div class="row mt-20">
<div class="col span-12">
<ArrayListGrouped
v-model="linkStatus"
v-model:value="linkStatus"
:mode="mode"
:can-remove="false"
>

View File

@ -378,7 +378,7 @@ export default {
>
<Tab name="basics" :label="t('harvester.host.tabs.basics')" :weight="4" class="bordered-table">
<Basic
v-model="value"
v-model:value="value"
:metrics="metrics"
:mode="mode"
/>
@ -394,9 +394,7 @@ export default {
class="bordered-table"
>
<InfoBox
v-for="vlan in vlanStatuses"
:key="vlan.id"
>
v-for="(vlan, i) in vlanStatuses" :key="i" >
<VlanStatus
:value="vlan"
:mode="mode"
@ -420,7 +418,7 @@ export default {
>
<template #value>
<div class="mt-5">
<Tag v-for="(prop, key) in longhornNode.spec.tags" :key="key + prop" class="mr-5">
<Tag v-for="(prop, key) in longhornNode.spec.tags" :key="key">
{{ prop }}
</Tag>
</div>
@ -429,14 +427,14 @@ export default {
</div>
</div>
<ArrayListGrouped
v-model="newDisks"
v-model:value="newDisks"
:mode="mode"
:can-remove="false"
:initial-empty-row="false"
>
<template #default="props">
<Disk
v-model="props.row.value"
v-model:value="props.row.value"
class="mb-20"
:mode="mode"
:disks="disks"

View File

@ -158,7 +158,7 @@ export default {
<template>
<ResourceTabs
v-model="value"
v-model:value="value"
:need-events="false"
:need-related="false"
:mode="mode"
@ -255,9 +255,7 @@ export default {
<div v-else>
<div
v-for="(row,idx) in parsedRows"
:key="idx"
class="entry"
v-for="(row,idx) in parsedRows" :key="idx"class="entry"
>
<DetailText
:value="row.value"

View File

@ -154,7 +154,7 @@ export default {
<template #value>
<div>
<ul>
<li v-for="(disk) in disks" :key="disk.bootOrder">
<li v-for="(disk, i) in disks" :key="i" >
{{ disk.bootOrder }}. {{ disk.name }} ({{ getDeviceType(disk) }})
</li>
</ul>
@ -167,7 +167,7 @@ export default {
<template #value>
<div>
<ul v-if="cdroms.length > 0">
<li v-for="(rom) in cdroms" :key="rom.name">
<li v-for="(rom, i) in cdroms" :key="i" >
{{ rom.name }}
</li>
</ul>
@ -186,7 +186,7 @@ export default {
:label="t('harvester.tab.volume')"
:weight="-1"
>
<Volume v-model="diskRows" :mode="mode" />
<Volume v-model:value="diskRows" :mode="mode" />
</Tab>
<Tab
@ -194,11 +194,11 @@ export default {
:label="t('harvester.tab.network')"
:weight="-2"
>
<Network v-model="networkRows" :mode="mode" />
<Network v-model:value="networkRows" :mode="mode" />
</Tab>
<Tab name="keypairs" :label="t('harvester.virtualMachine.detail.tabs.keypairs')" class="bordered-table" :weight="-3">
<OverviewKeypairs v-if="vm" v-model="vm" />
<OverviewKeypairs v-if="vm" v-model:value="vm" />
</Tab>
<Tab
@ -214,7 +214,7 @@ export default {
/>
<div class="spacer"></div>
<Checkbox v-model="installUSBTablet" :mode="mode" class="check" type="checkbox" :label="t('harvester.virtualMachine.enableUsb')" />
<Checkbox v-model:value="installUSBTablet" :mode="mode" class="check" type="checkbox" :label="t('harvester.virtualMachine.enableUsb')" />
</Tab>
</Tabbed>
</CruResource>

View File

@ -124,7 +124,7 @@ export default {
class="bordered-table"
>
<Storage
v-model="value.spec.storageClassParameters"
v-model:value="value.spec.storageClassParameters"
/>
</Tab>
</Tabbed>

View File

@ -154,7 +154,7 @@ export default {
<template #value>
<div>
<ul>
<li v-for="(disk) in disks" :key="disk.bootOrder">
<li v-for="(disk, i) in disks" :key="i" >
{{ disk.bootOrder }}. {{ disk.name }} ({{ getDeviceType(disk) }})
</li>
</ul>
@ -167,7 +167,7 @@ export default {
<template #value>
<div>
<ul v-if="cdroms.length > 0">
<li v-for="(rom) in cdroms" :key="rom.name">
<li v-for="(rom, i) in cdroms" :key="i" >
{{ rom.name }}
</li>
</ul>
@ -186,7 +186,7 @@ export default {
:label="t('harvester.tab.volume')"
:weight="-1"
>
<Volume v-model="diskRows" :mode="mode" />
<Volume v-model:value="diskRows" :mode="mode" />
</Tab>
<Tab
@ -194,11 +194,11 @@ export default {
:label="t('harvester.tab.network')"
:weight="-2"
>
<Network v-model="networkRows" :mode="mode" />
<Network v-model:value="networkRows" :mode="mode" />
</Tab>
<Tab name="keypairs" :label="t('harvester.virtualMachine.detail.tabs.keypairs')" class="bordered-table" :weight="-3">
<OverviewKeypairs v-if="vm" v-model="vm" />
<OverviewKeypairs v-if="vm" v-model:value="vm" />
</Tab>
<Tab
@ -214,7 +214,7 @@ export default {
/>
<div class="spacer"></div>
<Checkbox v-model="installUSBTablet" :mode="mode" class="check" type="checkbox" :label="t('harvester.virtualMachine.enableUsb')" />
<Checkbox v-model:value="installUSBTablet" :mode="mode" class="check" type="checkbox" :label="t('harvester.virtualMachine.enableUsb')" />
</Tab>
</Tabbed>
</CruResource>

View File

@ -182,7 +182,7 @@ export default {
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.ipAddress')">
<template #value>
<HarvesterIpAddress v-model="value.id" :row="value" />
<HarvesterIpAddress v-model:value="value.id" :row="value" />
</template>
</LabelValue>
</div>
@ -201,7 +201,7 @@ export default {
<InputOrDisplay :name="t('harvester.virtualMachine.detail.details.bootOrder')" :value="disks" :mode="mode">
<template #value>
<ul>
<li v-for="(disk) in disks" :key="disk.bootOrder">
<li v-for="(disk, i) in disks" :key="i" >
{{ disk.bootOrder }}. {{ disk.name }} ({{ getDeviceType(disk) }})
</li>
</ul>
@ -213,7 +213,7 @@ export default {
<template #value>
<div>
<ul v-if="cdroms.length > 0">
<li v-for="(rom) in cdroms" :key="rom.name">
<li v-for="(rom, i) in cdroms" :key="i" >
{{ rom.name }}
</li>
</ul>

View File

@ -66,7 +66,7 @@ export default {
<template>
<div class="overview-sshKeys">
<div v-for="(ssh, index) in sshKeys" :key="index" class="row overview-sshKeys__item">
<div v-for="(ssh, index) in sshKeys" :key="index">
<div class="col span-4">
{{ ssh.id }}
</div>

View File

@ -158,12 +158,12 @@ export default {
<div>
<Tabbed v-bind="$attrs" class="mt-15" :side-tabs="true" @changed="onTabChanged">
<Tab name="basics" :label="t('harvester.virtualMachine.detail.tabs.basics')" class="bordered-table" :weight="7">
<OverviewBasics v-model="value" :vmi="vmi" mode="view" />
<OverviewBasics v-model:value="value" :vmi="vmi" mode="view" />
</Tab>
<Tab name="disks" :label="t('harvester.tab.volume')" class="bordered-table" :weight="6">
<Volume
v-model="diskRows"
v-model:value="diskRows"
mode="view"
:namespace="value.metadata.namespace"
:vm="value"
@ -172,11 +172,11 @@ export default {
</Tab>
<Tab name="networks" :label="t('harvester.virtualMachine.detail.tabs.networks')" class="bordered-table" :weight="5">
<Network v-model="networkRows" mode="view" />
<Network v-model:value="networkRows" mode="view" />
</Tab>
<Tab name="keypairs" :label="t('harvester.virtualMachine.detail.tabs.keypairs')" class="bordered-table" :weight="3">
<OverviewKeypairs v-model="value" />
<OverviewKeypairs v-model:value="value" />
</Tab>
<Tab
@ -235,7 +235,7 @@ export default {
</Tab>
<Tab name="migration" :label="t('harvester.virtualMachine.detail.tabs.migration')">
<Migration v-model="value" :vmi-resource="vmi" />
<Migration v-model:value="value" :vmi-resource="vmi" />
</Tab>
<Tab
@ -261,7 +261,7 @@ export default {
:mode="mode"
:read-allowed="false"
:value-can-be-empty="true"
@input="value.setInstanceLabels($event)"
@update:value="value.setInstanceLabels($event)"
/>
</template>
</Labels>

View File

@ -71,7 +71,7 @@ export default {
<template>
<ResourceTabs
v-model="value"
v-model:value="value"
:need-related="false"
>
<Tab

View File

@ -119,7 +119,7 @@ export default {
<template>
<ResourceTabs
v-model="value"
v-model:value="value"
:need-related="false"
>
<Tab

View File

@ -69,7 +69,7 @@ export default {
<template>
<ResourceTabs
v-model="value"
v-model:value="value"
:need-related="false"
>
<Tab

View File

@ -91,11 +91,11 @@ export default {
</template>
<template #body>
<Checkbox v-model="cloneData" class="mb-10" label-key="harvester.modal.cloneVM.type" />
<Checkbox v-model:value="cloneData" class="mb-10" label-key="harvester.modal.cloneVM.type" />
<LabeledInput
v-show="cloneData"
v-model="name"
v-model:value="name"
class="mb-20"
:label="t('harvester.modal.cloneVM.name')"
required
@ -116,7 +116,7 @@ export default {
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -146,11 +146,11 @@ export default {
<div class="mb-10">
<CopyToClipboardText :text="nameToMatch" />
</div>
<input id="confirm" v-model="confirmName" type="text" />
<input id="confirm" v-model:value="confirmName" type="text" />
<div class="text-info mt-20">
{{ protip }}
</div>
<Banner v-for="(error, i) in errors" :key="i" class="" color="error" :label="error" />
<Banner v-for="(error, i) in errors" :key="i"/>
</div>
<template #actions>
<button class="btn role-secondary mr-10" @click="close">

View File

@ -91,11 +91,11 @@ export default {
</template>
<template #body>
<Checkbox v-model="cloneData" class="mb-10" label-key="harvester.modal.cloneVM.type" />
<Checkbox v-model:value="cloneData" class="mb-10" label-key="harvester.modal.cloneVM.type" />
<LabeledInput
v-show="cloneData"
v-model="name"
v-model:value="name"
class="mb-20"
:label="t('harvester.modal.cloneVM.name')"
required

View File

@ -69,7 +69,7 @@ export default {
<div class="body">
<div class="type-field">
<LabeledSelect
v-model="type"
v-model:value="type"
required
:options="availableTypes"
:searchable="true"

View File

@ -114,13 +114,13 @@ export default {
<template #body>
<LabeledInput
v-model="diskName"
v-model:value="diskName"
:label="t('generic.name')"
required
/>
<LabeledSelect
v-model="volumeName"
v-model:value="volumeName"
:label="t('harvester.fields.volume')"
:options="volumeOption"
class="mt-20"
@ -141,7 +141,7 @@ export default {
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -95,7 +95,7 @@ export default {
/>
<template #body>
<LabeledInput v-model="backUpName" :label="t('generic.name')" required />
<LabeledInput v-model:value="backUpName" :label="t('generic.name')" required />
</template>
<div slot="actions" class="actions">

View File

@ -101,17 +101,17 @@ export default {
</template>
<template #body>
<Checkbox v-model="withData" class="mb-10" label="With Data" />
<Checkbox v-model:value="withData" class="mb-10" label="With Data" />
<LabeledInput
v-model="templateName"
v-model:value="templateName"
class="mb-20"
:label="t('harvester.modal.createTemplate.name')"
required
/>
<LabeledInput
v-model="description"
v-model:value="description"
:label="t('harvester.modal.createTemplate.description')"
/>
</template>
@ -129,7 +129,7 @@ export default {
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -116,9 +116,7 @@ export default {
<div>
<Checkbox
v-for="disk in allDisk"
:key="disk.name"
v-model="disk.value"
v-for="(disk, i) in allDisk" :key="i" v-model:value="disk.value"
:label="disk.name"
/>
</div>

View File

@ -142,7 +142,7 @@ export default {
<template #body>
<LabeledSelect
v-model="namespace"
v-model:value="namespace"
:label="t('harvester.modal.exportImage.namespace')"
:options="namespaces"
class="mb-20"
@ -150,13 +150,13 @@ export default {
/>
<LabeledInput
v-model="name"
v-model:value="name"
:label="t('harvester.modal.exportImage.name')"
required
/>
<LabeledSelect
v-model="storageClassName"
v-model:value="storageClassName"
:options="storageClassOptions"
:label="t('harvester.storage.storageClass.label')"
class="mt-20"
@ -177,7 +177,7 @@ export default {
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -93,7 +93,7 @@ export default {
<template #body>
<div>
<Checkbox
v-model="force"
v-model:value="force"
label-key="harvester.host.enableMaintenance.force"
/>
</div>
@ -109,9 +109,7 @@ export default {
<div class="vm-list mb-5">
<BadgeState
v-for="vm in unhealthyVM.vms"
:key="vm"
color="bg-error mb-5 mr-5"
v-for="(vm, i) in unhealthyVM.vms" :key="i" color="bg-error mb-5 mr-5"
:label="vm"
/>
</div>

View File

@ -141,7 +141,7 @@ export default {
<template #body>
<LabeledSelect
v-model="nodeName"
v-model:value="nodeName"
:label="t('harvester.modal.migration.fields.nodeName.label')"
:placeholder="t('harvester.modal.migration.fields.nodeName.placeholder')"
:options="nodeNameList"
@ -161,7 +161,7 @@ export default {
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -128,7 +128,7 @@ export default {
<template #body>
<LabeledSelect
v-model="backupName"
v-model:value="backupName"
:label="t('harvester.modal.restore.selectBackup')"
:localized-label="true"
:options="backupOption"

View File

@ -124,13 +124,13 @@ export default {
class="content"
>
<LabeledInput
v-model="url"
v-model:value="url"
:label="t('harvester.modal.bundle.url')"
class="mb-20"
/>
<LabeledInput
v-model="description"
v-model:value="description"
:label="t('harvester.modal.bundle.description')"
type="multiline"
:min-height="120"
@ -154,9 +154,7 @@ export default {
</div>
<div
v-for="(err, idx) in errors"
:key="idx"
>
v-for="(err, idx) in errors" :key="idx">
<Banner
color="error"
:label="stringify(err)"

View File

@ -118,8 +118,8 @@ export default {
/>
<template #body>
<LabeledInput v-model="actionResource.metadata.namespace" :disabled="true" :label="t('generic.namespace')" />
<LabeledInput v-model="snapshotName" class="mt-20" :label="t('generic.name')" required />
<LabeledInput v-model:value="actionResource.metadata.namespace" :disabled="true" :label="t('generic.namespace')" />
<LabeledInput v-model:value="snapshotName" class="mt-20" :label="t('generic.name')" required />
</template>
<div slot="actions" class="actions">
@ -131,7 +131,7 @@ export default {
<AsyncButton mode="create" :disabled="!snapshotName" @click="save" />
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -100,7 +100,7 @@ export default {
<template #body>
<LabeledSelect
v-model="clusterNetwork"
v-model:value="clusterNetwork"
:label="t('harvester.harvesterVlanConfigMigrateDialog.targetClusterNetwork.label')"
:placeholder="t('harvester.harvesterVlanConfigMigrateDialog.targetClusterNetwork.placeholder')"
:options="clusterNetworks"
@ -120,7 +120,7 @@ export default {
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -75,9 +75,7 @@ export default {
class="bottom"
>
<Banner
v-for="(err, i) in errors"
:key="i"
color="error"
v-for="(err, i) in errors" :key="i"color="error"
:label="err"
/>
<div class="buttons">

View File

@ -129,13 +129,13 @@ export default {
</template>
<template #body>
<LabeledInput
v-model="name"
v-model:value="name"
:label="t('harvester.modal.restoreSnapshot.name')"
required
/>
<LabeledSelect
v-if="showStorageClass"
v-model="storageClassName"
v-model:value="storageClassName"
:options="storageClassOptions"
:label="t('harvester.storage.storageClass.label')"
class="mt-20"
@ -153,7 +153,7 @@ export default {
@click="save"
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -71,7 +71,7 @@ export default {
</template>
<template #body>
<LabeledInput
v-model="name"
v-model:value="name"
:label="t('harvester.modal.snapshot.name')"
required
/>

View File

@ -81,11 +81,11 @@ export default {
{{ t('harvester.modal.volumeClone.title') }}
</template>
<template #body>
<Checkbox v-model="cloneData" class="mb-10" label-key="harvester.modal.cloneVM.type" />
<Checkbox v-model:value="cloneData" class="mb-10" label-key="harvester.modal.cloneVM.type" />
<LabeledInput
v-show="cloneData"
v-model="name"
v-model:value="name"
class="mb-20"
:label="t('harvester.modal.volumeClone.name')"
required
@ -102,7 +102,7 @@ export default {
@click="save"
/>
</div>
<Banner v-for="(err, i) in errors" :key="i" color="error" :label="err" />
<Banner v-for="(err, i) in errors" :key="i"/>
</div>
</Card>
</template>

View File

@ -37,7 +37,7 @@ export default {
:weight="99"
>
<RadioGroup
v-model="value.spec.enabled"
v-model:value="value.spec.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -49,7 +49,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -37,7 +37,7 @@ export default {
:weight="99"
>
<RadioGroup
v-model="value.spec.enabled"
v-model:value="value.spec.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -49,7 +49,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -110,13 +110,13 @@ export default {
:mode="mode"
:options="[true,false]"
:labels="[t('generic.enabled'), t('generic.disabled')]"
@input="toggleEnable"
@update:value="toggleEnable"
/>
<div v-if="value.spec.enabled">
<div v-if="valuesContentJson.image" class="row mb-15">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.image.repo"
v-model:value="valuesContentJson.image.repo"
:mode="mode"
:required="true"
label-key="harvester.addons.nvidiaDriverToolkit.image.repository"
@ -124,7 +124,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.image.tag"
v-model:value="valuesContentJson.image.tag"
:mode="mode"
:required="true"
class="col span-6"
@ -134,7 +134,7 @@ export default {
</div>
<div class="row mb-15">
<LabeledInput
v-model="valuesContentJson.driverLocation"
v-model:value="valuesContentJson.driverLocation"
:mode="mode"
:required="true"
label-key="harvester.addons.nvidiaDriverToolkit.driver.location"
@ -147,7 +147,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -37,7 +37,7 @@ export default {
:weight="99"
>
<RadioGroup
v-model="value.spec.enabled"
v-model:value="value.spec.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -49,7 +49,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -94,7 +94,7 @@ export default {
:weight="99"
>
<RadioGroup
v-model="value.spec.enabled"
v-model:value="value.spec.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -106,7 +106,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentbit.resources.requests.cpu"
v-model:value="valuesContentJson.fluentbit.resources.requests.cpu"
:label="t('monitoring.prometheus.config.requests.cpu')"
:required="true"
:mode="mode"
@ -114,7 +114,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentbit.resources.requests.memory"
v-model:value="valuesContentJson.fluentbit.resources.requests.memory"
:label="t('monitoring.prometheus.config.requests.memory')"
:required="true"
:mode="mode"
@ -124,7 +124,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentbit.resources.limits.cpu"
v-model:value="valuesContentJson.fluentbit.resources.limits.cpu"
:label="t('monitoring.prometheus.config.limits.cpu')"
:required="true"
:mode="mode"
@ -132,7 +132,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentbit.resources.limits.memory"
v-model:value="valuesContentJson.fluentbit.resources.limits.memory"
:label="t('monitoring.prometheus.config.limits.memory')"
:required="true"
:mode="mode"
@ -144,7 +144,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentd.resources.requests.cpu"
v-model:value="valuesContentJson.fluentd.resources.requests.cpu"
:label="t('monitoring.prometheus.config.requests.cpu')"
:required="true"
:mode="mode"
@ -152,7 +152,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentd.resources.requests.memory"
v-model:value="valuesContentJson.fluentd.resources.requests.memory"
:label="t('monitoring.prometheus.config.requests.memory')"
:required="true"
:mode="mode"
@ -162,7 +162,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentd.resources.limits.cpu"
v-model:value="valuesContentJson.fluentd.resources.limits.cpu"
:label="t('monitoring.prometheus.config.limits.cpu')"
:required="true"
:mode="mode"
@ -170,7 +170,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.fluentd.resources.limits.memory"
v-model:value="valuesContentJson.fluentd.resources.limits.memory"
:label="t('monitoring.prometheus.config.limits.memory')"
:required="true"
:mode="mode"
@ -182,7 +182,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -208,7 +208,7 @@ export default {
:weight="99"
>
<RadioGroup
v-model="value.spec.enabled"
v-model:value="value.spec.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -244,7 +244,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.scrapeInterval"
v-model:value="valuesContentJson.prometheus.prometheusSpec.scrapeInterval"
:label="t('monitoring.prometheus.config.scrape')"
:tooltip="t('harvester.setting.harvesterMonitoring.tips.scrape')"
:required="true"
@ -253,7 +253,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.evaluationInterval"
v-model:value="valuesContentJson.prometheus.prometheusSpec.evaluationInterval"
:label="t('monitoring.prometheus.config.evaluation')"
:tooltip="t('harvester.setting.harvesterMonitoring.tips.evaluation')"
:required="true"
@ -264,7 +264,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.retention"
v-model:value="valuesContentJson.prometheus.prometheusSpec.retention"
:label="t('monitoring.prometheus.config.retention')"
:tooltip="t('harvester.setting.harvesterMonitoring.tips.retention')"
:required="true"
@ -273,7 +273,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.retentionSize"
v-model:value="valuesContentJson.prometheus.prometheusSpec.retentionSize"
:label="t('monitoring.prometheus.config.retentionSize')"
:tooltip="t('harvester.setting.harvesterMonitoring.tips.retentionSize')"
:required="true"
@ -291,7 +291,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.resources.requests.cpu"
v-model:value="valuesContentJson.prometheus.prometheusSpec.resources.requests.cpu"
:label="t('monitoring.prometheus.config.requests.cpu')"
:required="true"
:mode="mode"
@ -299,7 +299,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.resources.requests.memory"
v-model:value="valuesContentJson.prometheus.prometheusSpec.resources.requests.memory"
:label="t('monitoring.prometheus.config.requests.memory')"
:required="true"
:mode="mode"
@ -309,7 +309,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.resources.limits.cpu"
v-model:value="valuesContentJson.prometheus.prometheusSpec.resources.limits.cpu"
:label="t('monitoring.prometheus.config.limits.cpu')"
:required="true"
:mode="mode"
@ -317,7 +317,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.prometheus.prometheusSpec.resources.limits.memory"
v-model:value="valuesContentJson.prometheus.prometheusSpec.resources.limits.memory"
:label="t('monitoring.prometheus.config.limits.memory')"
:required="true"
:mode="mode"
@ -329,7 +329,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="prometheusNodeExporter.resources.limits.cpu"
v-model:value="prometheusNodeExporter.resources.limits.cpu"
:label="t('monitoring.prometheus.config.limits.cpu')"
:required="true"
:mode="mode"
@ -337,7 +337,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="prometheusNodeExporter.resources.limits.memory"
v-model:value="prometheusNodeExporter.resources.limits.memory"
:label="t('monitoring.prometheus.config.limits.memory')"
:required="true"
:mode="mode"
@ -347,7 +347,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="prometheusNodeExporter.resources.requests.cpu"
v-model:value="prometheusNodeExporter.resources.requests.cpu"
:label="t('monitoring.prometheus.config.requests.cpu')"
:required="true"
:mode="mode"
@ -355,7 +355,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="prometheusNodeExporter.resources.requests.memory"
v-model:value="prometheusNodeExporter.resources.requests.memory"
:label="t('monitoring.prometheus.config.requests.memory')"
:required="true"
:mode="mode"
@ -391,7 +391,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.grafana.resources.requests.cpu"
v-model:value="valuesContentJson.grafana.resources.requests.cpu"
:label="t('monitoring.prometheus.config.requests.cpu')"
:required="true"
:mode="mode"
@ -399,7 +399,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.grafana.resources.requests.memory"
v-model:value="valuesContentJson.grafana.resources.requests.memory"
:label="t('monitoring.prometheus.config.requests.memory')"
:required="true"
:mode="mode"
@ -409,7 +409,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.grafana.resources.limits.cpu"
v-model:value="valuesContentJson.grafana.resources.limits.cpu"
:label="t('monitoring.prometheus.config.limits.cpu')"
:required="true"
:mode="mode"
@ -417,7 +417,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.grafana.resources.limits.memory"
v-model:value="valuesContentJson.grafana.resources.limits.memory"
:label="t('monitoring.prometheus.config.limits.memory')"
:required="true"
:mode="mode"
@ -427,7 +427,7 @@ export default {
</Tab>
<Tab v-if="value.spec.enabled" name="alertmanager" :label="t('harvester.setting.harvesterMonitoring.section.alertmanager')" :weight="-4">
<RadioGroup
v-model="valuesContentJson.alertmanager.enabled"
v-model:value="valuesContentJson.alertmanager.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -465,7 +465,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.alertmanager.alertmanagerSpec.retention"
v-model:value="valuesContentJson.alertmanager.alertmanagerSpec.retention"
:label="t('monitoring.prometheus.config.retention')"
:required="true"
:mode="mode"
@ -475,7 +475,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.alertmanager.alertmanagerSpec.resources.limits.cpu"
v-model:value="valuesContentJson.alertmanager.alertmanagerSpec.resources.limits.cpu"
:label="t('monitoring.prometheus.config.limits.cpu')"
:required="true"
:mode="mode"
@ -483,7 +483,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.alertmanager.alertmanagerSpec.resources.limits.memory"
v-model:value="valuesContentJson.alertmanager.alertmanagerSpec.resources.limits.memory"
:label="t('monitoring.prometheus.config.limits.memory')"
:required="true"
:mode="mode"
@ -493,7 +493,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.alertmanager.alertmanagerSpec.resources.requests.cpu"
v-model:value="valuesContentJson.alertmanager.alertmanagerSpec.resources.requests.cpu"
:label="t('monitoring.prometheus.config.requests.cpu')"
:required="true"
:mode="mode"
@ -501,7 +501,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.alertmanager.alertmanagerSpec.resources.requests.memory"
v-model:value="valuesContentJson.alertmanager.alertmanagerSpec.resources.requests.memory"
:label="t('monitoring.prometheus.config.requests.memory')"
:required="true"
:mode="mode"
@ -514,7 +514,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -94,7 +94,7 @@ export default {
<div class="row">
<div class="col span-12">
<RadioGroup
v-model="value.spec.enabled"
v-model:value="value.spec.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -108,7 +108,7 @@ export default {
<div class="row mb-20">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.hostname"
v-model:value="valuesContentJson.hostname"
label-key="harvester.addons.rancherVcluster.hostname"
:required="true"
:mode="mode"
@ -118,7 +118,7 @@ export default {
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.rancherVersion"
v-model:value="valuesContentJson.rancherVersion"
label-key="harvester.addons.rancherVcluster.rancherVersion"
:required="true"
:disabled="true"
@ -129,7 +129,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<LabeledInput
v-model="valuesContentJson.bootstrapPassword"
v-model:value="valuesContentJson.bootstrapPassword"
label-key="harvester.addons.rancherVcluster.password"
:mode="mode"
:required="true"
@ -142,7 +142,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -132,7 +132,7 @@ export default {
:weight="99"
>
<RadioGroup
v-model="value.spec.enabled"
v-model:value="value.spec.enabled"
class="mb-20"
name="model"
:mode="mode"
@ -144,40 +144,40 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContent.resources.limits.cpu"
v-model:value="valuesContent.resources.limits.cpu"
:label="t('monitoring.prometheus.config.limits.cpu')"
:required="true"
:mode="mode"
@input="update"
@update:value="update"
/>
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContent.resources.limits.memory"
v-model:value="valuesContent.resources.limits.memory"
:label="t('monitoring.prometheus.config.limits.memory')"
:required="true"
:mode="mode"
@input="update"
@update:value="update"
/>
</div>
</div>
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContent.resources.requests.cpu"
v-model:value="valuesContent.resources.requests.cpu"
:label="t('monitoring.prometheus.config.requests.cpu')"
:required="true"
:mode="mode"
@input="update"
@update:value="update"
/>
</div>
<div class="col span-6">
<LabeledInput
v-model="valuesContent.resources.requests.memory"
v-model:value="valuesContent.resources.requests.memory"
:label="t('monitoring.prometheus.config.requests.memory')"
:required="true"
:mode="mode"
@input="update"
@update:value="update"
/>
</div>
</div>
@ -186,34 +186,34 @@ export default {
<h2>{{ t('harvester.addons.vmImport.titles.pvc') }}</h2>
<div v-if="value.spec.enabled">
<RadioGroup
v-model="valuesContent.pvcClaim.enabled"
v-model:value="valuesContent.pvcClaim.enabled"
class="mb-20"
name="model"
:mode="mode"
:options="[true,false]"
:labels="[t('generic.enabled'), t('generic.disabled')]"
@input="update"
@update:value="update"
/>
<div v-if="valuesContent.pvcClaim.enabled">
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="valuesContent.pvcClaim.size"
v-model:value="valuesContent.pvcClaim.size"
:label="t('harvester.volume.size')"
:required="true"
:mode="mode"
@input="update"
@update:value="update"
/>
</div>
<div class="col span-6">
<LabeledSelect
v-model="valuesContent.pvcClaim.storageClassName"
v-model:value="valuesContent.pvcClaim.storageClassName"
:options="storageClassOptions"
:label="t('harvester.storage.storageClass.label')"
:mode="mode"
class="mb-20"
@input="update"
@update:value="update"
/>
</div>
</div>
@ -225,7 +225,7 @@ export default {
</template>
<style lang="scss" scoped>
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;

View File

@ -78,7 +78,7 @@ export default {
@cancel="done"
>
<NameNsDescription
v-model="value"
v-model:value="value"
:mode="mode"
:namespaced="true"
/>
@ -87,7 +87,7 @@ export default {
<Tab name="basics" :label="t('harvester.host.tabs.basics')" :weight="1">
<div class="mb-20">
<LabeledSelect
v-model="type"
v-model:value="type"
:label="t('harvester.cloudTemplate.templateType')"
:disabled="!isCreate"
:options="types"
@ -97,7 +97,7 @@ export default {
<div class="resource-yaml">
<YamlEditor
ref="yamlUser"
v-model="config"
v-model:value="config"
class="yaml-editor"
:editor-mode="mode === 'view' ? 'VIEW_CODE' : 'EDIT_CODE'"
@onChanges="update"
@ -111,7 +111,7 @@ export default {
<style lang="scss" scoped>
$yaml-height: 200px;
::v-deep .yaml-editor{
:deep() .yaml-editor{
flex: 1;
min-height: $yaml-height;
& .code-mirror .CodeMirror {

View File

@ -151,7 +151,7 @@ export default {
</script>
<template>
<div class="disk" @input="update">
<div class="disk" @update:value="update">
<div class="mt-10" />
<Banner
v-if="mountedMessage && isProvisioned"
@ -172,7 +172,7 @@ export default {
<div class="row">
<div class="col span-12">
<DiskTags
v-model="value.tags"
v-model:value="value.tags"
:label="t('harvester.host.disk.tags.label')"
:add-label="t('harvester.host.disk.tags.addLabel')"
:mode="mode"
@ -228,7 +228,7 @@ export default {
<div class="row mt-10">
<div class="col span-12">
<LabeledInput
v-model="value.displayName"
v-model:value="value.displayName"
:label="t('generic.name')"
:disabled="true"
/>
@ -237,7 +237,7 @@ export default {
<div v-if="(value.isNew && !isFormatted) || isCorrupted" class="row mt-10">
<div class="col span-6">
<RadioGroup
v-model="value.forceFormatted"
v-model:value="value.forceFormatted"
:mode="mode"
name="forceFormatted"
label-key="harvester.host.disk.forceFormatted.label"

View File

@ -112,7 +112,7 @@ export default {
<template>
<div>
<LabeledSelect
v-model="spec.run"
v-model:value="spec.run"
:label="t('harvester.host.ksmtuned.run')"
:options="ksmtunedRunOption"
class="mb-20"
@ -122,7 +122,7 @@ export default {
<template v-if="showKsmt">
<UnitInput
v-model="spec.thresCoef"
v-model:value="spec.thresCoef"
v-int-number
:label="t('harvester.host.ksmtuned.thresCoef')"
suffix="%"
@ -132,13 +132,13 @@ export default {
class="mb-20"
/>
<Checkbox v-model="enableMergeAcrossNodes" :mode="mode" class="check mb-20" type="checkbox" :label="t('harvester.host.ksmtuned.enableMergeNodes')" />
<Checkbox v-model:value="enableMergeAcrossNodes" :mode="mode" class="check mb-20" type="checkbox" :label="t('harvester.host.ksmtuned.enableMergeNodes')" />
<h3>
<t k="harvester.host.ksmtuned.modeLink" :raw="true" />
</h3>
<RadioGroup
v-model="spec.mode"
v-model:value="spec.mode"
class="mb-20"
:name="t('harvester.host.ksmtuned.mode')"
:options="ksmtunedMode"

View File

@ -250,16 +250,14 @@ export default {
<div>
<div v-if="inventory.warningMessages.length > 0">
<Banner
v-for="msg in inventory.warningMessages"
:key="msg.text"
color="error"
v-for="(msg, i) in inventory.warningMessages" :key="i" color="error"
:label="msg.text"
/>
</div>
<div class="row">
<div class="col span-6">
<RadioGroup
v-model="enableInventory"
v-model:value="enableInventory"
:options="[
{ label: t('generic.enabled'), value: true },
{ label: t('generic.disabled'), value: false }
@ -273,14 +271,14 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledInput
v-model="value.spec.baseboardSpec.connection.host"
v-model:value="value.spec.baseboardSpec.connection.host"
:label="t('harvester.seeder.inventory.host.label')"
:placeholder="t('harvester.seeder.inventory.host.placeholder')"
:mode="mode"
required
/>
<Checkbox
v-model="value.spec.baseboardSpec.connection.insecureTLS"
v-model:value="value.spec.baseboardSpec.connection.insecureTLS"
class="mt-5"
:mode="mode"
:label="t('harvester.seeder.inventory.insecureTLS.label')"
@ -299,7 +297,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<LabeledSelect
v-model="selectedSecret"
v-model:value="selectedSecret"
:label="t('harvester.seeder.inventory.secret.label')"
:mode="mode"
:options="secretOption"
@ -310,7 +308,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<RadioGroup
v-model="value.spec.events.enabled"
v-model:value="value.spec.events.enabled"
name="enabled"
:options="[true, false]"
:label="t('harvester.seeder.inventory.event.label')"
@ -323,7 +321,7 @@ export default {
class="col span-6"
>
<LabeledInput
v-model="value.spec.events.pollingInterval"
v-model:value="value.spec.events.pollingInterval"
:label="t('harvester.seeder.inventory.pollingInterval.label')"
:mode="mode"
/>
@ -344,20 +342,20 @@ export default {
<template #content>
<NameNsDescription
v-model="secret"
v-model:value="secret"
:namespaced="true"
mode="create"
/>
<LabeledInput
v-model="username"
v-model:value="username"
:label="t('harvester.virtualMachine.input.username')"
class="mb-20"
required
/>
<LabeledInput
v-model="password"
v-model:value="password"
type="password"
:label="t('harvester.virtualMachine.input.password')"
class="mb-20"

View File

@ -522,14 +522,14 @@ export default {
<Tabbed ref="tabbed" class="mt-15" :side-tabs="true">
<Tab name="basics" :weight="100" :label="t('harvester.host.tabs.basics')">
<LabeledInput
v-model="customName"
v-model:value="customName"
:label="t('harvester.host.detail.customName')"
class="mb-20"
:mode="mode"
/>
<LabeledInput
v-model="consoleUrl"
v-model:value="consoleUrl"
:label="t('harvester.host.detail.consoleUrl')"
class="mb-20"
:mode="mode"
@ -547,7 +547,7 @@ export default {
>
<div class="col span-12">
<DiskTags
v-model="longhornNode.spec.tags"
v-model:value="longhornNode.spec.tags"
:label="t('harvester.host.tags.label')"
:add-label="t('harvester.host.tags.addLabel')"
:mode="mode"
@ -555,13 +555,13 @@ export default {
</div>
</div>
<ArrayListGrouped
v-model="newDisks"
v-model:value="newDisks"
:mode="mode"
:initial-empty-row="false"
>
<template #default="props">
<HarvesterDisk
v-model="props.row.value"
v-model:value="props.row.value"
class="mb-20"
:mode="mode"
:disks="disks"
@ -652,7 +652,7 @@ export default {
:title="t('labels.labels.title')"
:read-allowed="false"
:value-can-be-empty="true"
@input="updateHostLabels"
@update:value="updateHostLabels"
/>
</Tab>
</Tabbed>

View File

@ -85,14 +85,14 @@ export default {
<NameNsDescription
ref="nd"
:key="randomString"
v-model="value"
v-model:value="value"
:mode="mode"
/>
<Tabbed v-bind="$attrs" class="mt-15" :side-tabs="true">
<Tab name="basic" :label="t('harvester.sshKey.tabs.basics')" :weight="1" class="bordered-table">
<LabeledInput
v-model="publicKey"
v-model:value="publicKey"
type="multiline"
:mode="mode"
:min-height="160"

View File

@ -186,7 +186,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledSelect
v-model="loggingType"
v-model:value="loggingType"
class="mb-20"
:options="outputTypeOptions"
:disabled="!isCreate"
@ -197,7 +197,7 @@ export default {
</div>
<div class="row">
<div class="col span-6">
<LabeledSelect v-model="selectedProvider" label="Output" :options="providers" :mode="mode" />
<LabeledSelect v-model:value="selectedProvider" label="Output" :options="providers" :mode="mode" />
</div>
</div>
<div class="spacer"></div>
@ -206,7 +206,7 @@ export default {
<Tab name="buffer" :label="t('logging.output.buffer.label')" :weight="1">
<YamlEditor
ref="yaml"
v-model="bufferYaml"
v-model:value="bufferYaml"
:scrolling="false"
:initial-yaml-values="initialBufferYaml"
:editor-mode="isView ? EDITOR_MODES.VIEW_CODE : EDITOR_MODES.EDIT_CODE"

View File

@ -190,7 +190,7 @@ export default {
@cancel="done"
>
<NameNsDescription
v-model="value"
v-model:value="value"
:mode="mode"
:namespaced="isNamespaced"
/>

View File

@ -177,13 +177,13 @@ export default {
>
<NameNsDescription
ref="nd"
v-model="value"
v-model:value="value"
:mode="mode"
/>
<Tabbed v-bind="$attrs" class="mt-15" :side-tabs="true">
<Tab name="basics" :label="t('harvester.network.tabs.basics')" :weight="99" class="bordered-table">
<LabeledSelect
v-model="type"
v-model:value="type"
class="mb-20"
:options="networkType"
:mode="mode"
@ -201,7 +201,7 @@ export default {
placeholder="e.g. 1-4094"
:label="t('tableHeaders.networkVlan')"
:mode="mode"
@input="input"
@update:value="input"
/>
<div class="row">
@ -209,7 +209,7 @@ export default {
class="col span-12"
>
<LabeledSelect
v-model="config.bridge"
v-model:value="config.bridge"
class="mb-20"
:label="t('harvester.network.clusterNetwork.label')"
required
@ -230,7 +230,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<RadioGroup
v-model="layer3Network.mode"
v-model:value="layer3Network.mode"
name="layer3NetworkMode"
:label="t('harvester.network.layer3Network.mode.label')"
:mode="mode"
@ -244,7 +244,7 @@ export default {
>
<div class="col span-6">
<LabeledInput
v-model="layer3Network.serverIPAddr"
v-model:value="layer3Network.serverIPAddr"
class="mb-20"
:label="t('harvester.network.layer3Network.serverIPAddr.label')"
:mode="mode"
@ -257,7 +257,7 @@ export default {
>
<div class="col span-6">
<LabeledInput
v-model="layer3Network.cidr"
v-model:value="layer3Network.cidr"
class="mb-20"
:label="t('harvester.network.layer3Network.cidr.label')"
:placeholder="t('harvester.network.layer3Network.cidr.placeholder')"
@ -267,7 +267,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="layer3Network.gateway"
v-model:value="layer3Network.gateway"
class="mb-20"
:label="t('harvester.network.layer3Network.gateway.label')"
:placeholder="t('harvester.network.layer3Network.gateway.placeholder')"

View File

@ -233,7 +233,7 @@ export default {
@error="e=>errors = e"
>
<NameNsDescription
v-model="value"
v-model:value="value"
:mode="mode"
:namespaced="!isCloud"
/>
@ -271,7 +271,7 @@ export default {
:weight="-1"
>
<Labels
v-model="value"
v-model:value="value"
:mode="mode"
/>
</Tab>

View File

@ -201,14 +201,14 @@ export default {
:is="customComponent"
v-if="hasCustomComponent"
ref="settingComp"
v-model="value"
v-model:value="value"
:register-before-hook="registerBeforeHook"
:mode="mode"
/>
</div>
<div v-else-if="setting.kind === 'enum'">
<LabeledSelect
v-model="value.value"
v-model:value="value.value"
:label="t('advancedSettings.edit.value')"
:localized-label="true"
:mode="mode"
@ -217,7 +217,7 @@ export default {
</div>
<div v-else-if="setting.kind === 'boolean'">
<RadioGroup
v-model="value.value"
v-model:value="value.value"
name="settings_value"
:labels="[
t('advancedSettings.edit.trueOption'),
@ -227,11 +227,11 @@ export default {
/>
</div>
<div v-else-if="setting.kind === 'multiline' || setting.kind === 'json'">
<TextAreaAutoGrow v-model="value.value" :min-height="254" />
<TextAreaAutoGrow v-model:value="value.value" :min-height="254" />
</div>
<div v-else>
<LabeledInput
v-model="value.value"
v-model:value="value.value"
:label="t('advancedSettings.edit.value')"
/>
</div>
@ -249,7 +249,7 @@ export default {
}
}
::v-deep .edit-help code {
:deep() .edit-help code {
padding: 1px 5px;
}
</style>

View File

@ -222,7 +222,7 @@ export default {
:searchable="true"
:taggable="true"
class="mb-20"
@input="updateProvisioner($event)"
@update:value="updateProvisioner($event)"
/>
<Tabbed :side-tabs="true">
<Tab name="parameters" :label="t('storageClass.parameters.label')" :weight="2">
@ -238,7 +238,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<RadioGroup
v-model="value.reclaimPolicy"
v-model:value="value.reclaimPolicy"
name="reclaimPolicy"
:label="t('storageClass.customize.reclaimPolicy.label')"
:mode="modeOverride"
@ -247,7 +247,7 @@ export default {
</div>
<div class="col span-6">
<RadioGroup
v-model="value.allowVolumeExpansion"
v-model:value="value.allowVolumeExpansion"
name="allowVolumeExpansion"
:label="t('storageClass.customize.allowVolumeExpansion.label')"
:mode="modeOverride"
@ -258,7 +258,7 @@ export default {
<div class="row mt-20">
<div class="col span-6">
<RadioGroup
v-model="value.volumeBindingMode"
v-model:value="value.volumeBindingMode"
name="volumeBindingMode"
:label="t('storageClass.customize.volumeBindingMode.label')"
:mode="modeOverride"
@ -274,7 +274,7 @@ export default {
:tooltip="t('harvester.storage.allowedTopologies.tooltip')"
>
<ArrayList
v-model="allowedTopologies"
v-model:value="allowedTopologies"
:default-add-value="defaultAddValue"
:initial-empty-row="true"
:show-header="true"
@ -297,14 +297,14 @@ export default {
<div class="row custom-headers">
<div class="col span-4 key">
<LabeledInput
v-model="scope.row.value.key"
v-model:value="scope.row.value.key"
:required="true"
:mode="modeOverride"
/>
</div>
<div class="col span-8 value">
<DiskTags
v-model="scope.row.value.values"
v-model:value="scope.row.value.values"
:add-label="t('generic.add')"
:mode="modeOverride"
/>

View File

@ -17,7 +17,7 @@ export default {
</script>
<template>
<KeyValue
v-model="value.parameters"
v-model:value="value.parameters"
:add-label="t('storageClass.custom.addLabel')"
:read-allowed="false"
:mode="mode"

View File

@ -168,7 +168,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledInput
v-model="numberOfReplicas"
v-model:value="numberOfReplicas"
:label="t('harvester.storage.parameters.numberOfReplicas.label')"
:required="true"
:mode="mode"
@ -179,7 +179,7 @@ export default {
</div>
<div class="col span-6">
<LabeledInput
v-model="value.parameters.staleReplicaTimeout"
v-model:value="value.parameters.staleReplicaTimeout"
:label="t('harvester.storage.parameters.staleReplicaTimeout.label')"
:required="true"
:mode="mode"
@ -190,7 +190,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<LabeledSelect
v-model="nodeSelector"
v-model:value="nodeSelector"
:label="t('harvester.storage.parameters.nodeSelector.label')"
:options="nodeTags"
:taggable="true"
@ -206,7 +206,7 @@ export default {
</div>
<div class="col span-6">
<LabeledSelect
v-model="diskSelector"
v-model:value="diskSelector"
:label="t('harvester.storage.parameters.diskSelector.label')"
:options="diskTags"
:taggable="true"
@ -224,7 +224,7 @@ export default {
<div class="row mt-10">
<div class="col span-6">
<RadioGroup
v-model="value.parameters.migratable"
v-model:value="value.parameters.migratable"
name="layer3NetworkMode"
:label="t('harvester.storage.parameters.migratable.label')"
:mode="mode"
@ -233,7 +233,7 @@ export default {
</div>
</div>
<KeyValue
v-model="parameters"
v-model:value="parameters"
:add-label="t('storageClass.longhorn.addLabel')"
:read-allowed="false"
:mode="mode"

View File

@ -209,7 +209,7 @@ export default {
<div class="content">
<div class="mb-20">
<RadioGroup
v-model="restoreNewVm"
v-model:value="restoreNewVm"
name="model"
:options="[true,false]"
:labels="[t('harvester.backup.restore.createNew'), t('harvester.backup.restore.replaceExisting')]"
@ -221,7 +221,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledSelect
v-model="namespace"
v-model:value="namespace"
:disabled="!restoreNewVm"
:label="t('nameNsDescription.namespace.label')"
:options="namespaces"
@ -230,7 +230,7 @@ export default {
<div class="col span-6">
<LabeledInput
v-model="name"
v-model:value="name"
:disabled="!restoreNewVm"
:label="t('harvester.backup.restore.virtualMachineName')"
:placeholder="t('nameNsDescription.name.placeholder')"
@ -240,7 +240,7 @@ export default {
</div>
<LabeledSelect
v-model="backupName"
v-model:value="backupName"
class="mb-20"
:label="t('harvester.backup.restore.backup')"
:options="backupOption"
@ -248,14 +248,14 @@ export default {
<Checkbox
v-if="restoreNewVm"
v-model="restoreResource.spec.keepMacAddress"
v-model:value="restoreResource.spec.keepMacAddress"
type="checkbox"
:label="t('harvester.backup.restore.keepMacAddress')"
/>
<LabeledSelect
v-if="!restoreNewVm"
v-model="deletionPolicy"
v-model:value="deletionPolicy"
:label="t('harvester.backup.restore.deletePreviousVolumes')"
:options="deletionPolicyOption"
/>
@ -271,7 +271,7 @@ export default {
flex-grow: 1;
flex-direction: column;
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;
@ -291,7 +291,7 @@ export default {
margin-bottom: -$space-m;
padding: $space-s $space-m;
::v-deep .spacer-small {
:deep() .spacer-small {
padding: 0px;
}
}

View File

@ -280,7 +280,7 @@ export default {
>
<NameNsDescription
ref="nd"
v-model="value"
v-model:value="value"
:mode="mode"
:label="t('generic.name')"
name-key="spec.displayName"
@ -295,7 +295,7 @@ export default {
>
<RadioGroup
v-if="isCreate"
v-model="value.spec.sourceType"
v-model:value="value.spec.sourceType"
name="model"
:options="[
'download',
@ -311,7 +311,7 @@ export default {
<div class="col span-12">
<LabeledInput
v-if="!isCreate"
v-model="value.spec.sourceType"
v-model:value="value.spec.sourceType"
:mode="mode"
class="mb-20"
:disabled="isEdit"
@ -320,7 +320,7 @@ export default {
<LabeledInput
v-if="value.spec.sourceType === 'download'"
v-model="value.spec.url"
v-model:value="value.spec.url"
:mode="mode"
:disabled="isEdit"
class="mb-20 labeled-input--tooltip"
@ -332,7 +332,7 @@ export default {
<div v-else>
<LabeledInput
v-if="isView"
v-model="imageName"
v-model:value="imageName"
:mode="mode"
class="mt-20"
label-key="harvester.image.fileName"
@ -368,7 +368,7 @@ export default {
<LabeledInput
v-if="value.spec.sourceType === 'download'"
v-model="value.spec.checksum"
v-model:value="value.spec.checksum"
:mode="mode"
:disabled="isEdit"
label-key="harvester.image.checksum"
@ -387,7 +387,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledSelect
v-model="storageClassName"
v-model:value="storageClassName"
:options="storageClassOptions"
:label="t('harvester.storage.storageClass.label')"
:mode="mode"
@ -408,28 +408,28 @@ export default {
:pad-left="false"
:read-allowed="false"
@focusKey="focusKey"
@input="value.setLabels($event)"
@update:value="value.setLabels($event)"
>
<template #value="{row, keyName, valueName, queueUpdate}">
<Select
v-if="internalAnnotations(row)"
v-model="row[valueName]"
v-model:value="row[valueName]"
:mode="mode"
:searchable="true"
:clearable="false"
:options="calculateOptions(row[keyName])"
@input="queueUpdate"
@update:value="queueUpdate"
/>
<input
v-else
v-model="row[valueName]"
v-model:value="row[valueName]"
:disabled="isView"
:type="'text'"
:placeholder="t('keyValue.valuePlaceholder')"
autocorrect="off"
autocapitalize="off"
spellcheck="false"
@input="queueUpdate"
@update:value="queueUpdate"
/>
</template>
</KeyValue>

View File

@ -220,7 +220,7 @@ export default {
@finish="saveVMT"
>
<NameNsDescription
v-model="templateValue"
v-model:value="templateValue"
:mode="realTemplateMode"
name-label="harvester.vmTemplate.nameNsDescription.name"
:namespaced="true"
@ -228,7 +228,7 @@ export default {
<Checkbox
v-if="templateId"
v-model="isDefaultVersion"
v-model:value="isDefaultVersion"
class="mb-20"
:label="t('tableHeaders.defaultVersion')"
type="checkbox"
@ -241,7 +241,7 @@ export default {
<div class="mb-20">
<SSHKey
v-model="sshKey"
v-model:value="sshKey"
:create-namespace="true"
:namespace="templateValue.metadata.namespace"
:disable-create="isView"
@ -252,11 +252,11 @@ export default {
</Tab>
<Tab name="Volume" :label="t('harvester.tab.volume')" :weight="-1">
<Volume v-model="diskRows" :mode="mode" :namespace="value.metadata.namespace" :existing-volume-disabled="true" />
<Volume v-model:value="diskRows" :mode="mode" :namespace="value.metadata.namespace" :existing-volume-disabled="true" />
</Tab>
<Tab name="Network" :label="t('harvester.tab.network')" :weight="-2">
<Network v-model="networkRows" :mode="mode" />
<Network v-model:value="networkRows" :mode="mode" />
</Tab>
<Tab
@ -266,7 +266,6 @@ export default {
>
<template #default="{active}">
<NodeScheduling
:key="active"
:mode="mode"
:value="spec.template.spec"
:nodes="nodesIdOptions"
@ -277,7 +276,6 @@ export default {
<Tab :label="t('harvester.tab.vmScheduling')" name="vmScheduling" :weight="-90">
<template #default="{active}">
<PodAffinity
:key="active"
:mode="mode"
:value="spec.template.spec"
:nodes="nodes"
@ -292,7 +290,7 @@ export default {
<div class="row mb-20">
<div class="col span-6">
<LabeledSelect
v-model="runStrategy"
v-model:value="runStrategy"
label-key="harvester.virtualMachine.runStrategy"
:options="RunStrategys"
:mode="mode"
@ -301,7 +299,7 @@ export default {
<div class="col span-6">
<LabeledSelect
v-model="osType"
v-model:value="osType"
label-key="harvester.virtualMachine.osType"
:mode="mode"
:options="OS"
@ -325,7 +323,7 @@ export default {
</div>
<div class="col span-6">
<UnitInput
v-model="terminationGracePeriodSeconds"
v-model:value="terminationGracePeriodSeconds"
:suffix="terminationGracePeriodSeconds == 1 ? 'Second' : 'Seconds'"
:label="t('harvester.virtualMachine.terminationGracePeriodSeconds.label')"
:mode="mode"
@ -347,7 +345,7 @@ export default {
<div class="spacer"></div>
<Checkbox
v-model="installUSBTablet"
v-model:value="installUSBTablet"
class="check"
type="checkbox"
:label="t('harvester.virtualMachine.enableUsb')"
@ -355,7 +353,7 @@ export default {
/>
<Checkbox
v-model="installAgent"
v-model:value="installAgent"
class="check"
type="checkbox"
label-key="harvester.virtualMachine.installAgent"
@ -363,7 +361,7 @@ export default {
/>
<Checkbox
v-model="tpmEnabled"
v-model:value="tpmEnabled"
class="check"
type="checkbox"
label-key="harvester.virtualMachine.advancedOptions.tpm"
@ -371,7 +369,7 @@ export default {
/>
<Checkbox
v-model="efiEnabled"
v-model:value="efiEnabled"
class="check"
type="checkbox"
:label="t('harvester.virtualMachine.efiEnabled')"
@ -380,7 +378,7 @@ export default {
<Checkbox
v-if="efiEnabled"
v-model="secureBoot"
v-model:value="secureBoot"
class="check"
type="checkbox"
:label="t('harvester.virtualMachine.secureBoot')"
@ -411,7 +409,7 @@ export default {
:mode="mode"
:read-allowed="false"
:value-can-be-empty="true"
@input="value.setInstanceLabels($event)"
@update:value="value.setInstanceLabels($event)"
/>
</template>
</Labels>

View File

@ -206,7 +206,7 @@ export default {
<div class="content">
<div class="mb-20">
<RadioGroup
v-model="restoreNewVm"
v-model:value="restoreNewVm"
name="model"
:options="[true,false]"
:labels="[t('harvester.backup.restore.createNew'), t('harvester.backup.restore.replaceExisting')]"
@ -218,7 +218,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledSelect
v-model="namespace"
v-model:value="namespace"
:disabled="true"
:label="t('nameNsDescription.namespace.label')"
:options="namespaces"
@ -227,7 +227,7 @@ export default {
<div class="col span-6">
<LabeledInput
v-model="name"
v-model:value="name"
:disabled="!restoreNewVm"
:label="t('harvester.backup.restore.virtualMachineName')"
:placeholder="t('nameNsDescription.name.placeholder')"
@ -236,9 +236,9 @@ export default {
</div>
</div>
<LabeledSelect v-model="snapshotName" class="mb-20" :label="t('harvester.vmSnapshot.snapshot')" :options="snapshotOption" />
<LabeledSelect v-model:value="snapshotName" class="mb-20" :label="t('harvester.vmSnapshot.snapshot')" :options="snapshotOption" />
<LabeledSelect v-if="!restoreNewVm" v-model="deletionPolicy" :label="t('harvester.backup.restore.deletePreviousVolumes')" :options="deletionPolicyOption" />
<LabeledSelect v-if="!restoreNewVm" v-model:value="deletionPolicy" :label="t('harvester.backup.restore.deletePreviousVolumes')" :options="deletionPolicyOption" />
</div>
<Footer mode="create" class="footer" :errors="errors" @save="saveRestore" @done="done" />
@ -251,7 +251,7 @@ export default {
flex-grow: 1;
flex-direction: column;
::v-deep .radio-group {
:deep() .radio-group {
display: flex;
.radio-container {
margin-right: 30px;
@ -271,7 +271,7 @@ export default {
margin-bottom: -$space-m;
padding: $space-s $space-m;
::v-deep .spacer-small {
:deep() .spacer-small {
padding: 0px;
}
}

View File

@ -272,7 +272,7 @@ export default {
<NameNsDescription :value="value" :namespaced="true" :mode="mode" />
<ResourceTabs
v-model="value"
v-model:value="value"
class="mt-15"
:need-conditions="false"
:need-related="false"
@ -281,41 +281,41 @@ export default {
>
<Tab name="basic" :label="t('harvester.volume.tabs.basics')" :weight="3" class="bordered-table">
<LabeledSelect
v-model="source"
v-model:value="source"
:label="t('harvester.volume.source')"
:options="sourceOption"
:disabled="!isCreate"
required
:mode="mode"
class="mb-20"
@input="update"
@update:value="update"
/>
<LabeledSelect
v-if="isVMImage"
v-model="imageId"
v-model:value="imageId"
:label="t('harvester.volume.image')"
:options="imageOption"
:disabled="!isCreate"
required
:mode="mode"
class="mb-20"
@input="update"
@update:value="update"
/>
<LabeledSelect
v-if="source === 'blank'"
v-model="value.spec.storageClassName"
v-model:value="value.spec.storageClassName"
:options="storageClassOptions"
:label="t('harvester.storage.storageClass.label')"
:mode="mode"
class="mb-20"
:disabled="!isCreate"
@input="update"
@update:value="update"
/>
<UnitInput
v-model="storage"
v-model:value="storage"
v-int-number
:label="t('harvester.volume.size')"
:input-exponent="3"
@ -324,15 +324,15 @@ export default {
:mode="mode"
required
class="mb-20"
@input="update"
@update:value="update"
/>
</Tab>
<Tab v-if="!isCreate" name="details" :label="t('harvester.volume.tabs.details')" :weight="2.5" class="bordered-table">
<LabeledInput v-model="frontendDisplay" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.frontend')" />
<LabeledInput v-model="attachedNode" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.attachedNode')" />
<LabeledInput v-model="endpoint" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.endpoint')" />
<LabeledInput v-model:value="frontendDisplay" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.frontend')" />
<LabeledInput v-model:value="attachedNode" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.attachedNode')" />
<LabeledInput v-model:value="endpoint" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.endpoint')" />
<LabeledSelect
v-model="diskTags"
v-model:value="diskTags"
:multiple="true"
:label="t('harvester.volume.diskTags')"
:options="[]"
@ -341,7 +341,7 @@ export default {
class="mb-20"
/>
<LabeledSelect
v-model="nodeTags"
v-model:value="nodeTags"
:multiple="true"
:label="t('harvester.volume.nodeTags')"
:options="[]"
@ -349,9 +349,9 @@ export default {
:mode="mode"
class="mb-20"
/>
<LabeledInput v-model="lastBackup" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.lastBackup')" />
<LabeledInput v-model="lastBackupAt" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.lastBackupAt')" />
<LabeledInput v-model="replicasNumber" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.replicasNumber')" />
<LabeledInput v-model:value="lastBackup" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.lastBackup')" />
<LabeledInput v-model:value="lastBackupAt" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.lastBackupAt')" />
<LabeledInput v-model:value="replicasNumber" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.replicasNumber')" />
</Tab>
<Tab v-if="!isCreate" name="instances" :label="t('harvester.volume.tabs.snapshots')" :weight="2" class="bordered-table">
<SortableTable
@ -360,12 +360,12 @@ export default {
default-sort-by="age"
:rows="value.relatedVolumeSnapshotCounts"
key-field="_key"
v-on="$listeners"
/>
</Tab>
<Tab v-if="!isCreate && value.spec.dataSource" name="datasource" :label="t('harvester.volume.tabs.datasource')" :weight="1" class="bordered-table">
<LabeledInput v-model="dataSourceKind" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.kind')" />
<LabeledInput v-model="value.spec.dataSource.name" :mode="mode" :disabled="true" :label="t('nameNsDescription.name.label')" />
<LabeledInput v-model:value="dataSourceKind" class="mb-20" :mode="mode" :disabled="true" :label="t('harvester.volume.kind')" />
<LabeledInput v-model:value="value.spec.dataSource.name" :mode="mode" :disabled="true" :label="t('nameNsDescription.name.label')" />
</Tab>
</ResourceTabs>
</CruResource>

View File

@ -62,7 +62,7 @@ export default {
>
<NameNsDescription :value="value" :namespaced="true" :mode="mode" />
<ResourceTabs
v-model="value"
v-model:value="value"
class="mt-15"
:need-conditions="false"
:need-related="false"
@ -72,17 +72,17 @@ export default {
<Tab name="basics" :label="t('harvester.virtualMachine.detail.tabs.basics')" class="bordered-table">
<div class="row">
<div class="col span-12">
<LabeledInput v-model="size" :label="t('harvester.snapshot.size')" class="mt-20" :disabled="true" />
<LabeledInput v-model:value="size" :label="t('harvester.snapshot.size')" class="mt-20" :disabled="true" />
</div>
</div>
<div class="row">
<div class="col span-12">
<LabeledInput v-model="targetVolume" :label="t('harvester.snapshot.targetVolume')" class="mt-20" :disabled="true" />
<LabeledInput v-model:value="targetVolume" :label="t('harvester.snapshot.targetVolume')" class="mt-20" :disabled="true" />
</div>
</div>
<div v-if="isImageVolume" class="row">
<div class="col span-12">
<LabeledInput v-model="imageName" :label="t('harvester.snapshot.image')" class="mt-20" :disabled="true" />
<LabeledInput v-model:value="imageName" :label="t('harvester.snapshot.image')" class="mt-20" :disabled="true" />
</div>
</div>
</Tab>

View File

@ -141,7 +141,7 @@ export default {
<template>
<div class="vm__credentials-users">
<LabeledSelect
v-model="selectedUser"
v-model:value="selectedUser"
:options="userOptions"
:label="t('harvester.virtualMachine.accessCredentials.injectSSH.users')"
:taggable="multiple"
@ -167,7 +167,7 @@ export default {
<template #content>
<LabeledInput
v-model="newUsername"
v-model:value="newUsername"
:label="t('harvester.virtualMachine.input.username')"
class="mb-20"
required

View File

@ -152,7 +152,7 @@ export default {
<div>
<Banner class="mb-20" color="info" :label="t('harvester.virtualMachine.accessCredentials.tips')" />
<div v-for="(row, i) in rows" :key="row.id">
<div v-for="(row, i) in rows" :key="i">
<InfoBox class="volume-source">
<button v-if="isEdit" type="button" class="role-link btn btn-sm remove-vol" @click="remove(row)">
<i class="icon icon-x" />
@ -165,7 +165,7 @@ export default {
<div>
<component
:is="componentFor(row.source)"
v-model="rows[i]"
v-model:value="rows[i]"
:rows="rows"
:resource="resource"
:user-options="userOptions"

View File

@ -61,10 +61,10 @@ export default {
</script>
<template>
<div class="row" @input="update">
<div class="row" @update:value="update">
<div class="col span-6">
<AccessCredentialsUsers
v-model="value.username"
v-model:value="value.username"
:resource="resource"
:user-options="userOptions"
:multiple="false"
@ -76,7 +76,7 @@ export default {
<div class="col span-6">
<Password
ref="password"
v-model="value.newPassword"
v-model:value="value.newPassword"
:mode="mode"
:disabled="mode !== 'edit'"
:label="t('harvester.virtualMachine.input.password')"

View File

@ -61,7 +61,7 @@ export default {
<div class="columns row">
<div class="col span-6">
<AccessCredentialsUsers
v-model="value.users"
v-model:value="value.users"
:resource="resource"
:user-options="userOptions"
:mode="mode"
@ -72,7 +72,7 @@ export default {
</div>
<div class="col span-6">
<SSHKey
v-model="value.sshkeys"
v-model:value="value.sshkeys"
class="mb-20"
:namespace="resource.metadata.namespace"
:mode="mode"

View File

@ -117,7 +117,7 @@ export default {
<LabeledSelect
v-if="!isView"
v-model="id"
v-model:value="id"
class="mb-20"
:options="options"
:disabled="viewCode"
@ -127,7 +127,7 @@ export default {
<div class="resource-yaml">
<YamlEditor
ref="yaml"
v-model="yamlScript"
v-model:value="yamlScript"
class="yaml-editor"
:editor-mode="editorMode"
/>
@ -138,7 +138,7 @@ export default {
<style lang="scss" scoped>
$yaml-height: 200px;
::v-deep .resource-yaml {
:deep() .resource-yaml {
flex: 1;
display: flex;
flex-direction: column;

View File

@ -200,7 +200,7 @@ export default {
<div class="mb-20">
<DataTemplate
ref="userTemplate"
v-model="userScript"
v-model:value="userScript"
type="user"
:view-code="viewCode"
:mode="mode"
@ -215,7 +215,7 @@ export default {
<div class="mb-20">
<DataTemplate
ref="networkTemplate"
v-model="networkScript"
v-model:value="networkScript"
type="network"
:view-code="viewCode"
:mode="mode"
@ -240,7 +240,7 @@ export default {
<template #content>
<LabeledInput
v-model="cloudTemplateName"
v-model:value="cloudTemplateName"
:label="t('harvester.virtualMachine.input.name')"
class="mb-20"
required
@ -251,7 +251,7 @@ export default {
<div class="resource-yaml">
<YamlEditor
ref="createTemplate"
v-model="cloudTemplate"
v-model:value="cloudTemplate"
class="yaml-editor"
:editor-mode="editorMode"
/>
@ -270,7 +270,7 @@ $yaml-height: 350px;
overflow: auto;
}
::v-deep .resource-yaml {
:deep() .resource-yaml {
flex: 1;
display: flex;
flex-direction: column;

View File

@ -77,7 +77,7 @@ export default {
<div class="col span-6">
<InputOrDisplay name="CPU" :value="cupDisplay" :mode="mode" class="mb-10">
<UnitInput
v-model="localCpu"
v-model:value="localCpu"
v-int-number
label="CPU"
suffix="C"
@ -86,7 +86,7 @@ export default {
:disabled="disabled"
:mode="mode"
class="mb-20"
@input="change"
@update:value="change"
/>
</InputOrDisplay>
</div>
@ -94,7 +94,7 @@ export default {
<div class="col span-6">
<InputOrDisplay :name="t('harvester.virtualMachine.input.memory')" :value="memoryDisplay" :mode="mode" class="mb-10">
<UnitInput
v-model="localMemory"
v-model:value="localMemory"
v-int-number
:label="t('harvester.virtualMachine.input.memory')"
:mode="mode"
@ -105,7 +105,7 @@ export default {
:disabled="disabled"
required
class="mb-20"
@input="change"
@update:value="change"
/>
</InputOrDisplay>
</div>

View File

@ -198,12 +198,12 @@ export default {
:mode="mode"
>
<LabeledInput
v-model="value.name"
v-model:value="value.name"
:label="t('harvester.fields.name')"
required
:mode="mode"
:disabled="isDisabled"
@input="update"
@update:value="update"
/>
</InputOrDisplay>
</div>
@ -218,13 +218,13 @@ export default {
:mode="mode"
>
<LabeledSelect
v-model="value.model"
v-model:value="value.model"
:label="t('harvester.fields.model')"
:disabled="isDisabled"
:options="modelOption"
:mode="mode"
required
@input="update"
@update:value="update"
/>
</InputOrDisplay>
</div>
@ -241,13 +241,13 @@ export default {
:mode="mode"
>
<LabeledSelect
v-model="value.networkName"
v-model:value="value.networkName"
:label="t('harvester.fields.network')"
:options="allNetworkOption"
:mode="mode"
required
:disabled="isDisabled"
@input="updateNetworkName"
@update:value="updateNetworkName"
/>
</InputOrDisplay>
</div>
@ -262,12 +262,12 @@ export default {
:mode="mode"
>
<LabeledSelect
v-model="value.type"
v-model:value="value.type"
:label="t('harvester.fields.type')"
:options="typeOption"
:mode="mode"
required
@input="update"
@update:value="update"
/>
</InputOrDisplay>
</div>
@ -292,11 +292,11 @@ export default {
:mode="mode"
>
<LabeledInput
v-model="value.macAddress"
v-model:value="value.macAddress"
label-key="harvester.fields.macAddress"
:mode="mode"
:tooltip="t('harvester.virtualMachine.volume.macTip')"
@input="update"
@update:value="update"
/>
</InputOrDisplay>
</div>

View File

@ -125,7 +125,7 @@ export default {
<template>
<div>
<InfoBox v-for="(row, i) in rows" :key="i" class="infoBox">
<InfoBox v-for="(row, i) in rows" :key="i">
<button v-if="!isView" type="button" class="role-link remove-vol" @click="remove(row)">
<i class="icon icon-x" />
</button>
@ -133,8 +133,7 @@ export default {
<h3> {{ t('harvester.virtualMachine.network.title') }} </h3>
<Base
:key="rows[i].rowKeyId"
v-model="rows[i]"
v-model:value="rows[i]"
:rows="rows"
:mode="mode"
:is-single="isSingle"

View File

@ -82,18 +82,16 @@ export default {
</div>
<div>{{ t('harvester.pci.matrixHostName') }}</div>
</div>
<div v-for="nodeName in allNodeNames" :key="nodeName" class="node-label">
<div v-for="(nodeName, i) in allNodeNames" :key="i" >
<span> {{ nodeName }}</span>
</div>
</div>
<div v-for="deviceCRD in enabledDevices" :key="deviceCRD.metadata.name" class="device-col">
<div v-for="(deviceCRD, i) in enabledDevices" :key="i" >
<div v-clean-tooltip="deviceTooltip(deviceCRD)" class="compat-cell device-label" :class="{'text-muted': noneAvailable(deviceCRD)}">
{{ deviceCRD.metadata.name }}
</div>
<div
v-for="nodeName in allNodeNames"
:key="nodeName"
class="compat-cell"
v-for="(nodeName, i) in allNodeNames" :key="i" class="compat-cell"
:class="{'has-device': nodeHasDevice(nodeName, deviceCRD)}"
/>
</div>

View File

@ -226,7 +226,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledSelect
v-model="selectedDevices"
v-model:value="selectedDevices"
label="Available PCI Devices"
searchable
multiple
@ -244,7 +244,7 @@ export default {
<div class="col span-12 text-muted">
Compatible hosts:
<!-- eslint-disable-next-line vue/no-parsing-error -->
<span v-for="(node, idx) in compatibleNodes" :key="node">{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
<span v-for="(node, idx) in compatibleNodes" :key="idx">{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
</div>
</div>
<div v-else-if="selectedDevices.length" class="text-error">

View File

@ -38,13 +38,13 @@ export default {
<template>
<UnitInput
v-model="memory"
v-model:value="memory"
v-int-number
:label="t('harvester.virtualMachine.input.reservedMemory')"
:mode="mode"
:input-exponent="2"
:increment="1024"
:output-modifier="true"
@input="change"
@update:value="change"
/>
</template>

View File

@ -239,7 +239,7 @@ export default {
<template>
<div>
<LabeledSelect
v-model="checkedSsh"
v-model:value="checkedSsh"
:label="t('harvester.virtualMachine.input.sshKey')"
:taggable="true"
:mode="mode"
@ -247,7 +247,7 @@ export default {
:searchable="searchable"
:disabled="disabled"
:options="sshOption"
@input="update"
@update:value="update"
/>
<ModalWithCard
@ -264,7 +264,7 @@ export default {
<template #content>
<LabeledInput
v-model="sshName"
v-model:value="sshName"
:label="t('harvester.virtualMachine.input.name')"
class="mb-20"
required
@ -272,7 +272,7 @@ export default {
/>
<LabeledInput
v-model="publicKey"
v-model:value="publicKey"
:label="t('harvester.virtualMachine.input.sshKeyValue')"
:min-height="160"
class="mb-20"

View File

@ -169,7 +169,7 @@ export default {
<div class="row">
<div class="col span-6">
<LabeledSelect
v-model="selectedDevices"
v-model:value="selectedDevices"
label="Available vGPU Devices"
searchable
multiple
@ -187,7 +187,7 @@ export default {
<div class="col span-12 text-muted">
Compatible hosts:
<!-- eslint-disable-next-line vue/no-parsing-error -->
<span v-for="(node, idx) in compatibleNodes" :key="node">{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
<span v-for="(node, idx) in compatibleNodes" :key="idx">{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
</div>
</div>
<div v-else-if="selectedDevices.length" class="text-error">

Some files were not shown because too many files have changed in this diff Show More