Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

node-xl-wrapper

Build StatusDependency StatusdevDependency Statuscodecov.io

Node.js wrapper around local or remote Xen xl management utility

This is a work in progress and should not be used yet !!!

You have been warned

Requirements

Client-Side

The side that is running the Node-Application using this lib

  • Node.js -- tested with 0.10.33, if you tested older versions, let me know

Server-Side

The sie that is running Xen and xl

  • SSH server -- OpenSSH for example
  • Xen with xl as toolstack -- tested with Xen 4.4
  • A user with access to the xl command -- I would strongly recommend you to read the security recommendations!

API documentation

new XL(options)

Options must at least contain the property executorName which can currently be set to local to execute the commands on the local machine (via child_process.spawn()) or ssh to execute the commands on a remote machine via a SSH connection (done by ssh2).

Supported properties:

  • executorName (String) - Required: Name of the executor to use for executing xl commands (local or ssh)
  • executorOptions (Object) - See below for a detailed explanation
  • filter (String | RegExp) default: .* - This can optionally be used to restrict a session to specific DomU names. All commands only work if the accessed DomU's name matches the string (strictly) or the RegExp (test()). Other commands like list filter all DomUs from the output, that don't match this filter.

The executorOptions are split in two parts. For all currently supported executors you can use these options:

  • sudo (Boolean) default: false - Prefix all commands with sudo (see security recommendations)
  • debug (Boolean) default: false - Show debug output
  • verbose (Boolean) default: false - Show a more verbose debug output

Specific options for the executor ssh are:

  • host (String) - Hostname or IP of the SSH server
  • port (Number) default: 22 - Port of the SSH server
  • username (String) - Username for login
  • password (String) - Password for login
  • privateKey (String | Buffer) - Content of the private key file for public key authentication (OpenSSH format).
  • .. and many more. In general you can use all ssh2connect options. There is one custom addition though:
  • persistent (Boolean) default: false - Use a persistent SSH connection. It is strongly recommended to enable this if you send more than one command over this SSH connection, because otherwise the connection has to be established for each command execution individually. This leads to a massive overhead.

Specific options for the executor local are:

  • none 😄

Commands

To execute a command you have to instantiate XL and call the command you like. Example:

varXL=require('node-xl-wrapper');varcon=newXL({'executorName': 'local'});con.shutdown({'name': 'myDomU'},function(err,data){// Do what you want with the returned data// Data is generally the stdout string of the xl command or a object (e.g. for list)});

You can omit the first parameter (options object) if the command has no options or you don't want to pass any.

The commands are named after their corresponding xl commands. Currently these are supported:

First of all: Never ever use the root user to run this lib in production!

As you can see it supports using the sudo command when configured via the constructor options. To use this you have to create a new user, let's call him xlrunner. Then edit the /etc/sudoers file using the command visudo and append this line (of course change the username if you created another user):

xlrunner ALL=NOPASSWD: /usr/sbin/xl

Your new user should now have the permission to execute the xl command with prefixed sudo and arbitrary arguments. You may restrict these arguments for your use case. There are plenty how-tos out there to achieve this.

My second recommendation is to use public key authentication instead of password-based one. Just read a how-to about it. It's worth it.

About

Node.js wrapper around local or remote XEN xl management utility

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages