1
0
mirror of https://github.com/gryf/boxpy.git synced 2026-03-25 06:33:32 +01:00

6 Commits

Author SHA1 Message Date
cd1dc310c7 Handle keyboard interruption. 2026-03-17 19:15:59 +01:00
295fb59101 Bumped Fedora and Centos Stream versions 2026-02-27 10:26:28 +01:00
60e45b9bfc Added support for Fedora 42 2025-05-20 11:27:21 +02:00
88172acd67 Refactor Run class.
When using capture=True together with subprocess.run, interactive
session will not work, as all the output will be captured. Perfectly
well seen with `boxpy ssh`. This commit will fix this issue.
2025-05-05 13:09:09 +02:00
4c3aef3a85 Fix ssh command.
There was a leftover call for changed Run object initialization.
With this commit it's correct now.
2025-05-02 12:42:17 +02:00
189fbab17d Removed license classifier in favor of SPDX entry. 2025-04-18 16:04:42 +02:00
3 changed files with 20 additions and 15 deletions

View File

@@ -37,20 +37,23 @@ Tested distros
- 20.04
- 22.04
- 24.04
- 25.04
- Fedora
- 37
- 38
- 39
- 40
- 41
- 42
- Centos Stream
- 8
- 9
- 10
- Debian
- 10 (buster)
- 11 (bullseye)
- 12 (bookworm)
- 13 (trixie) - prerelease
- 13 (trixie)
There is possibility to use whatever OS image which supports cloud-init. Use
the ``--image`` param for ``create`` command to pass image filename, although
@@ -76,7 +79,7 @@ You'll have ``boxpy`` command created for you as well.
.. code:: shell-session
$ boxpy -V
boxpy 1.9.2
boxpy 1.11.3
Other option is simply link it somewhere in the path:

20
box.py
View File

@@ -18,7 +18,7 @@ import requests
import yaml
__version__ = "1.11.0"
__version__ = "1.11.3"
CACHE_DIR = os.environ.get('XDG_CACHE_HOME', os.path.expanduser('~/.cache'))
CLOUD_IMAGE = "ci.iso"
@@ -275,8 +275,9 @@ class Run:
Helper class on subprocess.run()
command is a list with command and its params to execute
"""
def __init__(self, command):
result = subprocess.run(command, encoding='utf-8', capture_output=True)
def __init__(self, command, capture=True):
result = subprocess.run(command, encoding='utf-8',
capture_output=capture)
self.returncode = result.returncode
self.stdout = result.stdout.strip() if result.stdout else ''
@@ -1143,7 +1144,9 @@ class Fedora(Image):
'38': '1.6',
'39': '1.5',
'40': '1.14',
'41': '1.4'}
'41': '1.4',
'42': '1.1',
'43': '1.6'}
def __init__(self, vbox, version, arch, fname=None):
super().__init__(vbox, version, arch)
@@ -1250,7 +1253,7 @@ DISTROS = {'ubuntu': {'username': 'ubuntu',
'realname': 'centos',
'img_class': CentosStream,
'amd64': 'x86_64',
'default_version': '9'},
'default_version': '10'},
'debian': {'username': 'debian',
'realname': 'debian',
'img_class': Debian,
@@ -1635,7 +1638,7 @@ def connect(args):
f'@localhost:{conf.port}']
LOG.debug('Connecting to vm `%s` using command:\n%s', args.name,
' '.join(cmd))
return Run(cmd, False).returncode
return Run(cmd, capture=False).returncode
def _set_vmstate(name, state, guitype=None, poweroff=False):
@@ -1824,4 +1827,7 @@ def main():
if __name__ == '__main__':
sys.exit(main())
try:
sys.exit(main())
except KeyboardInterrupt:
sys.exit(50)

View File

@@ -1,5 +1,5 @@
[build-system]
requires = ["setuptools >= 61.0"]
requires = ["setuptools >= 77.0"]
build-backend = "setuptools.build_meta"
[project]
@@ -8,7 +8,7 @@ dynamic = ["version"]
authors = [
{name = "Roman Dobosz", email = "gryf73@gmail.com"}
]
license = {text = "GPLv3"}
license = "GPL-3.0-or-later"
description = "Run Linux cloud image on top of VirtualBox using commandline tool"
readme = "README.rst"
requires-python = ">=3.8"
@@ -18,7 +18,6 @@ classifiers = [
"Intended Audience :: End Users/Desktop",
"Topic :: Terminals",
"Topic :: Utilities",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
@@ -44,9 +43,6 @@ py-modules = ["box"]
[tool.setuptools.dynamic]
version = {attr = "box.__version__"}
[tool.distutils.bdist_wheel]
universal = true
[tool.ruff]
line-length = 79
indent-width = 4