Giter Club home page Giter Club logo

lxdui's Introduction

logo

A web UI for Linux containers based on LXD/LXC.

Learn more about Linux containers and LXD/LXC here: linuxcontainers.org

LXDUI leverages LXD's Python client library, pylxd, for interacting with the LXD REST API. It allows for rapid provisioning and management of large number of containers from a web browser, and you can simultaneously create any number of containers, even from multiple images, in one step.

Version 2.0

Version 2.0 of LXDUI is a complete rewrite of the application that better exposes LXD's feature set with additional functionality. A new CLI is now available for managing LXDUI as well. Learn more about the CLI here.

New in 2.0

Screencast

Screencast

Getting Started

As the name suggests, LXDUI is a visual interface for the LXD & LXC toolset. In order to use LXDUI you need to have LXD installed on your system. The following instructions walk you through the installation process so that you have a working system with LXD and LXDUI.

These instructions are targeted for an Ubuntu distribution, but you should be able to adapt the instructions to use in any distribution where LXD is supported.

For more detailed instructions please refer to the wiki page.

Install

1. Install the Prerequisites - instructions here

2. Clone LXDUI from the GitHub repo:

        git clone https://github.com/AdaptiveScale/lxdui.git

3. [Optional] Create a virtual environment for testing. Skip this step if you want to install it globaly on your system.

        python3 -m venv mytestenv

        Activate the virtual environment:

        source mytestenv/bin/activate

4. Run Setup

        cd lxdui

        python3 setup.py install

Start LXDUI

At this point LXDUI should be installed and ready to start.

To start the app run: python3 run.py start
or use the new CLI:   lxdui start

When the app starts open a browser to the following link to access the app: http://127.0.0.1:15151

Log In. The default account and password are: admin | admin

CONTRIBUTION

Your contribution is welcome and greatly appreciated. Please contribute your fixes and new features via a pull request. Pull requests and proposed changes will then go through a code review and once approved will be merged into the project.

AUTHOR

AdaptiveScale, Inc. http://www.adaptivescale.com

LICENSE

Copyright © 2018 AdaptiveScale, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. For details see the file COPYING or visit: http://www.gnu.org/licenses/

lxdui's People

Contributors

abdulla98 avatar agniramadani avatar ailegion avatar ajdini avatar asolomatin avatar bedircaushi avatar bet4it avatar cocoy avatar dependabot[bot] avatar erenisr avatar faf avatar felix-engelmann avatar futuretim avatar jasir99 avatar jetroni avatar kacchan822 avatar mineibrm avatar nbesimi avatar ravibhure avatar rico29 avatar roni98 avatar sharsllani avatar stiltr avatar strugee avatar vhajdari avatar ye-yng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lxdui's Issues

Get Session Username

Hello. I want to insert on container schema the username who created it. How i can get the session username at this point?

password change

default user and password is admin/admin. Is there ability to change and where?

Issue with terminado dependancy

So I installed setuptools and am now running setup.py, however I'm running into an error that's stopping the install. Any ideas how I get it to skip the tests that aren't included anyway...?

Searching for terminado
Reading https://pypi.python.org/simple/terminado/
Best match: terminado 0.8.1
Downloading https://files.pythonhosted.org/packages/67/84/ce0ebd0f60e1cbe040f8e065eef7063855d59d9cf5e6438b3f8439fc7e15/terminado-0.8.1.tar.gz#sha256=55abf9ade563b8f9be1f34e4233c7b7bde726059947a593322e8a553cc4c067a
Processing terminado-0.8.1.tar.gz
Writing /tmp/easy_install-kz_hozdu/terminado-0.8.1/setup.cfg
Running terminado-0.8.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-kz_hozdu/terminado-0.8.1/egg-dist-tmp-5xwou0_v
error: Setup script exited with error: can't copy 'terminado/tests': doesn't exist or not a regular file

Port forwarding

Hi guys,

I noticed a lack of port forwarding options in lxdui, I have a simple Python script I use for it that modifies iptables. There doesn't seem to be anything better for it right now, so would you guys have any objection to me doing a pull request with the iptables script + some UI stuff for it? (Plus make it optional, so it doesn't have to be used)

I thought I would ask first, as some projects don't really like to touch low-level things like iptables

terminal problem when launching lxdui via systemd

Hello,
I'm facing an issue when launching lxdui via a systemd script :

root@LXC-1:~# cat /lib/systemd/system/lxdui.service 
[Unit]
Description=Web UI for the native Linux container technology LXD/LXC
After=network.target snapd.service
Requires=snapd.service

[Service]
Type=simple
PIDFile=/run/lxdui/lxdui.pid
ExecStart=/usr/local/bin/lxdui start
ExecStop=/usr/local/bin/lxdui stop

[Install]
WantedBy=multi-user.target

