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

14 Commits

Author SHA1 Message Date
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
259d11e409 Don't reset Debian Bookworm on first run.
Issue/glitch with kernel panic on first run seems to be fixed on Debian
Bookworm (12). Do not reset VM for that version (and hopefully
upcoming).
2023-04-20 17:01:57 +02:00
b2457d497e Add experimental Debian support.
Note, there is something weird with those images, as the will segfault
on the first run (I've checked that with latest Debian 11 images, maybe
it will change in the future), so there is forced reboot after certain
amount of time as a workaround.
2023-04-18 21:48:19 +02:00
15a6ecb540 Use predefined os types for vbox VMs.
It might have impact on how operating system inside VM is treated by
VirtualBox, so let's stick with proper distro for every OS. As an
outcome, it turns out, that for graphical side of the vm, for Linux OS
the vmsvga driver is recommended, as a little more amount of vram.
2023-04-18 21:39:56 +02:00
10543cb506 Don't create vm till it's still there during rebuild 2023-04-02 10:05:06 +02:00
1f1084f294 Readme update. 2023-02-26 19:20:11 +01:00
f5ed3d37ac readme update 2023-02-22 21:10:59 +01:00
1483f49461 Added debug info about ssh connection to the vm 2023-02-22 21:08:43 +01:00
f0282874f8 Added information regarding url for the dl image 2023-02-12 11:45:50 +01:00
4db0b422b8 Added missing fname from Centos class constructor 2023-02-12 11:45:19 +01:00
c3ee529d95 Make 22.04 default version for ubuntu. 2022-12-24 12:29:49 +01:00
6 changed files with 230 additions and 89 deletions

View File

@@ -2,8 +2,8 @@
box.py box.py
====== ======
Box.py is a simple automation tool meant to run Ubuntu, Fedora or Centos Stream Box.py is a simple automation tool meant to run Ubuntu, Fedora, Centos Stream
cloud images on top of VirtualBox. or Debian cloud images on top of VirtualBox.
What it does is simply download official cloud image, set up VM, tweak it up What it does is simply download official cloud image, set up VM, tweak it up
and do the initial pre-configuration using generated config drive. and do the initial pre-configuration using generated config drive.
@@ -16,7 +16,7 @@ weird named options for ``vboxmanage`` ;P)
Requirements Requirements
------------ ------------
- Python >=3.7 - Python >=3.8
- `pyyaml`_ - `pyyaml`_
- `requests`_ - `requests`_
@@ -24,7 +24,7 @@ Requirements
- Virtualbox (obviously) - Virtualbox (obviously)
- ``mkisofs`` or ``genisoimage`` command for generating ISO image - ``mkisofs`` or ``genisoimage`` command for generating ISO image
- ``wget`` command for fetching images - ``wget`` command for fetching images
- ``sha256sum`` command for checksum check - ``sha256sum`` and ``sha512sum`` commands for checksum check
- ``qemu-img`` from *qemu-utils* package command for converting between images - ``qemu-img`` from *qemu-utils* package command for converting between images
formats formats
@@ -39,7 +39,7 @@ your operating system, or by using virtualenv for Python requirements, i.e.:
$ python -m virtualenv .venv $ python -m virtualenv .venv
$ . .venv/bin/activate $ . .venv/bin/activate
(.venv) $ pip install requirements.txt (.venv) $ pip install -r requirements.txt
then you can issue: then you can issue:
@@ -91,13 +91,15 @@ use it ad-hoc, or place on your ``.bashrc`` or whatever:
Currently, following commands are available: Currently, following commands are available:
- ``list`` - for quickly listing all/running VMs - ``completion`` - as described above
- ``info`` - to get summary about VM
- ``destroy`` - that is probably obvious one
- ``create`` - create new VM - ``create`` - create new VM
- ``destroy`` - that is probably obvious one
- ``info`` - to get summary about VM
- ``list`` - for quickly listing all/running VMs
- ``rebuild`` - recreate specified VM - ``rebuild`` - recreate specified VM
- ``ssh`` - connect to the VM using ssh - ``ssh`` - connect to the VM using ssh
- ``completion`` - as described above - ``start`` - stop the running VM
- ``stop`` - start stopped VM
All of the commands have a range of options, and can be examined by using All of the commands have a range of options, and can be examined by using
``--help`` option. ``--help`` option.

