diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index 17532b36a47a..cb7a49e91b90 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -502,6 +502,7 @@
"label.copied.clipboard": "Copied to clipboard",
"label.copy": "Copy",
"label.copy.clipboard": "Copy to clipboard",
+"label.copy.consoleurl": "Copy console URL to clipboard",
"label.copyid": "Copy ID",
"label.core": "Core",
"label.core.zone.type": "Core zone type",
diff --git a/ui/src/components/view/ActionButton.vue b/ui/src/components/view/ActionButton.vue
index 95554f238202..5f5761cbe1c3 100644
--- a/ui/src/components/view/ActionButton.vue
+++ b/ui/src/components/view/ActionButton.vue
@@ -21,7 +21,26 @@
{{ $t('label.view.console') }}
-
+
+
+
+
+ {{ $t('label.copy.consoleurl') }}
+
+
{{ $t('label.view.console') }}
-
+
+
+
+
+ {{ $t('label.copy.consoleurl') }}
+
+
diff --git a/ui/src/components/widgets/Console.vue b/ui/src/components/widgets/Console.vue
index 03a37a2e03ad..d73753c142ee 100644
--- a/ui/src/components/widgets/Console.vue
+++ b/ui/src/components/widgets/Console.vue
@@ -20,7 +20,8 @@
v-if="['vm', 'systemvm', 'router', 'ilbvm'].includes($route.meta.name) && 'listVirtualMachines' in $store.getters.apis && 'createConsoleEndpoint' in $store.getters.apis"
@click="consoleUrl">
-
+
+
@@ -39,7 +40,8 @@ export default {
size: {
type: String,
default: 'small'
- }
+ },
+ copyUrlToClipboard: Boolean
},
data () {
return {
@@ -53,7 +55,21 @@ export default {
api('createConsoleEndpoint', params).then(json => {
this.url = (json && json.createconsoleendpointresponse) ? json.createconsoleendpointresponse.consoleendpoint.url : '#/exception/404'
if (json.createconsoleendpointresponse.consoleendpoint.success) {
- window.open(this.url, '_blank')
+ if (this.copyUrlToClipboard) {
+ this.$message.success({
+ content: this.$t('label.copied.clipboard')
+ })
+ const hiddenElement = document.createElement('textarea')
+ hiddenElement.value = this.url
+ document.body.appendChild(hiddenElement)
+ hiddenElement.focus()
+ hiddenElement.select()
+
+ document.execCommand('copy')
+ document.body.removeChild(hiddenElement)
+ } else {
+ window.open(this.url, '_blank')
+ }
} else {
this.$notification.error({
message: this.$t('error.execute.api.failed') + ' ' + 'createConsoleEndpoint',