Merge "Update dc-cert subcloud status endpoint when subcloud online"

This commit is contained in:
Zuul
2020-06-17 22:27:29 +00:00
committed by Gerrit Code Review
3 changed files with 58 additions and 7 deletions

View File

@@ -1060,12 +1060,15 @@ class SubcloudManager(manager.Manager):
raise e
# Only allow updating the sync status if managed and online.
# except dc-cert endpoint is audit only when subcloud is online
# this could happen before subcloud is being managed.
# This means if a subcloud is going offline or unmanaged, then
# the sync status update must be done first.
if (((subcloud.availability_status ==
consts.AVAILABILITY_ONLINE)
and (subcloud.management_state ==
consts.MANAGEMENT_MANAGED))
consts.MANAGEMENT_MANAGED or
endpoint_type == dcorch_consts.ENDPOINT_TYPE_DC_CERT))
or (sync_status != consts.SYNC_STATUS_IN_SYNC)):
# update a single subcloud
@@ -1213,6 +1216,14 @@ class SubcloudManager(manager.Manager):
' update: %s' % subcloud_name)
return
if availability_status == consts.AVAILABILITY_ONLINE:
# Subcloud is going online, we always want the dc-cert
# endpoint to start out as synced.
self._update_subcloud_endpoint_status(
context, subcloud_name,
endpoint_type=dcorch_consts.ENDPOINT_TYPE_DC_CERT,
sync_status=consts.SYNC_STATUS_IN_SYNC)
# Send dcorch a state update
self._update_subcloud_state(context, subcloud_name,
updated_subcloud.management_state,

View File

@@ -73,6 +73,10 @@ FAKE_SERVICES = [
dcorch_consts.ENDPOINT_TYPE_NFV,
5
),
FakeService(
dcorch_consts.ENDPOINT_TYPE_DC_CERT,
6
)
]
@@ -357,7 +361,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
dcorch_consts.ENDPOINT_TYPE_PATCHING,
dcorch_consts.ENDPOINT_TYPE_FM,
dcorch_consts.ENDPOINT_TYPE_NFV]:
dcorch_consts.ENDPOINT_TYPE_NFV,
dcorch_consts.ENDPOINT_TYPE_DC_CERT]:
status = db_api.subcloud_status_create(
self.ctx, subcloud.id, endpoint)
self.assertIsNotNone(status)
@@ -369,7 +374,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
dcorch_consts.ENDPOINT_TYPE_PATCHING,
dcorch_consts.ENDPOINT_TYPE_FM,
dcorch_consts.ENDPOINT_TYPE_NFV]:
dcorch_consts.ENDPOINT_TYPE_NFV,
dcorch_consts.ENDPOINT_TYPE_DC_CERT]:
# Update
sm.update_subcloud_endpoint_status(
self.ctx, subcloud_name=subcloud.name,
@@ -388,7 +394,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
dcorch_consts.ENDPOINT_TYPE_PATCHING,
dcorch_consts.ENDPOINT_TYPE_FM,
dcorch_consts.ENDPOINT_TYPE_NFV]:
dcorch_consts.ENDPOINT_TYPE_NFV,
dcorch_consts.ENDPOINT_TYPE_DC_CERT]:
sm.update_subcloud_endpoint_status(
self.ctx, subcloud_name=subcloud.name,
endpoint_type=endpoint,
@@ -431,6 +438,19 @@ class TestSubcloudManager(base.DCManagerTestCase):
self.assertEqual(updated_subcloud_status.sync_status,
consts.SYNC_STATUS_OUT_OF_SYNC)
endpoint = dcorch_consts.ENDPOINT_TYPE_DC_CERT
sm.update_subcloud_endpoint_status(
self.ctx, subcloud_name=subcloud.name,
endpoint_type=endpoint,
sync_status=consts.SYNC_STATUS_IN_SYNC)
updated_subcloud_status = db_api.subcloud_status_get(
self.ctx, subcloud.id, endpoint)
self.assertIsNotNone(updated_subcloud_status)
# No change in status: Only online/managed clouds are updated
self.assertEqual(updated_subcloud_status.sync_status,
consts.SYNC_STATUS_IN_SYNC)
# Set/verify the subcloud is online/managed
db_api.subcloud_update(
self.ctx, subcloud.id,
@@ -448,7 +468,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
dcorch_consts.ENDPOINT_TYPE_PATCHING,
dcorch_consts.ENDPOINT_TYPE_FM,
dcorch_consts.ENDPOINT_TYPE_NFV]:
dcorch_consts.ENDPOINT_TYPE_NFV,
dcorch_consts.ENDPOINT_TYPE_DC_CERT]:
sm.update_subcloud_endpoint_status(
self.ctx, subcloud_name=subcloud.name,
endpoint_type=endpoint,
@@ -467,7 +488,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
dcorch_consts.ENDPOINT_TYPE_PATCHING,
dcorch_consts.ENDPOINT_TYPE_FM,
dcorch_consts.ENDPOINT_TYPE_NFV]:
dcorch_consts.ENDPOINT_TYPE_NFV,
dcorch_consts.ENDPOINT_TYPE_DC_CERT]:
sm.update_subcloud_endpoint_status(
self.ctx, subcloud_name=subcloud.name,
endpoint_type=endpoint,
@@ -485,11 +507,27 @@ class TestSubcloudManager(base.DCManagerTestCase):
def test_update_subcloud_availability_go_online(self):
# create a subcloud
subcloud = self.create_subcloud_static(self.ctx, name='subcloud1')
self.assertIsNotNone(subcloud)
self.assertEqual(subcloud.availability_status,
consts.AVAILABILITY_OFFLINE)
sm = subcloud_manager.SubcloudManager()
db_api.subcloud_update(self.ctx, subcloud.id,
management_state=consts.MANAGEMENT_MANAGED)
# create sync statuses for endpoints
for endpoint in [dcorch_consts.ENDPOINT_TYPE_PLATFORM,
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
dcorch_consts.ENDPOINT_TYPE_PATCHING,
dcorch_consts.ENDPOINT_TYPE_FM,
dcorch_consts.ENDPOINT_TYPE_NFV,
dcorch_consts.ENDPOINT_TYPE_DC_CERT]:
status = db_api.subcloud_status_create(
self.ctx, subcloud.id, endpoint)
self.assertIsNotNone(status)
self.assertEqual(status.sync_status, consts.SYNC_STATUS_UNKNOWN)
sm.update_subcloud_availability(self.ctx, subcloud.name,
consts.AVAILABILITY_ONLINE)

View File

@@ -128,12 +128,14 @@ ENDPOINT_TYPE_IDENTITY = "identity"
ENDPOINT_TYPE_FM = "faultmanagement"
ENDPOINT_TYPE_NFV = "nfv"
ENDPOINT_TYPE_LOAD = "load"
ENDPOINT_TYPE_DC_CERT = 'dc-cert'
# All endpoint types
ENDPOINT_TYPES_LIST = [ENDPOINT_TYPE_PLATFORM,
ENDPOINT_TYPE_PATCHING,
ENDPOINT_TYPE_IDENTITY,
ENDPOINT_TYPE_LOAD]
ENDPOINT_TYPE_LOAD,
ENDPOINT_TYPE_DC_CERT]
# Dcorch sync endpoint types
SYNC_ENDPOINT_TYPES_LIST = [ENDPOINT_TYPE_PLATFORM,