184
box.py
View File

@@ -18,14 +18,16 @@ 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 = {'32': '1.6', '33': '1.2', '34': '1.2', '35': '1.2',
'36': '1.5', '37': '1.7', '38': '1.6'}
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',
'centos': 'Centos Stream'} 'centos': 'Centos Stream', 'debian': 'Debian'}
META_DATA_TPL = string.Template('''\ META_DATA_TPL = string.Template('''\
instance-id: $instance_id instance-id: $instance_id
local-hostname: $vmhostname local-hostname: $vmhostname
@@ -136,13 +138,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}) )
@@ -160,8 +186,8 @@ _boxpy() {
_ssh_identityfile _ssh_identityfile
;; ;;
--distro) --distro)
COMPREPLY=( $(compgen -W "ubuntu fedora centos" \ COMPREPLY=( $(compgen -W "ubuntu fedora centos
-- ${cur}) ) debian" -- ${cur}) )
;; ;;
--type) --type)
COMPREPLY=( $(compgen -W "gui headless sdl separate" \ COMPREPLY=( $(compgen -W "gui headless sdl separate" \
@@ -194,11 +220,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
@@ -585,6 +606,50 @@ class Config:
return source return source
class OsTypes:
def __init__(self, conf):
self._conf = conf
self._ostypes = []
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"
def debian(self):
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:
""" """
Class for dealing with vboxmanage commands Class for dealing with vboxmanage commands
@@ -765,7 +830,11 @@ class VBoxManage:
'--acpi', 'on', '--acpi', 'on',
'--audio', 'none', '--audio', 'none',
'--nic1', 'nat', '--nic1', 'nat',
'--natpf1', f'boxpyssh,tcp,,{port},,22'] '--natpf1', f'boxpyssh,tcp,,{port},,22',
'--graphicscontroller', 'vmsvga',
'--vram', '16',
'--ostype', OsTypes(conf).get()]
for count, (hostport, vmport) in enumerate(conf.forwarding.items(), for count, (hostport, vmport) in enumerate(conf.forwarding.items(),
start=1): start=1):
cmd.extend(['--natpf1', f'custom-pf-{count},tcp,,{hostport},' cmd.extend(['--natpf1', f'custom-pf-{count},tcp,,{hostport},'
@@ -914,6 +983,7 @@ class VBoxManage:
class Image: class Image:
URL = "" URL = ""
IMG = "" IMG = ""
CHECKSUMTOOL = 'sha256sum'
def __init__(self, vbox, version, arch, release, fname=None): def __init__(self, vbox, version, arch, release, fname=None):
self.vbox = vbox self.vbox = vbox
@@ -964,7 +1034,7 @@ class Image:
return False return False
if os.path.exists(os.path.join(CACHE_DIR, self._img_fname)): if os.path.exists(os.path.join(CACHE_DIR, self._img_fname)):
cmd = ['sha256sum', os.path.join(CACHE_DIR, self._img_fname)] cmd = [self.CHECKSUMTOOL, os.path.join(CACHE_DIR, self._img_fname)]
calulated_sum = Run(cmd).stdout.split(' ')[0] calulated_sum = Run(cmd).stdout.split(' ')[0]
LOG.details('Checksum for image: %s, expected: %s', calulated_sum, LOG.details('Checksum for image: %s, expected: %s', calulated_sum,
expected_sum) expected_sum)
@@ -978,7 +1048,8 @@ class Image:
return True return True
fname = os.path.join(CACHE_DIR, self._img_fname) fname = os.path.join(CACHE_DIR, self._img_fname)
LOG.header('Downloading image %s', self._img_fname) LOG.header('Downloading image %s from %s', self._img_fname,
self._img_url)
Run(['wget', '-q', self._img_url, '-O', fname]) Run(['wget', '-q', self._img_url, '-O', fname])
if not self._checksum(): if not self._checksum():
@@ -1016,6 +1087,30 @@ class Ubuntu(Image):
return expected_sum return expected_sum
class Debian(Image):
URL = "https://cloud.debian.org/images/cloud/%s/daily/latest/%s"
IMG = "debian-%s-generic-%s-daily.qcow2"
CHECKSUMTOOL = 'sha512sum'
def __init__(self, vbox, version, arch, release, fname=None):
super().__init__(vbox, version, arch, release)
self._img_fname = self.IMG % (version, arch)
self._img_url = self.URL % (release, self._img_fname)
self._checksum_file = 'SHA512SUMS'
self._checksum_url = self.URL % (release, self._checksum_file)
def _get_checksum(self, fname):
expected_sum = None
Run(['wget', self._checksum_url, '-q', '-O', fname])
with open(fname) as fobj:
for line in fobj.readlines():
if self._img_fname in line:
expected_sum = line.split(' ')[0]
break
return expected_sum
class Fedora(Image): class Fedora(Image):
URL = ("https://download.fedoraproject.org/pub/fedora/linux/releases/%s/" URL = ("https://download.fedoraproject.org/pub/fedora/linux/releases/%s/"
"Cloud/%s/images/%s") "Cloud/%s/images/%s")
@@ -1048,7 +1143,7 @@ class CentosStream(Image):
IMG = '.*(CentOS-Stream-GenericCloud-%s-[0-9]+.[0-9].%s.qcow2).*' IMG = '.*(CentOS-Stream-GenericCloud-%s-[0-9]+.[0-9].%s.qcow2).*'
CHKS = "CHECKSUM" CHKS = "CHECKSUM"
def __init__(self, vbox, version, arch, release): def __init__(self, vbox, version, arch, release, fname=None):
super().__init__(vbox, version, arch, release) super().__init__(vbox, version, arch, release)
self._checksum_file = '%s-centos-stream-%s-%s' % (self.CHKS, version, self._checksum_file = '%s-centos-stream-%s-%s' % (self.CHKS, version,
arch) arch)
@@ -1104,23 +1199,30 @@ DISTROS = {'ubuntu': {'username': 'ubuntu',
'realname': 'ubuntu', 'realname': 'ubuntu',
'img_class': Ubuntu, 'img_class': Ubuntu,
'amd64': 'amd64', 'amd64': 'amd64',
'default_version': '20.04'}, 'default_version': '22.04'},
'fedora': {'username': 'fedora', 'fedora': {'username': 'fedora',
'realname': 'fedora', 'realname': 'fedora',
'img_class': Fedora, 'img_class': Fedora,
'amd64': 'x86_64', 'amd64': 'x86_64',
'default_version': '34'}, 'default_version': '38'},
'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',
'realname': 'debian',
'img_class': Debian,
'amd64': 'amd64',
'default_version': '12'}}
def get_image_object(vbox, version, image='ubuntu', arch='amd64'): def get_image_object(vbox, version, image='ubuntu', arch='amd64'):
release = None release = None
if image == 'fedora': if image == 'fedora':
release = FEDORA_RELEASE_MAP[version] release = FEDORA_RELEASE_MAP[version]
if image == 'debian':
release = DEBIAN_CODENAME_MAP[version]
return DISTROS[image]['img_class'](vbox, version, DISTROS[image]['amd64'], return DISTROS[image]['img_class'](vbox, version, DISTROS[image]['amd64'],
release, DISTROS[image].get('image')) release, DISTROS[image].get('image'))
@@ -1246,6 +1348,7 @@ def vmcreate(args, conf=None):
f'ssh://{username}@localhost:{vbox.vm_info["port"]}', f'ssh://{username}@localhost:{vbox.vm_info["port"]}',
'sudo cloud-init status'] 'sudo cloud-init status']
try: try:
counter = 0
while True: while True:
out = Run(cmd) out = Run(cmd)
LOG.debug('Out: %s', out.stdout) LOG.debug('Out: %s', out.stdout)
@@ -1265,6 +1368,22 @@ def vmcreate(args, conf=None):
f'VM with ssh for user {username}. ' f'VM with ssh for user {username}. '
f'Check output in debug mode.') f'Check output in debug mode.')
time.sleep(3) time.sleep(3)
counter += 1
# TODO: there is something odd with debian cloud images prior
# to 12 (bookworm), as on first run system crashes. In that
# case after ~20 seconds there should already be panic, reset
# machine as a workaround. Remove this after debian 12
# stabilization later this year.
if (counter == 8 and conf.distro == 'debian'
and conf.version != '12'):
LOG.debug('Resetting `%s`, due to the issue with kernel '
'panic on Debian %s the first run', conf.name,
conf.version)
counter += 1
vbox.poweroff()
time.sleep(3)
vbox.poweron(args.type)
continue continue
LOG.info(' done') LOG.info(' done')
@@ -1444,6 +1563,13 @@ def vmrebuild(args):
conf.disk_size = vbox.get_media_size(disk_path) conf.disk_size = vbox.get_media_size(disk_path)
vmdestroy(args) vmdestroy(args)
# Wait till VM is gone
while True:
vbox = VBoxManage(args.name)
if not vbox.get_vm_info():
break
vmcreate(args, conf) vmcreate(args, conf)
return 0 return 0
@@ -1469,14 +1595,17 @@ def connect(args):
return 16 return 16
username = conf.username or DISTROS[conf.distro]["username"] username = conf.username or DISTROS[conf.distro]["username"]
return Run(['ssh', '-o', 'StrictHostKeyChecking=no', cmd = ['ssh', '-o', 'StrictHostKeyChecking=no',
'-o', 'UserKnownHostsFile=/dev/null', '-o', 'UserKnownHostsFile=/dev/null',
'-i', conf.ssh_key_path[:-4], '-i', conf.ssh_key_path[:-4],
f'ssh://{username}' f'ssh://{username}'
f'@localhost:{conf.port}'], False).returncode f'@localhost:{conf.port}']
LOG.debug('Connecting to vm `%s` using command:\n%s', args.name,
' '.join(cmd))
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():
@@ -1492,13 +1621,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):
@@ -1613,6 +1742,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

