1
0
mirror of https://github.com/gryf/boxpy.git synced 2026-02-02 14:15:49 +01:00

9 Commits
1.7.1 ... 1.9.3

Author SHA1 Message Date
71bf5b6d99 Bump Fedora version, remove archived versions prior to 37 2023-12-05 11:54:05 +01:00
e73d5ce458 Update kuryr multinode setup example 2023-07-23 12:58:12 +02:00
d623114f69 Update example for wmaker 2023-07-23 12:54:09 +02:00
51f642bea0 Updated ubuntu devstack example 2023-07-23 12:39:18 +02:00
12df0e97df Updated fedora devstack example 2023-07-23 11:53:59 +02:00
5f0def3103 Bump distribution latest version.
Also, updated mapping for the Fedora images.
2023-07-05 15:58:56 +02:00
43eabb9947 Fix nasty bug for debian images 2023-07-04 18:48:18 +02:00
55416db13d Added --type switch for start command 2023-04-20 19:42:21 +02:00
86a5655025 Improve detecting VM Operating System. 2023-04-20 19:21:24 +02:00
7 changed files with 131 additions and 75 deletions

View File

@@ -55,25 +55,25 @@ or simply link it somewhere in the path:
$ chmod +x ~/bin/boxpy $ chmod +x ~/bin/boxpy
and now you can issue some command. For example, to spin up a VM with Ubuntu and now you can issue some command. For example, to spin up a VM with Ubuntu
18.04 with one CPU, 1GB of memory and 6GB of disk: 20.04 with one CPU, 1GB of memory and 6GB of disk:
.. code:: shell-session .. code:: shell-session
$ boxpy create --version 18.04 myvm $ boxpy create --version 20.04 myvm
note, that Ubuntu is default distribution you don't need to specify note, that Ubuntu is default distribution you don't need to specify
``--distro`` nor ``--version`` it will pick up latest LTS version. Now, let's ``--distro`` nor ``--version`` it will pick up latest LTS version. Now, let's
recreate it with 20.04: recreate it with 22.04:
.. code:: shell-session .. code:: shell-session
$ boxpy rebuild --version 20.04 myvm $ boxpy rebuild --version 22.04 myvm
or recreate it with Fedora and add additional CPU: or recreate it with Fedora and add additional CPU:
.. code:: shell-session .. code:: shell-session
$ boxpy rebuild --distro fedora --version 34 --cpu 2 myvm $ boxpy rebuild --distro fedora --version 39 --cpu 2 myvm
now, let's connect to the VM using either ssh command, which is printed out at now, let's connect to the VM using either ssh command, which is printed out at
as last ``boxpy`` output line, or simply by using ssh boxpy command: as last ``boxpy`` output line, or simply by using ssh boxpy command:

101
box.py
View File

@@ -18,11 +18,11 @@ import requests
import yaml import yaml
__version__ = "1.3" __version__ = "1.9.2"
CACHE_DIR = os.environ.get('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) CACHE_DIR = os.environ.get('XDG_CACHE_HOME', os.path.expanduser('~/.cache'))
CLOUD_IMAGE = "ci.iso" CLOUD_IMAGE = "ci.iso"
FEDORA_RELEASE_MAP = {'32': '1.6', '33': '1.2', '34': '1.2'} FEDORA_RELEASE_MAP = {'37': '1.7', '38': '1.6', '39': '1.5'}
DEBIAN_CODENAME_MAP = {'12': 'bookworm', '11': 'bullseye', '10': 'buster'} DEBIAN_CODENAME_MAP = {'12': 'bookworm', '11': 'bullseye', '10': 'buster'}
TYPE_MAP = {'HardDisk': 'disk', 'DVD': 'dvd', 'Floppy': 'floppy'} TYPE_MAP = {'HardDisk': 'disk', 'DVD': 'dvd', 'Floppy': 'floppy'}
DISTRO_MAP = {'ubuntu': 'Ubuntu', 'fedora': 'Fedora', DISTRO_MAP = {'ubuntu': 'Ubuntu', 'fedora': 'Fedora',
@@ -137,13 +137,37 @@ _boxpy() {
if [[ ${prev} == ${cmd} ]]; then if [[ ${prev} == ${cmd} ]]; then
COMPREPLY=( $(compgen -W "bash" -- ${cur}) ) COMPREPLY=( $(compgen -W "bash" -- ${cur}) )
fi fi
;;
start)
items=(--type)
if [[ ${prev} == ${cmd} ]]; then
if [[ ${cmd} = "start" ]]; then
_vms_comp vms
else
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
fi
else
_get_excluded_items "${items[@]}"
COMPREPLY=( $(compgen -W "$result" -- ${cur}) )
case "${prev}" in
--type)
COMPREPLY=( $(compgen -W "gui headless sdl separate" \
-- ${cur}) )
;;
--*)
COMPREPLY=( )
;;
esac
fi
;; ;;
create|rebuild) create|rebuild)
items=(--cpus --disable-nested --disk-size --default-user --distro items=(--cpus --disable-nested --disk-size --default-user --distro
--forwarding --image --key --memory --hostname --port --config --forwarding --image --key --memory --hostname --port --config
--version --type) --version --type)
if [[ ${prev} == ${cmd} ]]; then if [[ ${prev} == ${cmd} ]]; then
if [[ ${cmd} = "rebuild" ]]; then if [[ ${cmd} = "rebuild" || ${cmd} == "start" ]]; then
_vms_comp vms _vms_comp vms
else else
COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) ) COMPREPLY=( $(compgen -W "${items[*]}" -- ${cur}) )
@@ -195,11 +219,6 @@ _boxpy() {
_vms_comp runningvms _vms_comp runningvms
fi fi
;; ;;
start)
if [[ ${prev} == ${cmd} ]]; then
_vms_comp vms
fi
;;
stop) stop)
if [[ ${prev} == ${cmd} ]]; then if [[ ${prev} == ${cmd} ]]; then
_vms_comp runningvms _vms_comp runningvms
@@ -587,14 +606,47 @@ class Config:
class OsTypes: class OsTypes:
def ubuntu(conf): def __init__(self, conf):
return "Ubuntu%s_64" % conf.version.replace('.', '_') self._conf = conf
self._ostypes = []
def fedora(conf): self._gather_os_types()
def _gather_os_types(self):
out = Run(['vboxmanage', 'list', 'ostypes']).stdout
for line in out.split('\n'):
if not line.startswith('ID:'):
continue
self._ostypes.append(line.split(':')[1].strip())
def ubuntu(self):
lts = ''
major, minor = [int(x) for x in self._conf.version.split('.')]
if major % 2 == 0 and minor == 4:
lts = '_LTS'
name = "Ubuntu%s%s_64" % (major, lts)
if name not in self._ostypes:
return 'Ubuntu_64'
return name
def fedora(self):
return "Fedora_64" return "Fedora_64"
def debian(conf): def debian(self):
return "Debian%s_64" % conf.version name = "Debian%s_64" % self._conf.version
if name not in self._ostypes:
return 'Debian_64'
return name
def get(self):
if not hasattr(self, self._conf.distro):
return "Linux_64"
return getattr(self, self._conf.distro)()
class VBoxManage: class VBoxManage:
@@ -779,12 +831,8 @@ class VBoxManage:
'--nic1', 'nat', '--nic1', 'nat',
'--natpf1', f'boxpyssh,tcp,,{port},,22', '--natpf1', f'boxpyssh,tcp,,{port},,22',
'--graphicscontroller', 'vmsvga', '--graphicscontroller', 'vmsvga',
'--vram', '16'] '--vram', '16',
'--ostype', OsTypes(conf).get()]
if hasattr(OsTypes, conf.distro):
cmd.extend(['--ostype', getattr(OsTypes, conf.distro)(conf)])
else:
cmd.extend(['--ostype', 'Linux_64'])
for count, (hostport, vmport) in enumerate(conf.forwarding.items(), for count, (hostport, vmport) in enumerate(conf.forwarding.items(),
start=1): start=1):
@@ -1155,17 +1203,17 @@ DISTROS = {'ubuntu': {'username': 'ubuntu',
'realname': 'fedora', 'realname': 'fedora',
'img_class': Fedora, 'img_class': Fedora,
'amd64': 'x86_64', 'amd64': 'x86_64',
'default_version': '34'}, 'default_version': '39'},
'centos': {'username': 'centos', 'centos': {'username': 'centos',
'realname': 'centos', 'realname': 'centos',
'img_class': CentosStream, 'img_class': CentosStream,
'amd64': 'x86_64', 'amd64': 'x86_64',
'default_version': '8'}, 'default_version': '9'},
'debian': {'username': 'debian', 'debian': {'username': 'debian',
'realname': 'debian', 'realname': 'debian',
'img_class': Debian, 'img_class': Debian,
'amd64': 'amd64', 'amd64': 'amd64',
'default_version': '11'}} 'default_version': '12'}}
def get_image_object(vbox, version, image='ubuntu', arch='amd64'): def get_image_object(vbox, version, image='ubuntu', arch='amd64'):
@@ -1556,7 +1604,7 @@ def connect(args):
return Run(cmd, False).returncode return Run(cmd, False).returncode
def _set_vmstate(name, state): def _set_vmstate(name, state, guitype=None):
vbox = VBoxManage(name) vbox = VBoxManage(name)
if not vbox.get_vm_info(): if not vbox.get_vm_info():
@@ -1572,13 +1620,13 @@ def _set_vmstate(name, state):
return return
if state == "start": if state == "start":
vbox.poweron() vbox.poweron(guitype)
else: else:
vbox.acpipowerbutton() vbox.acpipowerbutton()
def vmstart(args): def vmstart(args):
_set_vmstate(args.name, 'start') _set_vmstate(args.name, 'start', args.type)
def vmstop(args): def vmstop(args):
@@ -1693,6 +1741,9 @@ def main():
start = subparsers.add_parser('start', help='start VM') start = subparsers.add_parser('start', help='start VM')
start.add_argument('name', help='name or UUID of the VM') start.add_argument('name', help='name or UUID of the VM')
start.add_argument('-t', '--type', default='headless',
help="VM run type, headless by default.",
choices=['gui', 'headless', 'sdl', 'separate'])
start.set_defaults(func=vmstart) start.set_defaults(func=vmstart)
stop = subparsers.add_parser('stop', help='stop VM') stop = subparsers.add_parser('stop', help='stop VM')

