[DNM] Operator test

Signed-off-by: Ruslan Aliev <raliev@mirantis.com>
Change-Id: I76fb41062d152bf360a85d781c19ab5b204769b8
This commit is contained in:
Ruslan Aliev 2023-11-07 23:50:43 -06:00
parent 5df69442b0
commit 8f3a758857
3 changed files with 117 additions and 28 deletions

View File

@ -122,7 +122,7 @@ class Armada(object):
# TODO: (gardlt) we need to break up this func into
# a more cleaner format
self.pre_flight_ops()
#self.pre_flight_ops()
manifest_data = self.manifest.get(const.KEYWORD_DATA, {})
prefix = manifest_data.get(const.KEYWORD_PREFIX)

View File

@ -60,6 +60,8 @@ class ChartDeploy(object):
release = chart.get('release')
release_name = r.release_prefixer(prefix, release)
release_id = helm.HelmReleaseId(namespace, release_name)
LOG.info('Processing raw chart %s', ch)
LOG.info('Processing raw manifest %s', self.manifest)
source_dir = chart['source_dir']
source_directory = os.path.join(*source_dir)
LOG.info('Processing Chart, release=%s', release_id)
@ -151,14 +153,42 @@ class ChartDeploy(object):
LOG.info(
"Upgrading release=%s, wait=%s, "
"timeout=%ss", release_id, native_wait_enabled, timer)
self.helm.upgrade_release(
source_directory,
release_id,
disable_hooks=disable_hooks,
values=values,
wait=native_wait_enabled,
timeout=timer,
force=force)
self.helm.k8s.patch_custom_resource(
"armada.airshipit.io",
"v1",
release_id.namespace,
"armadacharts",
release_id.name,
{
'apiVersion': 'armada.airshipit.io/v1',
'kind': 'ArmadaChart',
'metadata': {
'labels': {
'armada.airshipit.io/release-name': release_id.name
},
'name': release_id.name,
'namespace': release_id.namespace,
'data': {
'chart_name': chart_name,
'namespace': namespace,
'release': release_id.name,
'source': {
'location': chart['source']['location'],
},
'values': values,
'wait': chart.get('wait', {})
}
}
}
)
# self.helm.upgrade_release(
# source_directory,
# release_id,
# disable_hooks=disable_hooks,
# values=values,
# wait=native_wait_enabled,
# timeout=timer,
# force=force)
LOG.info('Upgrade completed')
result['upgrade'] = release_id
@ -171,12 +201,42 @@ class ChartDeploy(object):
LOG.info(
"Installing release=%s, wait=%s, "
"timeout=%ss", release_id, native_wait_enabled, timer)
self.helm.install_release(
source_directory,
release_id,
values=values,
wait=native_wait_enabled,
timeout=timer)
self.helm.k8s.create_custom_resource(
"armada.airshipit.io",
"v1",
release_id.namespace,
"armadacharts",
{
'apiVersion': 'armada.airshipit.io/v1',
'kind': 'ArmadaChart',
'metadata': {
'labels': {
'armada.airshipit.io/release-name': release_id.name
},
'name': release_id.name,
'namespace': release_id.namespace,
'data': {
'chart_name': chart_name,
'namespace': namespace,
'release': release_id.name,
'source': {
'location': chart['source']['location'],
},
'values': values,
'wait': chart.get('wait', {})
}
}
}
)
# self.helm.install_release(
# source_directory,
# release_id,
# values=values,
# wait=native_wait_enabled,
# timeout=timer)
LOG.info('Install completed')
result['install'] = release_id
@ -240,21 +300,27 @@ class ChartDeploy(object):
# Wait
timer = int(round(deadline - time.time()))
chart_wait.wait(timer)
LOG.info('Starting to wait')
self.helm.k8s.wait_custom_resource("armada.airshipit.io",
"v1",
release_id.namespace,
"armadacharts",
"armada.airshipit.io/release-name="+release_id.name)
#chart_wait.wait(timer)
# Test
just_deployed = ('install' in result) or ('upgrade' in result)
last_test_passed = old_release and r.get_last_test_result(old_release)
test_handler = Test(
chart, release_id, self.helm, cg_test_charts=cg_test_all_charts)
run_test = test_handler.test_enabled and (
just_deployed or not last_test_passed)
if run_test:
with metrics.CHART_TEST.get_context(test_handler.timeout,
manifest_name, chart_name):
self._test_chart(test_handler)
# just_deployed = ('install' in result) or ('upgrade' in result)
# last_test_passed = old_release and r.get_last_test_result(old_release)
#
# test_handler = Test(
# chart, release_id, self.helm, cg_test_charts=cg_test_all_charts)
#
# run_test = test_handler.test_enabled and (
# just_deployed or not last_test_passed)
# if run_test:
# with metrics.CHART_TEST.get_context(test_handler.timeout,
# manifest_name, chart_name):
# self._test_chart(test_handler)
return result

View File

@ -24,6 +24,7 @@ from oslo_log import log as logging
from armada.const import DEFAULT_K8S_TIMEOUT
from armada.exceptions import k8s_exceptions as exceptions
from armada.exceptions import armada_exceptions
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
@ -436,3 +437,25 @@ class K8s(object):
"""
return self.custom_objects.replace_namespaced_custom_object(
group, version, namespace, plural, name, body)
def patch_custom_resource(
self, group, version, namespace, plural, name, body):
return self.custom_objects.patch_namespaced_custom_object(
group, version, namespace, plural, name, body)
def wait_custom_resource(
self, group, version, namespace, plural, label, timeout=10):
w = watch.Watch()
for event in w.stream(self.custom_objects.list_namespaced_custom_object,
group, version, namespace, plural,
label_selector=label,
timeout_seconds=timeout):
resource_name = event['object'].metadata.name
conds = event['object'].status.contiditions
for cond in conds:
if cond.type == "Ready" and cond.status == "True":
LOG.warn('Resource '' is ready %s', resource_name)
return
raise armada_exceptions.ArmadaTimeoutException('Resource with label '' is not ready %s', label)