@@ -29,7 +29,7 @@ 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://github.com/gryf/vmstrap"]
- [su, -, ubuntu, -c, "vmstrap/bootstrap.sh"] - [su, -, ubuntu, -c, "vmstrap/bootstrap.sh -c"]
- [rm, -fr, /home/ubuntu/vmstrap] - [rm, -fr, /home/ubuntu/vmstrap]
- [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"] - [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"]
- [su, -, ubuntu, -c, "echo 'export HOST_IP=10.0.2.15' >> .bashrc"] - [su, -, ubuntu, -c, "echo 'export HOST_IP=10.0.2.15' >> .bashrc"]

View File

@@ -34,55 +34,55 @@ write_files:
content: | content: |
[[local|localrc]] [[local|localrc]]
disable_all_services disable_all_services
# Cinder # Cinder
disable_service c-api disable_service c-api
disable_service c-bak disable_service c-bak
disable_service c-sch disable_service c-sch
disable_service c-vol disable_service c-vol
disable_service cinder disable_service cinder
# Coredns # Coredns
disable_service coredns disable_service coredns
# Dstat # Dstat
disable_service dstat disable_service dstat
# ETCD # ETCD
enable_service etcd3 enable_service etcd3
# Glance # Glance
enable_service g-api enable_service g-api
enable_service g-reg enable_service g-reg
# Horizon # Horizon
disable_service horizon disable_service horizon
# Keystone # Keystone
enable_service key enable_service key
# kubernetes # kubernetes
enable_service kubernetes-master enable_service kubernetes-master
disable_service kubernetes-worker disable_service kubernetes-worker
# kuryr # kuryr
enable_service kuryr-daemon enable_service kuryr-daemon
enable_service kuryr-kubernetes enable_service kuryr-kubernetes
# mysql. # mysql.
enable_service mysql enable_service mysql
# Nova services # Nova services
enable_service n-api enable_service n-api
enable_service n-api-meta enable_service n-api-meta
enable_service n-cond enable_service n-cond
enable_service n-cpu enable_service n-cpu
enable_service n-sch enable_service n-sch
# Neutron # Neutron
enable_service neutron enable_service neutron
enable_service neutron-tag-ports-during-bulk-creation enable_service neutron-tag-ports-during-bulk-creation
# Octavia # Octavia
enable_service o-api enable_service o-api
enable_service o-cw enable_service o-cw
@@ -90,41 +90,41 @@ write_files:
enable_service o-hk enable_service o-hk
enable_service o-hm enable_service o-hm
enable_service octavia enable_service octavia
# Neutron ovn services # Neutron ovn services
enable_service ovn-controller enable_service ovn-controller
enable_service ovn-northd enable_service ovn-northd
enable_service ovs-vswitchd enable_service ovs-vswitchd
enable_service ovsdb-server enable_service ovsdb-server
# Placement API # Placement API
enable_service placement-api enable_service placement-api
enable_service placement-client enable_service placement-client
# Neutron services # Neutron services
enable_service q-ovn-metadata-agent enable_service q-ovn-metadata-agent
enable_service q-qos enable_service q-qos
enable_service q-svc enable_service q-svc
enable_service q-trunk enable_service q-trunk
enable_service rabbit enable_service rabbit
# Swift # Swift
disable_service s-account disable_service s-account
disable_service s-container disable_service s-container
disable_service s-object disable_service s-object
disable_service s-proxy disable_service s-proxy
# Tempest # Tempest
enable_service tempest enable_service tempest
# TLS # TLS
disable_service tls-proxy disable_service tls-proxy
# Vars # Vars
ADMIN_PASSWORD="secretadmin" ADMIN_PASSWORD="secretadmin"
DATABASE_PASSWORD="secretdatabase" DATABASE_PASSWORD="secretdatabase"
ETCD_USE_RAMDISK="True" ETCD_USE_RAMDISK="True"
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"
KURYR_ENFORCE_SG_RULES="False" KURYR_ENFORCE_SG_RULES="False"
KURYR_EP_DRIVER_OCTAVIA_PROVIDER="ovn" KURYR_EP_DRIVER_OCTAVIA_PROVIDER="ovn"
@@ -134,30 +134,30 @@ write_files:
KURYR_NEUTRON_DEFAULT_ROUTER="router1" KURYR_NEUTRON_DEFAULT_ROUTER="router1"
KURYR_SG_DRIVER="policy" KURYR_SG_DRIVER="policy"
KURYR_SUBNET_DRIVER="namespace" KURYR_SUBNET_DRIVER="namespace"
LOGFILE="/opt/stack/logs/devstacklog.txt" LOGFILE="/opt/stack/logs/devstacklog.txt"
LOG_COLOR="False" LOG_COLOR="False"
ML2_L3_PLUGIN="ovn-router,trunk,qos" ML2_L3_PLUGIN="ovn-router,trunk,qos"
OCTAVIA_AMP_IMAGE_FILE="/tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2" OCTAVIA_AMP_IMAGE_FILE="/tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2"
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="v20.06.2"
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"
VAR_RUN_PATH="/usr/local/var/run" VAR_RUN_PATH="/usr/local/var/run"
RABBIT_PASSWORD="secretrabbit" RABBIT_PASSWORD="secretrabbit"
RECLONE="no" RECLONE="no"
SERVICE_PASSWORD="secretservice" SERVICE_PASSWORD="secretservice"
SERVICE_TOKEN="password" SERVICE_TOKEN="password"
LIBS_FROM_GIT=cinder,devstack,devstack-gate,devstack-plugin-container,glance,keystone,kuryr-kubernetes,kuryr-tempest-plugin,neutron,nova,octavia,octavia-tempest-plugin,ovn-octavia-provider,placement,python-octaviaclient,requirements,swift,tempest LIBS_FROM_GIT=cinder,devstack,devstack-gate,devstack-plugin-container,glance,keystone,kuryr-kubernetes,kuryr-tempest-plugin,neutron,nova,octavia,octavia-tempest-plugin,ovn-octavia-provider,placement,python-octaviaclient,requirements,swift,tempest
TEMPEST_PLUGINS="/opt/stack/kuryr-tempest-plugin /opt/stack/octavia-tempest-plugin" TEMPEST_PLUGINS="/opt/stack/kuryr-tempest-plugin /opt/stack/octavia-tempest-plugin"
# enabled plugins # enabled plugins
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-kubernetes enable_plugin kuryr-kubernetes https://opendev.org/openstack/kuryr-kubernetes
@@ -166,7 +166,7 @@ write_files:
enable_plugin octavia https://opendev.org/openstack/octavia enable_plugin octavia https://opendev.org/openstack/octavia
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'
@@ -174,7 +174,7 @@ 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://github.com/gryf/vmstrap"]
- [su, -, ubuntu, -c, "vmstrap/bootstrap.sh"] - [su, -, ubuntu, -c, "vmstrap/bootstrap.sh -c"]
- [rm, -fr, /home/ubuntu/vmstrap] - [rm, -fr, /home/ubuntu/vmstrap]
- [su, -, ubuntu, -c, "echo 'export HOST_IP=192.168.10.10' >> .bashrc"] - [su, -, ubuntu, -c, "echo 'export HOST_IP=192.168.10.10' >> .bashrc"]
- [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"] - [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"]
@@ -186,3 +186,4 @@ boxpy_data:
disk_size: 50GB disk_size: 50GB
advanced: advanced:
nic2: intnet nic2: intnet
version: 20.04