View File

@@ -1,9 +1,7 @@
# Note, that cloud init will fail, due to old cloudinit package, which module
# cc_keys_to_console doesn't recognize skipping option. Just ignore this error.
package_update: true package_update: true
packages: packages:
- bash-completion - bash-completion
- ctags-etags - ctags
- git - git
- git-review - git-review
- htop - htop
@@ -25,13 +23,13 @@ write_files:
disable_service n-vnc disable_service n-vnc
disable_service dstat disable_service dstat
runcmd: runcmd:
- [su, -, fedora, -c, "git clone https://opendev.org/openstack/devstack ~/devstack"] - su - fedora -c "git clone https://opendev.org/openstack/devstack ~/devstack"
- [su, -, fedora, -c, "cp /tmp/local.conf /home/fedora/devstack/"] - su - fedora -c "cp /tmp/local.conf /home/fedora/devstack/"
- [su, -, fedora, -c, "echo 'export HOST_IP=10.0.2.15' >> .bashrc"] - su - fedora -c "echo 'export HOST_IP=10.0.2.15' >> .bashrc"
boxpy_data: boxpy_data:
key: vm key: vm
cpus: 2 cpus: 2
memory: 4GB memory: 4GB
disk_size: 10GB disk_size: 10GB
distro: fedora distro: fedora
version: 34 version: 36

View File

