Merge "Update dc-cert subcloud status endpoint when subcloud online"
This commit is contained in:
@@ -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,
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user