View File

@@ -34,28 +34,28 @@ write_files:
content: | content: |
[[local|localrc]] [[local|localrc]]
disable_all_services disable_all_services
# Cinder # Cinder
disable_service c-bak disable_service c-bak
disable_service c-vol disable_service c-vol
# Dstat (started to fail recently) # Dstat (started to fail recently)
disable_service dstat disable_service dstat
# Horizon # Horizon
disable_service horizon disable_service horizon
# kubernetes # kubernetes
disable_service kubernetes-master disable_service kubernetes-master
enable_service kubernetes-worker enable_service kubernetes-worker
# kuryr # kuryr
enable_service kuryr-daemon enable_service kuryr-daemon
disable_service kuryr-kubernetes disable_service kuryr-kubernetes
# Nova # Nova
enable_service n-cpu enable_service n-cpu
# Neutron # Neutron
enable_service neutron enable_service neutron
enable_service ovn-controller enable_service ovn-controller
@@ -63,27 +63,27 @@ write_files:
enable_service ovn-octavia-provider enable_service ovn-octavia-provider
enable_service ovs-vswitchd enable_service ovs-vswitchd
enable_service ovsdb-server enable_service ovsdb-server
# Placement API # Placement API
enable_service placement-client enable_service placement-client
# Neutron services cd # Neutron services cd
enable_service q-ovn-metadata-agent enable_service q-ovn-metadata-agent
disable_service q-svc disable_service q-svc
# tempest # tempest
disable_service tempest disable_service tempest
# tls # tls
disable_service tls-proxy disable_service tls-proxy
# Vars # Vars
ADMIN_PASSWORD="secretadmin" ADMIN_PASSWORD="secretadmin"
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"
GLANCE_HOSTPORT="192.168.10.10:9292" GLANCE_HOSTPORT="192.168.10.10:9292"
# turn on ovn-provider # turn on ovn-provider
KURYR_ENFORCE_SG_RULES="False" KURYR_ENFORCE_SG_RULES="False"
KURYR_EP_DRIVER_OCTAVIA_PROVIDER="ovn" KURYR_EP_DRIVER_OCTAVIA_PROVIDER="ovn"
@@ -91,18 +91,18 @@ write_files:
KURYR_LB_ALGORITHM="SOURCE_IP_PORT" KURYR_LB_ALGORITHM="SOURCE_IP_PORT"
KURYR_NEUTRON_DEFAULT_ROUTER="router1" KURYR_NEUTRON_DEFAULT_ROUTER="router1"
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"
KURYR_SG_DRIVER="policy" KURYR_SG_DRIVER="policy"
KURYR_SUBNET_DRIVER="namespace" KURYR_SUBNET_DRIVER="namespace"
OVN_BRANCH="v20.06.2" OVN_BRANCH="v20.06.2"
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"
LIBVIRT_TYPE="qemu" LIBVIRT_TYPE="qemu"
LOGFILE="/opt/stack/logs/devstacklog.txt" LOGFILE="/opt/stack/logs/devstacklog.txt"
LOG_COLOR="False" LOG_COLOR="False"
@@ -113,9 +113,9 @@ write_files:
SERVICE_HOST="192.168.10.10" SERVICE_HOST="192.168.10.10"
SERVICE_PASSWORD="secretservice" SERVICE_PASSWORD="secretservice"
SERVICE_TOKEN="password" SERVICE_TOKEN="password"
LIBS_FROM_GIT=cinder,devstack,devstack-gate,devstack-plugin-container,glance,keystone,kuryr-kubernetes,kuryr-tempest-plugin,neutron,nova,octavia,placement,python-octaviaclient,requirements,swift,tempest LIBS_FROM_GIT=cinder,devstack,devstack-gate,devstack-plugin-container,glance,keystone,kuryr-kubernetes,kuryr-tempest-plugin,neutron,nova,octavia,placement,python-octaviaclient,requirements,swift,tempest
# enabled plugins # enabled plugins
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
@@ -123,7 +123,7 @@ 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://github.com/gryf/vmstrap"]
- [su, -, ubuntu, -c, "vmstrap/bootstrap.sh"] - [su, -, ubuntu, -c, "vmstrap/bootstrap.sh -c"]
- [rm, -fr, /home/ubuntu/vmstrap] - [rm, -fr, /home/ubuntu/vmstrap]
- [su, -, ubuntu, -c, "echo 'export HOST_IP=192.168.10.11' >> .bashrc"] - [su, -, ubuntu, -c, "echo 'export HOST_IP=192.168.10.11' >> .bashrc"]
- [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"] - [su, -, ubuntu, -c, "cp /tmp/local.conf /home/ubuntu/devstack/"]
@@ -135,3 +135,4 @@ boxpy_data:
disk_size: 50GB disk_size: 50GB
advanced: advanced:
nic2: intnet nic2: intnet
version: 20.04

View File

@@ -1,5 +1,6 @@
packages: packages:
- build-essential - build-essential
- exuberant-ctags
- gettext - gettext
- libfontconfig1-dev - libfontconfig1-dev
- libgif-dev - libgif-dev
@@ -21,12 +22,16 @@ packages:
- libxrender-dev - libxrender-dev
- libxt-dev - libxt-dev
- make - make
- mc
- sharutils - sharutils
- silversearcher-ag
- tmux
- 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"] - [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