We are testing kubernetes edge charms as part of the external cloud provider work. Specifically we are testing the autodetection of octavia which is in openstack-integrator charm version 25 (and perhaps earlier).
We upgraded a openstack-integrator charm from version 22 to version 25, we hit two errors.
1. write_text needs converting to bytes:
unit-openstack-integrator-0: 11:15:38 ERROR unit.openstack-integrator/0.juju-log Hook error:
Traceback (most recent call last):
File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/__init__.py", line 73, in main
bus.dispatch(restricted=restricted_mode)
File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/bus.py", line 390, in dispatch
_invoke(other_handlers)
File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/bus.py", line 359, in _invoke
handler.invoke()
File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/bus.py", line 181, in invoke
self._action(*args)
File "/var/lib/juju/agents/unit-openstack-integrator-0/charm/reactive/openstack.py", line 73, in handle_requests
has_octavia = layer.openstack.detect_octavia()
File "lib/charms/layer/openstack.py", line 107, in detect_octavia
catalog = {s['Name'] for s in _openstack('catalog', 'list')}
File "lib/charms/layer/openstack.py", line 221, in _openstack
output = _run_with_creds('openstack', *args, '--format=yaml')
File "lib/charms/layer/openstack.py", line 208, in _run_with_creds
CA_CERT_FILE.write_text(ca_cert + '\n')
TypeError: can't concat str to bytes
This can be fixed with changing this line to: CA_CERT_FILE.write_text(ca_cert.decode('utf-8') + '\n')
2. After this is fixed, the octavia autodetection still fails with:
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm b'openstackclients rocky from James Page refreshed\n'
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm Traceback (most recent call last):
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "/var/lib/juju/agents/unit-openstack-integrator-0/charm/hooks/upgrade-charm", line 22, in <module>
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm main()
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/__init__.py", line 73, in main
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm bus.dispatch(restricted=restricted_mode)
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/bus.py", line 390, in dispatch
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm _invoke(other_handlers)
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/bus.py", line 359, in _invoke
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm handler.invoke()
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "/var/lib/juju/agents/unit-openstack-integrator-0/.venv/lib/python3.6/site-packages/charms/reactive/bus.py", line 181, in invoke
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm self._action(*args)
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "/var/lib/juju/agents/unit-openstack-integrator-0/charm/reactive/openstack.py", line 73, in handle_requests
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm has_octavia = layer.openstack.detect_octavia()
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "lib/charms/layer/openstack.py", line 107, in detect_octavia
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm catalog = {s['Name'] for s in _openstack('catalog', 'list')}
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "lib/charms/layer/openstack.py", line 221, in _openstack
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm output = _run_with_creds('openstack', *args, '--format=yaml')
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "lib/charms/layer/openstack.py", line 216, in _run_with_creds
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm stderr=subprocess.PIPE)
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm File "/usr/lib/python3.6/subprocess.py", line 438, in run
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm output=stdout, stderr=stderr)
unit-openstack-integrator-0: 11:50:58 DEBUG unit.openstack-integrator/0.upgrade-charm subprocess.CalledProcessError: Command '('openstack', 'catalog', 'list', '--format=yaml')' returned non-zero exit status 1.
unit-openstack-integrator-0: 11:50:58 ERROR juju.worker.uniter.operation hook "upgrade-charm" failed: exit status 1
openstack integrator charm version: 25
using configuration for credentials (invidiual fields set rather than the credentials field or juju trust)
Fix for TypeError added to https:/ /github. com/juju- solutions/ charm-openstack -integrator/ pull/20 which also fixes the CalledProcessError. Working on testing.