@@ -7,7 +7,7 @@ packages:
- ipython3 - ipython3
- jq - jq
- mc - mc
- python-apsw - python3-apsw
- python3-flake8 - python3-flake8
- python3-jedi - python3-jedi
- python3-pip - python3-pip
@@ -26,17 +26,15 @@ write_files:
RABBIT_PASSWORD=$$ADMIN_PASSWORD RABBIT_PASSWORD=$$ADMIN_PASSWORD
SERVICE_PASSWORD=$$ADMIN_PASSWORD SERVICE_PASSWORD=$$ADMIN_PASSWORD
runcmd: runcmd:
- [apt, purge, '-y', python3-pyasn1-modules] - apt purge -y python3-pyasn1-modules
- [apt, purge, '-y', python3-simplejson] - apt purge -y python3-simplejson
- [su, -, ubuntu, -c, "git clone https://github.com/gryf/vmstrap"] - su - ubuntu -c "git clone https://opendev.org/openstack/devstack ~/devstack"
- [su, -, ubuntu, -c, "vmstrap/bootstrap.sh -c"] - su - ubuntu -c "cp /tmp/local.conf /home/ubuntu/devstack/"
- [rm, -fr, /home/ubuntu/vmstrap] - su - ubuntu -c "echo 'export HOST_IP=10.0.2.15' >> .bashrc"
- [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"]
- [su, -, ubuntu, -c, "echo 'export HOST_IP=10.0.2.15' >> .bashrc"]
boxpy_data: boxpy_data:
key: vm key: vm
cpus: 2 cpus: 2
memory: 6GB memory: 6GB
disk_size: 10GB disk_size: 10GB
distro: ubuntu distro: ubuntu
version: 20.04 version: 22.04

View File

@@ -7,7 +7,7 @@ packages:
- ipython3 - ipython3
- jq - jq
- mc - mc
- python-apsw - python3-apsw
- python3-flake8 - python3-flake8
- python3-jedi - python3-jedi
- python3-pip - python3-pip
@@ -122,6 +122,7 @@ write_files:
# Vars # Vars
ADMIN_PASSWORD="secretadmin" ADMIN_PASSWORD="secretadmin"
CONTAINER_ENGINE="crio"
DATABASE_PASSWORD="secretdatabase" DATABASE_PASSWORD="secretdatabase"
ETCD_USE_RAMDISK="True" ETCD_USE_RAMDISK="True"
@@ -131,9 +132,10 @@ write_files:
KURYR_K8S_MULTI_WORKER_TESTS="True" KURYR_K8S_MULTI_WORKER_TESTS="True"
KURYR_K8S_OCTAVIA_MEMBER_MODE="L2" KURYR_K8S_OCTAVIA_MEMBER_MODE="L2"
KURYR_LB_ALGORITHM="SOURCE_IP_PORT" KURYR_LB_ALGORITHM="SOURCE_IP_PORT"
KURYR_NEUTRON_DEFAULT_ROUTER="router1" KURYR_NEUTRON_DEFAULT_ROUTER="kuryr-router"
KURYR_SG_DRIVER="policy" KURYR_SG_DRIVER="policy"
KURYR_SUBNET_DRIVER="namespace" KURYR_SUBNET_DRIVER="namespace"
KURYR_SUPPORT_POD_SECURITY="True"
LOGFILE="/opt/stack/logs/devstacklog.txt" LOGFILE="/opt/stack/logs/devstacklog.txt"
LOG_COLOR="False" LOG_COLOR="False"
@@ -142,10 +144,11 @@ write_files:
OCTAVIA_AMP_IMAGE_NAME="test-only-amphora-x64-haproxy-ubuntu-bionic" OCTAVIA_AMP_IMAGE_NAME="test-only-amphora-x64-haproxy-ubuntu-bionic"
OCTAVIA_AMP_IMAGE_SIZE="3" OCTAVIA_AMP_IMAGE_SIZE="3"
OVN_BRANCH="v20.06.2" OVN_BRANCH="v21.06.0"
OVN_BUILD_FROM_SOURCE="True" OVN_BUILD_FROM_SOURCE="True"
OVN_DBS_LOG_LEVEL="dbg" OVN_DBS_LOG_LEVEL="dbg"
OVN_L3_CREATE_PUBLIC_NETWORK="True" OVN_L3_CREATE_PUBLIC_NETWORK="True"
OVS_BRANCH="a4b04276ab5934d087669ff2d191a23931335c87"
VAR_RUN_PATH="/usr/local/var/run" VAR_RUN_PATH="/usr/local/var/run"
@@ -167,23 +170,25 @@ write_files:
enable_plugin octavia-tempest-plugin https://opendev.org/openstack/octavia-tempest-plugin enable_plugin octavia-tempest-plugin https://opendev.org/openstack/octavia-tempest-plugin
enable_plugin ovn-octavia-provider https://opendev.org/openstack/ovn-octavia-provider enable_plugin ovn-octavia-provider https://opendev.org/openstack/ovn-octavia-provider
[[post-config|$OCTAVIA_CONF]] [[post-config|$$OCTAVIA_CONF]]
[api_settings] [api_settings]
enabled_provider_drivers = amphora:'Octavia Amphora driver',ovn:'Octavia OVN driver' enabled_provider_drivers = amphora:'Octavia Amphora driver',ovn:'Octavia OVN driver'
runcmd: runcmd:
- [apt, purge, '-y', python3-pyasn1-modules] - systemctl stop systemd-resolved.service
- [apt, purge, '-y', python3-simplejson] - systemctl disable systemd-resolved.service
- [su, -, ubuntu, -c, "git clone https://github.com/gryf/vmstrap"] - echo "nameserver 1.1.1.1" > /etc/resolv.conf
- [su, -, ubuntu, -c, "vmstrap/bootstrap.sh -c"] - apt purge -y snapd
- [rm, -fr, /home/ubuntu/vmstrap] - apt purge -y python3-pyasn1-modules
- [su, -, ubuntu, -c, "echo 'export HOST_IP=192.168.10.10' >> .bashrc"] - apt purge -y python3-simplejson
- [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"] - su - ubuntu -c "git clone https://opendev.org/openstack/devstack"
- [systemctl, restart, systemd-networkd] - su - ubuntu -c "cp /tmp/local.conf /home/ubuntu/devstack/"
- su - ubuntu -c "echo 'export HOST_IP=192.168.10.10' >> .bashrc"
- systemctl restart systemd-networkd
boxpy_data: boxpy_data:
key: vm key: vm
cpus: 4 cpus: 4
memory: 16GB memory: 16GB
disk_size: 50GB disk_size: 50GB
version: 20.04
advanced: advanced:
nic2: intnet nic2: intnet
version: 20.04

View File

@@ -7,7 +7,7 @@ packages:
- ipython3 - ipython3
- jq - jq
- mc - mc
- python-apsw - python3-apsw
- python3-flake8 - python3-flake8
- python3-jedi - python3-jedi
- python3-pip - python3-pip
@@ -79,6 +79,7 @@ write_files:
# Vars # Vars
ADMIN_PASSWORD="secretadmin" ADMIN_PASSWORD="secretadmin"
CONTAINER_ENGINE="crio"
DATABASE_HOST="192.168.10.10" DATABASE_HOST="192.168.10.10"
DATABASE_PASSWORD="secretdatabase" DATABASE_PASSWORD="secretdatabase"
ENABLE_CHASSIS_AS_GW="False" ENABLE_CHASSIS_AS_GW="False"
@@ -89,7 +90,7 @@ write_files:
KURYR_EP_DRIVER_OCTAVIA_PROVIDER="ovn" KURYR_EP_DRIVER_OCTAVIA_PROVIDER="ovn"
KURYR_K8S_OCTAVIA_MEMBER_MODE="L2" KURYR_K8S_OCTAVIA_MEMBER_MODE="L2"
KURYR_LB_ALGORITHM="SOURCE_IP_PORT" KURYR_LB_ALGORITHM="SOURCE_IP_PORT"
KURYR_NEUTRON_DEFAULT_ROUTER="router1" KURYR_NEUTRON_DEFAULT_ROUTER="kuryr-router"
VAR_RUN_PATH="/usr/local/var/run" VAR_RUN_PATH="/usr/local/var/run"
KURYR_ENABLED_HANDLERS="vif,endpoints,service,namespace,pod_label,policy,kuryrnetworkpolicy,kuryrnetwork,kuryrport,kuryrloadbalancer" KURYR_ENABLED_HANDLERS="vif,endpoints,service,namespace,pod_label,policy,kuryrnetworkpolicy,kuryrnetwork,kuryrport,kuryrloadbalancer"
@@ -97,10 +98,11 @@ write_files:
KURYR_SUBNET_DRIVER="namespace" KURYR_SUBNET_DRIVER="namespace"
OVN_BRANCH="v20.06.2" OVN_BRANCH="v21.06.0"
OVN_BUILD_FROM_SOURCE="True" OVN_BUILD_FROM_SOURCE="True"
OVN_DBS_LOG_LEVEL="dbg" OVN_DBS_LOG_LEVEL="dbg"
OVN_L3_CREATE_PUBLIC_NETWORK="True" OVN_L3_CREATE_PUBLIC_NETWORK="True"
OVS_BRANCH="a4b04276ab5934d087669ff2d191a23931335c87"
LIBVIRT_TYPE="qemu" LIBVIRT_TYPE="qemu"
@@ -120,19 +122,21 @@ write_files:
enable_plugin devstack-plugin-container https://opendev.org/openstack/devstack-plugin-container enable_plugin devstack-plugin-container https://opendev.org/openstack/devstack-plugin-container
enable_plugin kuryr-kubernetes https://opendev.org/openstack/kuryr enable_plugin kuryr-kubernetes https://opendev.org/openstack/kuryr
runcmd: runcmd:
- [apt, purge, '-y', python3-pyasn1-modules] - systemctl stop systemd-resolved.service
- [apt, purge, '-y', python3-simplejson] - systemctl disable systemd-resolved.service
- [su, -, ubuntu, -c, "git clone https://github.com/gryf/vmstrap"] - echo "nameserver 1.1.1.1" > /etc/resolv.conf
- [su, -, ubuntu, -c, "vmstrap/bootstrap.sh -c"] - apt purge -y snapd
- [rm, -fr, /home/ubuntu/vmstrap] - apt purge -y python3-pyasn1-modules
- [su, -, ubuntu, -c, "echo 'export HOST_IP=192.168.10.11' >> .bashrc"] - apt purge -y python3-simplejson
- [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"] - su - ubuntu -c "git clone https://opendev.org/openstack/devstack"
- [systemctl, restart, systemd-networkd] - su - ubuntu -c "cp /tmp/local.conf /home/ubuntu/devstack/"
- su - ubuntu -c "echo 'export HOST_IP=192.168.10.11' >> .bashrc"
- systemctl restart systemd-networkd
boxpy_data: boxpy_data:
key: vm key: vm
cpus: 4 cpus: 4
memory: 16GB memory: 16GB
disk_size: 50GB disk_size: 50GB
version: 20.04
advanced: advanced:
nic2: intnet nic2: intnet
version: 20.04

View File

@@ -29,10 +29,10 @@ packages:
- vim-nox - vim-nox
- xinit - xinit
runcmd: runcmd:
- [su, -, ubuntu, -c, "git clone https://github.com/gryf/wmaker -b experimental"] - su - ubuntu -c "git clone https://github.com/gryf/wmaker -b experimental"
- [su, -, ubuntu, -c, "git clone https://github.com/gryf/vmstrap"] - su - ubuntu -c "git clone https://github.com/gryf/vmstrap"
- [su, -, ubuntu, -c, "vmstrap/bootstrap.sh -c"] - su - ubuntu -c "vmstrap/bootstrap.sh -c"
- [rm, -fr, /home/ubuntu/vmstrap] - rm -fr /home/ubuntu/vmstrap
boxpy_data: boxpy_data:
key: vm key: vm
cpus: 4 cpus: 4