root@LXC-1:~# systemctl start lxdui
root@LXC-1:~# systemctl status lxdui
● lxdui.service - Web UI for the native Linux container technology LXD/LXC
   Loaded: loaded (/lib/systemd/system/lxdui.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-01-18 08:45:32 CET; 4s ago
  Process: 5106 ExecStop=/usr/local/bin/lxdui stop (code=exited, status=0/SUCCESS)
 Main PID: 5705 (lxdui)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/lxdui.service
           └─5705 /usr/bin/python3 /usr/local/bin/lxdui start

Jan 18 08:45:32 LXC-1 systemd[1]: Started Web UI for the native Linux container technology LXD/LXC.
Jan 18 08:45:32 LXC-1 lxdui[5705]: LXDUI ver. 2.1.2 -- (c)AdaptiveScale, Inc.
Jan 18 08:45:32 LXC-1 lxdui[5705]: http://www.adaptivescale.com

When launching lxdui like this, everyhting seems to work fine except the terminal, which doesd not display anything. black screen with blinking cursor.

When launching like :

root@LXC-1:~# /usr/local/bin/lxdui start
LXDUI ver. 2.1.2 -- (c)AdaptiveScale, Inc.
http://www.adaptivescale.com
LXDUI started. Running on http://0.0.0.0:15151
PID=7912, Press CTRL+C to quit

Everything works fine.

Any idea about what's wrong ?
Regards

RaspberryPi compatibility

Hello there,
I have lxd running on a Pi3 and would like to try your sweet webGui, but when I run the install script (in a venv) I get the following error:
unable to execute 'arm-linux-gnueabihf-gcc': No such file or directory error: Setup script exited with error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
I suppose it's trying to cross-compile something for the arm, but it is already running on an arm, so it should probably call directly gcc.
Is there something I can easily change in the install script to make it run on the Pi3?
Thanks for your help and for pushing your work in the open!

Failed to install

ollecting ptyprocess; os_name != "nt" (from terminado==0.8.1->LXDUI==2.1.2)
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 353, in run
wb.build(autobuilding=True)
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 749, in build
self.requirement_set.prepare_files(self.finder)
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 380, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 554, in _prepare_file
require_hashes
File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 278, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 465, in find_requirement
all_candidates = self.find_all_candidates(req.name)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 423, in find_all_candidates
for page in self._get_pages(url_locations, project_name):
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 568, in _get_pages
page = self._get_page(location)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 683, in _get_page
return HTMLPage.get_page(link, session=self.session)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 792, in get_page
"Cache-Control": "max-age=600",
File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 501, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/download.py", line 386, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/adapter.py", line 47, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/adapters.py", line 423, in send
timeout=timeout
File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 643, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment
total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

Error 500

I'm having this problem after a new fresh installation :

[2018-03-09 15:44:05,554] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python2.7/dist-packages/lxdui/app.py", line 202, in home
    return render_template("login.html")
  File "/usr/local/lib/python2.7/dist-packages/flask/templating.py", line 132, in render_template
    ctx.app.update_template_context(context)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 764, in update_template_context
    context.update(func())
  File "/usr/local/lib/python2.7/dist-packages/lxdui/app.py", line 110, in get_lxc_version
    ver = float((output_rez).strip())
ValueError: invalid literal for float(): 2.0.11
127.0.0.1 - - [09/Mar/2018 15:44:05] "GET / HTTP/1.1" 500 -

Terminal emulator not working

Running Debian 9.5 with lxd installed via snap. Installed both master and development branch, no errors reported. Everything appears to work except the "terminal" emulator when I try to open a terminal for a container. I get the new browser tab, and a black screen with a blinking cursor but it never shows anything. I am able to access the container using the command line and opening a bash shell to it, or with ssh once installed inside the container.

Can't install on Void Linux

Trying to install latest LXDUI (2.2.1) but to no avail.

Distro: Void Linux (Rolling Release)
LIBC: Gnu LibC 2.29

# lxc version
Client version: 3.11
Server version: 3.11

Error Log:

Processing /home/anon/usr/tmp/dls/lxdui-2.1.2
Requirement already satisfied: Click==6.7 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (6.7)
Requirement already satisfied: Flask==0.12.2 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (0.12.2)
Requirement already satisfied: flask-login==0.4.1 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (0.4.1)
Requirement already satisfied: flask_jwt==0.3.2 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (0.3.2)
Requirement already satisfied: jsonschema==2.6.0 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (2.6.0)
Requirement already satisfied: requests==2.9.1 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (2.9.1)
Requirement already satisfied: netaddr==0.7.19 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (0.7.19)
Requirement already satisfied: pyopenssl==17.5.0 in ./lib/python2.7/site-packages (from LXDUI==2.1.2) (17.5.0)
Collecting psutil==5.4.5 (from LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/14/a2/8ac7dda36eac03950ec2668ab1b466314403031c83a95c5efc81d2acf163/psutil-5.4.5.tar.gz
Collecting pylxd==2.2.7 (from LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/31/bf/d9496c0307e14a4da34a87c0bd6a89b37e75020a877813174f05f1918c4f/pylxd-2.2.7.tar.gz
Collecting terminado==0.8.1 (from LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/2e/20/a26211a24425923d46e1213b376a6ee60dc30bcdf1b0c345e2c3769deb1c/terminado-0.8.1-py2.py3-none-any.whl
Collecting tornado==5.0.2 (from LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/cf/d1/3be271ae5eba9fb59df63c9891fdc7d8044b999e8ac145994cdbfd2ae66a/tornado-5.0.2.tar.gz
Collecting tornado-xstatic (from LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/3f/5d/51ce8394499f331bd4a9717d9667559aabe6315fcaa0307c4c11555577f0/tornado_xstatic-0.2-py2.py3-none-any.whl
Collecting XStatic==1.0.1 (from LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/3e/30/726b61d07abd031b32db956adfbcf8924687e07879c1b63b777855c75289/XStatic-1.0.1.tar.gz
Collecting XStatic-term.js==0.0.7.0 (from LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/63/7a/7bfec29f5f28fdda7170ebbbb2204aeb1d33d6050f3476a807590de06434/XStatic-term.js-0.0.7.0.tar.gz
Requirement already satisfied: itsdangerous>=0.21 in ./lib/python2.7/site-packages (from Flask==0.12.2->LXDUI==2.1.2) (1.1.0)
Requirement already satisfied: Jinja2>=2.4 in ./lib/python2.7/site-packages (from Flask==0.12.2->LXDUI==2.1.2) (2.10)
Requirement already satisfied: Werkzeug>=0.7 in ./lib/python2.7/site-packages (from Flask==0.12.2->LXDUI==2.1.2) (0.15.1)
Requirement already satisfied: PyJWT<1.5.0,>=1.4.0 in ./lib/python2.7/site-packages (from flask_jwt==0.3.2->LXDUI==2.1.2) (1.4.2)
Requirement already satisfied: functools32; python_version == "2.7" in ./lib/python2.7/site-packages (from jsonschema==2.6.0->LXDUI==2.1.2) (3.2.3.post2)
Requirement already satisfied: six>=1.5.2 in ./lib/python2.7/site-packages (from pyopenssl==17.5.0->LXDUI==2.1.2) (1.12.0)
Requirement already satisfied: cryptography>=2.1.4 in ./lib/python2.7/site-packages (from pyopenssl==17.5.0->LXDUI==2.1.2) (2.6.1)
Collecting pbr>=1.6 (from pylxd==2.2.7->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/14/09/12fe9a14237a6b7e0ba3a8d6fcf254bf4b10ec56a0185f73d651145e9222/pbr-5.1.3-py2.py3-none-any.whl
Collecting python-dateutil>=2.4.2 (from pylxd==2.2.7->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl
Collecting ws4py!=0.3.5,>=0.3.4 (from pylxd==2.2.7->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/53/20/4019a739b2eefe9282d3822ef6a225250af964b117356971bd55e274193c/ws4py-0.5.1.tar.gz
Collecting requests-unixsocket>=0.1.5 (from pylxd==2.2.7->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/f3/94/67d781fb32afbee0fffa0ad9e16ad0491f1a9c303e14790ae4e18f11be19/requests-unixsocket-0.1.5.tar.gz
Collecting requests-toolbelt>=0.8.0 (from pylxd==2.2.7->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/60/ef/7681134338fc097acef8d9b2f8abe0458e4d87559c689a8c306d0957ece5/requests_toolbelt-0.9.1-py2.py3-none-any.whl
Collecting ptyprocess; os_name != "nt" (from terminado==0.8.1->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/d1/29/605c2cc68a9992d18dada28206eeada56ea4bd07a239669da41674648b6f/ptyprocess-0.6.0-py2.py3-none-any.whl
Collecting futures (from tornado==5.0.2->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/2d/99/b2c4e9d5a30f6471e410a146232b4118e697fa3ffc06d6a65efde84debd0/futures-3.2.0-py2-none-any.whl
Collecting singledispatch (from tornado==5.0.2->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/c5/10/369f50bcd4621b263927b0a1519987a04383d4a98fb10438042ad410cf88/singledispatch-3.4.0.3-py2.py3-none-any.whl
Collecting backports_abc>=0.4 (from tornado==5.0.2->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/7d/56/6f3ac1b816d0cd8994e83d0c4e55bc64567532f7dc543378bd87f81cebc7/backports_abc-0.5-py2.py3-none-any.whl
Requirement already satisfied: MarkupSafe>=0.23 in ./lib/python2.7/site-packages (from Jinja2>=2.4->Flask==0.12.2->LXDUI==2.1.2) (1.1.1)
Requirement already satisfied: enum34; python_version < "3" in ./lib/python2.7/site-packages (from cryptography>=2.1.4->pyopenssl==17.5.0->LXDUI==2.1.2) (1.1.6)
Requirement already satisfied: asn1crypto>=0.21.0 in ./lib/python2.7/site-packages (from cryptography>=2.1.4->pyopenssl==17.5.0->LXDUI==2.1.2) (0.24.0)
Requirement already satisfied: cffi!=1.11.3,>=1.8 in ./lib/python2.7/site-packages (from cryptography>=2.1.4->pyopenssl==17.5.0->LXDUI==2.1.2) (1.12.2)
Requirement already satisfied: ipaddress; python_version < "3" in ./lib/python2.7/site-packages (from cryptography>=2.1.4->pyopenssl==17.5.0->LXDUI==2.1.2) (1.0.22)
Collecting urllib3>=1.8 (from requests-unixsocket>=0.1.5->pylxd==2.2.7->LXDUI==2.1.2)
  Using cached https://files.pythonhosted.org/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl
Requirement already satisfied: pycparser in ./lib/python2.7/site-packages (from cffi!=1.11.3,>=1.8->cryptography>=2.1.4->pyopenssl==17.5.0->LXDUI==2.1.2) (2.19)
Installing collected packages: psutil, pbr, python-dateutil, ws4py, urllib3, requests-unixsocket, requests-toolbelt, pylxd, futures, singledispatch, backports-abc, tornado, ptyprocess, terminado, tornado-xstatic, XStatic, XStatic-term.js, LXDUI
  Running setup.py install for psutil: started
    Running setup.py install for psutil: finished with status 'error'
    Complete output from command /usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-d7dgZc/psutil/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-BFDwdA/install-record.txt --single-version-externally-managed --compile --user --prefix=:
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-2.7
    creating build/lib.linux-x86_64-2.7/psutil
    copying psutil/_pswindows.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_compat.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_psosx.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/__init__.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_common.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_pslinux.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_pssunos.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_psaix.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_psbsd.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_psposix.py -> build/lib.linux-x86_64-2.7/psutil
    copying psutil/_exceptions.py -> build/lib.linux-x86_64-2.7/psutil
    creating build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_unicode.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_sunos.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_posix.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_windows.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_process.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_osx.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/__init__.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_misc.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_linux.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_system.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_connections.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_memory_leaks.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_aix.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_contracts.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/test_bsd.py -> build/lib.linux-x86_64-2.7/psutil/tests
    copying psutil/tests/__main__.py -> build/lib.linux-x86_64-2.7/psutil/tests
    running build_ext
    building 'psutil._psutil_linux' extension
    creating build/temp.linux-x86_64-2.7
    creating build/temp.linux-x86_64-2.7/psutil
    x86_64-unknown-linux-gnu-gcc -pthread -fno-strict-aliasing -fstack-clash-protection -D_FORTIFY_SOURCE=2 -mtune=generic -O2 -pipe -g -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=545 -DPSUTIL_LINUX=1 -I/usr/include/python2.7 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_common.o
    psutil/_psutil_common.c:9:10: fatal error: Python.h: No such file or directory
     #include <Python.h>
              ^~~~~~~~~~
    compilation terminated.
    error: command 'x86_64-unknown-linux-gnu-gcc' failed with exit status 1
    
    ----------------------------------------

Authenticate failed

lxc --version
2.21
127.0.0.1 - - [21/Dec/2017 09:00:40] "POST /containers-list HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python2.7/dist-packages/flask_login/utils.py", line 228, in decorated_view
    return func(*args, **kwargs)
  File "/home/slevinkelevra/github.com/lxdui/lxdui/app.py", line 263, in containers_list
    IMAGE_OS = str(container.expanded_config["image.os"]).capitalize()
KeyError: 'image.os'

If I go from one definition to another, I see the following:

conn = Client()
    conn.authenticate('SUPERSECRETPASS')

I used this command to set password:
lxc config set core.trust_password SUPERSECRETPASS

And why Python2???

Python error when attempting to log in

This is a fresh install on an ubuntu 18.04 machine that was already running zfs/lxd
Installed globally as per the instructions.

snap --version

snap 2.42.5
snapd 2.42.5
series 16
ubuntu 18.04
kernel 4.15.0-74-generic

lxd --version

3.19

sudo lxdui start

LXDUI ver. 2.1.2 -- (c)AdaptiveScale, Inc.
http://www.adaptivescale.com
LXDUI started. Running on http://0.0.0.0:15151
PID=3055, Press CTRL+C to quit
[2020-02-01 15:14:31,713] ERROR in app: Exception on /api/user/login [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/Flask-0.12.2-py3.6.egg/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.6/dist-packages/Flask-0.12.2-py3.6.egg/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.6/dist-packages/Flask-0.12.2-py3.6.egg/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.6/dist-packages/Flask-0.12.2-py3.6.egg/flask/_compat.py", line 33, in reraise
raise value
File "/usr/local/lib/python3.6/dist-packages/Flask-0.12.2-py3.6.egg/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.6/dist-packages/Flask-0.12.2-py3.6.egg/flask/app.py", line 1598, in dispatch_request
return self.view_functionsrule.endpoint
File "/usr/local/lib/python3.6/dist-packages/Flask_JWT-0.3.2-py3.6.egg/flask_jwt/init.py", line 126, in _default_auth_request_handler
return _jwt.auth_response_callback(access_token, identity)
File "/usr/local/lib/python3.6/dist-packages/Flask_JWT-0.3.2-py3.6.egg/flask_jwt/init.py", line 132, in _default_auth_response_handler
return jsonify({'access_token': access_token.decode('utf-8')})
File "/usr/local/lib/python3.6/dist-packages/Flask-0.12.2-py3.6.egg/flask/json.py", line 251, in jsonify
if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr:
File "/usr/local/lib/python3.6/dist-packages/Werkzeug-1.0.0rc1-py3.6.egg/werkzeug/local.py", line 347, in getattr
return getattr(self._get_current_object(), name)
AttributeError: 'Request' object has no attribute 'is_xhr'

Installation issues

Hi guys am getting this problem when trying to run the install, importerror no module named setuptools

Sent with GitHawk

Roadmap?

Hello folks!

Your LXDUI project shows great promise, thank you so much for the effort you've put in so far to get as far as you have (so much further than other projects!).

I see there is activity in the develop branch, so I wonder what are you working towards release-wise? LXD itself is iterating rapidly, but has a strong foundation in lxdpy for implementing that I see you guys are already leveraging.

My question is, what's your current goal for your next release? Are you facing challenges that might be alleviated by others getting involved?

Adjustments for cluster mode

Are there plans to support cluster mode? E.g. in Cluster mode i have also the location column or i can move containers between clusters.

I think this error comes, because of cluster setup:
UserWarning: Attempted to set unknown attribute "location" on instance of "Container"

Question: Users with rights to control only certain containers?

Hello,

is it possible to define which containers a user added to the web UI can control? For example so that the user admin has full control of all containers, user A only sees and can control containerA, user B can see and control containerB1 and cotainerB2 and so on...

<Feature Request> Port Management

Dear programmers,
thanks for this great project.
Would it be possible to add a port-forwarding possibility?

So external ports <-> internal ports can be graphical maintained which are currently used by LXD containers?

Thanks in advance for your response and your awesome project!

Best regards
Meywether

Model problem

/usr/local/lib/python3.5/dist-packages/pylxd-2.2.7-py3.5.egg/pylxd/models/_model.py:116: UserWarning: Attempted to set unknown attribute "location" on instance of "Container"
  key, self.__class__.__name__

During execution, I received this error. The problem here occurs when I open the interface from one container and click or try to save a snapshot or access the file browser.

500: Internal Server Error

Hi

I have installed lxdui on ubuntu 16.04 and i'm getting 500 internal server error message when trying to load ui.

here is the log

2019-01-23 21:43.05 - tornado.application - ERROR - Uncaught exception GET /ui/ (112.135.86.228)
HTTPServerRequest(protocol='http', host='51.68.189.148:15151', method='GET', uri='/ui/', version='HTTP/1.1', remote_ip='112.135.86.228')
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/tornado-5.0.2-py3.5-linux-x86_64.egg/tornado/web.py", line 1520, in _execute
result = self.prepare()
File "/usr/local/lib/python3.5/dist-packages/tornado-5.0.2-py3.5-linux-x86_64.egg/tornado/web.py", line 2826, in prepare
self.fallback(self.request)
File "/usr/local/lib/python3.5/dist-packages/tornado-5.0.2-py3.5-linux-x86_64.egg/tornado/wsgi.py", line 276, in call
WSGIContainer.environ(request), start_response)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1997, in call
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1978, in wsgi_app
ctx.push()
File "/usr/local/lib/python3.5/dist-packages/flask/ctx.py", line 332, in push
self.session = self.app.open_session(self.request)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 912, in open_session
return self.session_interface.open_session(self, request)
File "/usr/local/lib/python3.5/dist-packages/flask/sessions.py", line 324, in open_session
s = self.get_signing_serializer(app)
File "/usr/local/lib/python3.5/dist-packages/flask/sessions.py", line 321, in get_signing_serializer
signer_kwargs=signer_kwargs)
File "/usr/local/lib/python3.5/dist-packages/itsdangerous/serializer.py", line 95, in init
self.is_text_serializer = is_text_serializer(serializer)
File "/usr/local/lib/python3.5/dist-packages/itsdangerous/serializer.py", line 13, in is_text_serializer
return isinstance(serializer.dumps({}), text_type)
File "/usr/local/lib/python3.5/dist-packages/flask/sessions.py", line 85, in dumps
return json.dumps(_tag(value), separators=(',', ':'))
File "/usr/local/lib/python3.5/dist-packages/flask/json/init.py", line 177, in dumps
_dump_arg_defaults(kwargs)
File "/usr/local/lib/python3.5/dist-packages/flask/json/init.py", line 98, in _dump_arg_defaults
bp.json_encoder if bp and bp.json_encoder
AttributeError: 'Blueprint' object has no attribute 'json_encoder'
2019-01-23 21:43.05 - tornado.access - ERROR - 500 GET /ui/ (112.135.86.228) 5.75ms
2019-01-23 21:43.06 - tornado.access - INFO - 200 GET /favicon.ico (112.135.86.228) 7.33ms
2019-01-23 21:43.09 - tornado.access - INFO - 302 GET / (112.135.86.228) 5.77ms
2019-01-23 21:43.09 - tornado.application - ERROR - Uncaught exception GET /ui/ (112.135.86.228)
HTTPServerRequest(protocol='http', host='51.68.189.148:15151', method='GET', uri='/ui/', version='HTTP/1.1', remote_ip='112.135.86.228')
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/tornado-5.0.2-py3.5-linux-x86_64.egg/tornado/web.py", line 1520, in _execute
result = self.prepare()
File "/usr/local/lib/python3.5/dist-packages/tornado-5.0.2-py3.5-linux-x86_64.egg/tornado/web.py", line 2826, in prepare
self.fallback(self.request)
File "/usr/local/lib/python3.5/dist-packages/tornado-5.0.2-py3.5-linux-x86_64.egg/tornado/wsgi.py", line 276, in call
WSGIContainer.environ(request), start_response)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1997, in call
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1978, in wsgi_app
ctx.push()
File "/usr/local/lib/python3.5/dist-packages/flask/ctx.py", line 332, in push
self.session = self.app.open_session(self.request)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 912, in open_session
return self.session_interface.open_session(self, request)
File "/usr/local/lib/python3.5/dist-packages/flask/sessions.py", line 324, in open_session
s = self.get_signing_serializer(app)
File "/usr/local/lib/python3.5/dist-packages/flask/sessions.py", line 321, in get_signing_serializer
signer_kwargs=signer_kwargs)
File "/usr/local/lib/python3.5/dist-packages/itsdangerous/serializer.py", line 95, in init
self.is_text_serializer = is_text_serializer(serializer)
File "/usr/local/lib/python3.5/dist-packages/itsdangerous/serializer.py", line 13, in is_text_serializer
return isinstance(serializer.dumps({}), text_type)
File "/usr/local/lib/python3.5/dist-packages/flask/sessions.py", line 85, in dumps
return json.dumps(_tag(value), separators=(',', ':'))
File "/usr/local/lib/python3.5/dist-packages/flask/json/init.py", line 177, in dumps
_dump_arg_defaults(kwargs)
File "/usr/local/lib/python3.5/dist-packages/flask/json/init.py", line 98, in _dump_arg_defaults
bp.json_encoder if bp and bp.json_encoder
AttributeError: 'Blueprint' object has no attribute 'json_encoder'
2019-01-23 21:43.09 - tornado.access - ERROR - 500 GET /ui/ (112.135.86.228) 5.45ms
2019-01-23 21:43.09 - tornado.access - INFO - 200 GET /favicon.ico (112.135.86.228) 5.30ms

can anyone help to fix this error?

Regards

lxdui CLI problems

Hello,
New to lxdui, I'm trying to configure it. Tried to enable SSL with my own certificates :

root@LXC-1:~# lxdui cert add -c /etc/ssl/certs/adm.celya.fr.crt -k /etc/ssl/private/adm.celya.fr.key 
root@LXC-1:~# lxdui config show | grep ^lxdui.ssl
lxdui.ssl.cert = /etc/ssl/certs/adm.celya.fr.crt
lxdui.ssl.key = /etc/ssl/private/adm.celya.fr.key
root@LXC-1:~# lxdui cert list
root@LXC-1:~#

I also tried to run lxcui in background mode without success. (tried lxdui config set lxdui.mode background and things like that...)

Is there an systemd startup script available anywhere ?
Thanks for your help
Regards

LXDUI development

Thanks team for the great UI solution to manage LXD.

I would like to modify some features and adapt to my use case. But I cannot produce a development server due to my inexperience in flask and flask-cli interface.

How do I fork this repo to setup in a dev environment where changes in code is recognized on browser refresh. Setting debug gives me "RuntimeError: There is no current event loop in thread 'Thread-1'."

can lxdui access remote lxd ?

Can Lxdui access remote lxd?

we can add a remote lxd server and run command like
lxc list server-b:
to view/access server-b containers from server-a.

if lxdui runs on server-a can lxdui list and manage server-b containers?

Regards

Problem with AuthToken

Hi
Trying the project on Embedded Linux system. I faced with an issue of lose of AuthToken and infinite tornado.access requests:

2018-10-02 17:35.04 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 20.85ms
2018-10-02 17:35.04 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.67ms
2018-10-02 17:35.04 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.59ms
2018-10-02 17:35.04 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.63ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 20.80ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.64ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 20.05ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.67ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 20.91ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.61ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.73ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.63ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 20.97ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.62ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.68ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.59ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 20.94ms
2018-10-02 17:35.05 - tornado.access - INFO - 200 POST /api/user/login (192.168.10.100) 19.62ms

The system is currently up and running except .glyphicon-refresh spinning all the time on the GUI screen. As well Terminal is not working - i see that each time new token is generated.

Please help to solve the problem. If you need more info, i'll provide it by request.

No LXC Objects visible in UI

Hi there,

Thanks so much for releasing this tool - it shows real promise!

I'm up and running after following your install docs, however the UI doesn't seem to be picking up any of my LXC setup from the host - looking at the containers page, the container already running on the host is not listed. If I try to create a new container, the UI complains no Storage Pools are available (there are 2 created on the host and visible if I lxc storage list).

I imagine I've made some basic faux pas here, can you point me in the right direction please?

Remote access web UI?

How can I run this ui from a remote machine?
ie Access server on cloud from laptop

Setup scripts fails on vanilla Ubuntu 16.04 LTS install

setup.py fails with the following:
root@lxc-l-01a:/opt/lxdui# python3 setup.py install
Traceback (most recent call last):
File "setup.py", line 2, in
from setuptools import setup, find_packages
ImportError: No module named 'setuptools'

root@lxc-l-01a:/opt/lxdui# uname -a
Linux lxc-l-01a 4.4.0-127-generic #153-Ubuntu SMP Sat May 19 10:58:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
root@lxc-l-01a:/opt/lxdui# python3 -V
Python 3.5.2

Cant create a UDP Port Mapping

All works great, but i cant create a UDP Port Mapping (Chrome), TCP Port mapping works as espected.
I try all privileges, and another iptables PREROUTING manual configurations but nothing works.
I create several containers with same results.
I cant get some log on lxc or lxd, lxdui has been installed by root and executed by root too.
Sorry for my English.

Thanks in advance.

<Bug> ZFS Storage Pool not created

Dear programmers,
after experimenting with your great programm, I wanted to create a ZFS volume.
The GUI did not give any response after filling out the form Driver and Storage Pool name.

This was the error message within the terminal:
image

According to the official LXD Documentation I was able to locate the problem in more detail:

https://lxd.readthedocs.io/en/latest/storage/

The main problem was ZFS does not need a directory path to be mounted. It needs a device path,

I created a ZFS Pool by using : lxc storage create pool1_zfs source=/dev/sdb

But afterwards it was not listed within the GUI Tool. By using lxd storage list it was visible to the system:
image

So it seems that an input field to the device is needed for zfs pools.

Hopefully my description was helpful!

Best regards

Meywether

******************************************************* UPDATE 06.06.2018

Hi programmers,
One additional information:
If I want to add a zfs pool manually it does not show up in the UI Tool.

If I add a normal pool (e.g. dir) then it shows up in the UI Tool as well.

Additionally I strongly suggest an input field to create storage pools by providing the source property. So the creation of pools outside of /var/lxc is possible e.g. at /containers. It is possible to crete the storage pools manually via cli where I want but it really would be nice to do it via the UI!

Thanks in advance

Meywether

unknown command network

While creating the bridge , i get the following error in the console. Logs show the following

2019-01-20 17:29.49 - app.api.models.LXCNetwork - INFO - Creating network lxdbr1
2019-01-20 17:29.49 - app.api.models.LXCNetwork - INFO - Prepare network tasks
2019-01-20 17:29.49 - app.api.models.LXCNetwork - INFO - Execute network tasks on terminal
2019-01-20 17:29.54 - app.api.models.LXCNetwork - INFO - Reading network lxdbr1 information
2019-01-20 17:29.54 - tornado.access - INFO - 200 POST /api/network/lxdbr1 (myip) 5044.37ms
2019-01-20 17:29.54 - tornado.access - INFO - 200 GET /ui/network?name=lxdbr1&IPv4_ADDR=10.0.8.1&IPv4_NETMASK=255.255.255.0&IPv4_DHCP_START=10.0.8.2&IPv4_DHCP_END=10.0.8.254 (my ip) 53.12ms
2019-01-20 17:29.55 - tornado.access - INFO - 200 GET /api/lxd/config (my ip) 13.65ms

Can you provide some clear instructions on how to assign the public ip to a container? and if anything we need to make sure to be able to use the browser based terminal access?

LXDUI 2.0 console inside browser

500: Internal Server Error

When I try to open the terminal console from a running container, it fails with this error above.

I try to open this terminal using firefox em chrome, both fail. Anything that I need to know or activate to do that work?

How do you change/add login ID and passwords?

I installed this in Ubuntu 18.04 and at first couldn't find anywhere what the login ID & password were then I just tried admin/admin

Once logged in I didn't see any place to change that initial Login ID and Password or to add an additional account?

I don't want to leave it on my system with a default admin/admin when it can access my containers?

Any pointers?

Properly enabling TLS/HTTPS

http://flask.pocoo.org/snippets/111/

I was able to change the main file, with the ssl_context of the last comment in that linked thread. I surmise one could add an optional command line; or extra lines in config.json; to not have to recompile the program when wanting to use TLS certs.

FORBIDDEN Create container: Create LXC container: Invalid devices: Detect root disk device: No root device could be found

fresh ubuntu 18.04 cloud instance - LXDUI install no errors - lxd init default values - instance creation error
can create create storage pool
also can create CLI instances without device specification (which LXDUI does not show)
when create instance via LXDUI with ubuntu xenial or bionic this error:
FORBIDDEN Create container: Create LXC container: Invalid devices: Detect root disk device: No root device could be found

 lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm, zfs) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing block device? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=15GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [defa                                                   ult=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [defa                                                   ult=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]: yes
Address to bind LXD to (not including port) [default=all]:
Port to bind LXD to [default=8443]:
Trust password for new clients:
Again:
Would you like stale cached images to be updated automatically? (yes/no) [defaul                                                   t=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

snap list
Name  Version  Rev   Tracking  Publisher   Notes
core  16-2.37  6259  stable    canonical✓  core
lxd   3.9      9919  stable    canonical✓  -
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
|  NAME   | DESCRIPTION | DRIVER |             SOURCE             | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| default |             | zfs    | /var/lib/lxd/disks/default.img | 3       |
+---------+-------------+--------+--------------------------------+---------+
 lxc info
config:
  core.https_address: '[::]:8443'
  core.trust_password: true
api_extensions:
- storage_zfs_remove_snapshots
- container_host_shutdown_timeout
- container_stop_priority
- container_syscall_filtering
- auth_pki
- container_last_used_at
- etag
- patch
- usb_devices
- https_allowed_credentials
- image_compression_algorithm
- directory_manipulation
- container_cpu_time
- storage_zfs_use_refquota
- storage_lvm_mount_options
- network
- profile_usedby
- container_push
- container_exec_recording
- certificate_update
- container_exec_signal_handling
- gpu_devices
- container_image_properties
- migration_progress
- id_map
- network_firewall_filtering
- network_routes
- storage
- file_delete
- file_append
- network_dhcp_expiry
- storage_lvm_vg_rename
- storage_lvm_thinpool_rename
- network_vlan
- image_create_aliases
- container_stateless_copy
- container_only_migration
- storage_zfs_clone_copy
- unix_device_rename
- storage_lvm_use_thinpool
- storage_rsync_bwlimit
- network_vxlan_interface
- storage_btrfs_mount_options
- entity_description
- image_force_refresh
- storage_lvm_lv_resizing
- id_map_base
- file_symlinks
- container_push_target
- network_vlan_physical
- storage_images_delete
- container_edit_metadata
- container_snapshot_stateful_migration
- storage_driver_ceph
- storage_ceph_user_name
- resource_limits
- storage_volatile_initial_source
- storage_ceph_force_osd_reuse
- storage_block_filesystem_btrfs
- resources
- kernel_limits
- storage_api_volume_rename
- macaroon_authentication
- network_sriov
- console
- restrict_devlxd
- migration_pre_copy
- infiniband
- maas_network
- devlxd_events
- proxy
- network_dhcp_gateway
- file_get_symlink
- network_leases
- unix_device_hotplug
- storage_api_local_volume_handling
- operation_description
- clustering
- event_lifecycle
- storage_api_remote_volume_handling
- nvidia_runtime
- candid_authentication
- candid_config
- candid_config_key
- usb_optional_vendorid
api_status: stable
api_version: "1.0"
auth: trusted
public: false
auth_methods:
- tls
environment:
  addresses:
  - 172.16.XXXX:8443
  - '[2602:ffb6:4:2a5cXXXX]:8443'
  - 10.253XXX:8443
  - '[fd42:a979:e338:9260::1]:8443'
  architectures:
  - x86_64
  - i686
  certificate: |
    -----BEGIN CERTIFICATE-----
    MIIFWDCCA0CgAwIBAgIQI0Zt9eZ96GaTtrVXCJCnIjANBgkqhkiG9w0BAQsFADA2
    MRwwGgYDVQQKExNsaW51eGNvbnRhaW5lcnMub3JnMRYwFAYDVQQDDA1yb290QGx1
    bmEtbHhjMB4XDTE5MDEyOTE5MTkxOVoXDTI5MDEyNjE5MTkxOVowNjEcMBoGA1UE
    ChMTbGludXhjb250YWluZXJzLm9yZzEWMBQGA1UEAwwNcm9vdEBsdW5hLWx4YzCC
    AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOJHA3fMZjsW6S1SZ/uhJsHM
    2cWBsY+d4OA1PM0c9UcCgg/jM07U9QO1AMZ6PJyca4paPQ9UWvDC9GVsrmAtzgEg
    oeCxy2BgeVDUUYpE7+Z+J4F+UsX7AHFZvCl3n8cX9ZgYvB3NdBD2IbQbAzFYlBAN
    AHImZZ8YqFua78WpCSM6+IdEwr9PhxJPcp2LjMazVSbwkDSWHXtq+6ss01ebvI9W
    6cVBlFVrsdoLYJy8wblKdWpN4u1OEoE4yqnDq5pLSQa71BJS92ytwUTB0bmkoz5z
    5Ff3woZj0xEo3fqvZbBe7sRce1W/9HZLLn+SsT2uhZYHPq7w5V0uvp9HHBoIlRpS
    CJUMrmYSLtGaBWHkLuMLL6Y4nRE0xbKvNh5PdjOncce0SOGOjwUML36kXLa8sahY
    IvuNfvaov1A9/nV8M3sCHksox7MsFbZA8GPEFhTX3aGBzsh9+5gPho0zuEO+QhGn
    uAPkec6pDo3FKG+O08Nt6dQGTwkzb+oVBOevYQcvMEwt83S9r2xOgxOLaXvFf5Wb
    ENliq1GOBtt1YWOCMNZkFrC/XFqMV9s2PHrzDtysJ3bwULS25NdHCavuOwiuZ5kF
    6ooGtM2cwapEse4ECtILiWOMzQnU4LwPWn0GmdDdpirym3Rl4RQDbonwAEW1UJ0s
    bEpLa2zxpOQR/TarZmnbAgMBAAGjYjBgMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUE
    DDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMCsGA1UdEQQkMCKCCGx1bmEtbHhj
    hwSsEAADhxAmAv+2AAQqXPgWPv/+spI7MA0GCSqGSIb3DQEBCwUAA4ICAQAu9dXw
    B9yw3i46n/xchMLkg2Isf5cisz9XhmGfpbJxxXcJfpzZcnZMJfypTvkbzwV+Wik0
    kW4S+l7YphV1ZwomsXkSBlqExutQdKj4g8MosWGSuGTXOsd81+AdatBSQtOIE8/u
    DKcWCMgoqSVMottsFMSp59fEii86KhtldQ2ddEyFBru7ybCw3Ek45vb2dT4Ou273
    zaHFDaN81Hs0X8a4GhhWR3kzPulCP1gW8rqWqXOmYWsHfTq9k2sZOVnZyg5SbUGo
    2LFUQQXjjgotC4hYbBdjVqxYISer37OrtbkV2EVtRDSACjGsj9JOCKWFe2LMek13
    /JB0QNwQO9v3G341nNnzdxrjzZbR8URwgQH/9USQZaTIf9s4ALoyMQ3NmhrjYxBo
    bbufxxOENV7Wq9oIErKhE1zA1TqulFkNzInX0xrFu9LJZUHqDT0kSpgBLAueson7
    yic8Bw2Y8H3wtfP2B3aqCFBD8z1Ma4vXCM4hdbCzlusOkoTN54o3wyCowpMqnmuD
    txCEQw7MG6WpnUjv9Vv9GmxthGGlIjS3po+AjN+ildfcsaYk7Im5PNGpKNYA4ZFv
    HqQc5RLTmIOZagNDx9wA42d/3E/H9vWEJL6EpVW82kFq84f1MP9O9gLj7O9muYaE
    DXxtjbM3BQ2VeRQEyb5SanfVezYmsWhSqDgDqg==
    -----END CERTIFICATE-----
  certificate_fingerprint: 9867aa59324a1a3fda5eeae3952765ebf7ceb433c0fc2545b6236f833fb43468
  driver: lxc
  driver_version: 3.0.3
  kernel: Linux
  kernel_architecture: x86_64
  kernel_version: 4.15.0-43-generic
  server: lxd
  server_pid: 17923
  server_version: 3.0.3
  storage: zfs
  storage_version: 0.7.5-1ubuntu16.4
  server_clustered: false
  server_name: luna-lxc
  project: ""

Clone copies Mac address

Cloning a container from /ui/containers copies the mac address for the container.

image

web6 was created by using lxc copy web5 web6 but web5 was created by using the clone option in the UI.

It seems like LXC knows to change mac addresses when starting the new container but the UI just copies the entire config to the new container (mac address included).

snapshot not working

snapshot not working for containers ....
i can manually take snapshot whit : lxc snapshot command but cant whit web ui
please help me to fix this problem ...

bind address and base URI

It would be nice to be able to specify the listening address and the base URI, something like

lxdui.bind = 127.0.0.1
lxdui.base = /lxdui

LXC Debian

Does this tool work with LXC on Debian? Or only with LXD?

500: Internal Server Error

LXD Version: 3.7
When I launched new container from my own image, I could not open the terminal from lxdui page, it just shows:

500: Internal Server Error

And I use Ubuntu:16.04 image to create container, it can open terminal from lxdui page first, but it shows black page after a while.
How to solve it?
Any help is welcome.

Is there any way to make subfolder as root for lxdui?

I am trying to hide lxdui behide nginx and want to access it via url like https://mydomain/lxdui as I don't have access to many ports on my server other than 80 and 443 and there are other apps on the ports so I cannot use / for lxdui. Is there any way to add prefix to lxdui root?

seems all the subfolders (ui/api/static, etc.) are used / directly, so the nginx reverse proxy does not work well. even I mapped all the subfolders, I am still having troubles to make websocket work. if there is one place to set prefix instead of /, it will be much easier to do the reverse proxying if that is possible.

executable file does not appear

branch: lxdui-2.0
command: sudo python3.5 setup.py install
expectations: sudo lxdui ... runned
reality: command not found

I think that install_script works incorrect or absent at all.

LXDui is not working properly with Safari and Firefox

The LXDui installed on Server 18.04 Bionic is not working properly in Safari and Firefox latest versions.
In Safari, the LDXui will log me out when I click profile or storage pool menu.
In Firefox, the LXDui profile and storage pool menu can be visited, but cannot create or edit any profiles and new storage pool.

The only working browser for me at the moment is Google Chrome.

Issue with User Accounts when running as a .service

Hi

I'm a little new to this so apologies if I'm going about this the wrong way. I am having an issue where if I start lxdui using lxdui start or the run.py script and make changes to add/change the admin account password then these work fine BUT what I want to do is have lxdui run at startup when my container host starts.

So I added it as a service by creating the following file in /lib/systemd/system called lxdui.service

[Unit]
Description=LXDUI Service
After=multi-user.target
Conflicts=[email protected]

[Service]
Type=simple
ExecStart=/usr/bin/python3 /bin/lxdui/run.py start
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

Then running the following to reload systemd:
sudo systemctl daemon-reload
sudo systemctl enable lxdui.service
sudo systemctl start lxdui.service

This works in that lxdui runs at startup of the host and doesn't require me to open an SSH or console session to the host to keep it running BUT if I make a change to admin password or add another user the Web UI doesn't seem to respect this. It just keeps going back to admin/admin and the new accounts don't work at all.

If I start lxdui using lxdui start though it works fine.

As such I'm sure I'm doing something stupid but I have no idea what...

Any insight would be much appreciated!

Thanks

I'm running this on Ubuntu 18.04.1 LTS

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.