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
|
raise e
|
||||||
|
|
||||||
# Only allow updating the sync status if managed and online.
|
# 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
|
# This means if a subcloud is going offline or unmanaged, then
|
||||||
# the sync status update must be done first.
|
# the sync status update must be done first.
|
||||||
if (((subcloud.availability_status ==
|
if (((subcloud.availability_status ==
|
||||||
consts.AVAILABILITY_ONLINE)
|
consts.AVAILABILITY_ONLINE)
|
||||||
and (subcloud.management_state ==
|
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)):
|
or (sync_status != consts.SYNC_STATUS_IN_SYNC)):
|
||||||
|
|
||||||
# update a single subcloud
|
# update a single subcloud
|
||||||
@@ -1213,6 +1216,14 @@ class SubcloudManager(manager.Manager):
|
|||||||
' update: %s' % subcloud_name)
|
' update: %s' % subcloud_name)
|
||||||
return
|
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
|
# Send dcorch a state update
|
||||||
self._update_subcloud_state(context, subcloud_name,
|
self._update_subcloud_state(context, subcloud_name,
|
||||||
updated_subcloud.management_state,
|
updated_subcloud.management_state,
|
||||||
|
@@ -73,6 +73,10 @@ FAKE_SERVICES = [
|
|||||||
dcorch_consts.ENDPOINT_TYPE_NFV,
|
dcorch_consts.ENDPOINT_TYPE_NFV,
|
||||||
5
|
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_IDENTITY,
|
||||||
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
||||||
dcorch_consts.ENDPOINT_TYPE_FM,
|
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(
|
status = db_api.subcloud_status_create(
|
||||||
self.ctx, subcloud.id, endpoint)
|
self.ctx, subcloud.id, endpoint)
|
||||||
self.assertIsNotNone(status)
|
self.assertIsNotNone(status)
|
||||||
@@ -369,7 +374,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
|
|||||||
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
||||||
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
||||||
dcorch_consts.ENDPOINT_TYPE_FM,
|
dcorch_consts.ENDPOINT_TYPE_FM,
|
||||||
dcorch_consts.ENDPOINT_TYPE_NFV]:
|
dcorch_consts.ENDPOINT_TYPE_NFV,
|
||||||
|
dcorch_consts.ENDPOINT_TYPE_DC_CERT]:
|
||||||
# Update
|
# Update
|
||||||
sm.update_subcloud_endpoint_status(
|
sm.update_subcloud_endpoint_status(
|
||||||
self.ctx, subcloud_name=subcloud.name,
|
self.ctx, subcloud_name=subcloud.name,
|
||||||
@@ -388,7 +394,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
|
|||||||
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
||||||
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
||||||
dcorch_consts.ENDPOINT_TYPE_FM,
|
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(
|
sm.update_subcloud_endpoint_status(
|
||||||
self.ctx, subcloud_name=subcloud.name,
|
self.ctx, subcloud_name=subcloud.name,
|
||||||
endpoint_type=endpoint,
|
endpoint_type=endpoint,
|
||||||
@@ -431,6 +438,19 @@ class TestSubcloudManager(base.DCManagerTestCase):
|
|||||||
self.assertEqual(updated_subcloud_status.sync_status,
|
self.assertEqual(updated_subcloud_status.sync_status,
|
||||||
consts.SYNC_STATUS_OUT_OF_SYNC)
|
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
|
# Set/verify the subcloud is online/managed
|
||||||
db_api.subcloud_update(
|
db_api.subcloud_update(
|
||||||
self.ctx, subcloud.id,
|
self.ctx, subcloud.id,
|
||||||
@@ -448,7 +468,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
|
|||||||
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
||||||
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
||||||
dcorch_consts.ENDPOINT_TYPE_FM,
|
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(
|
sm.update_subcloud_endpoint_status(
|
||||||
self.ctx, subcloud_name=subcloud.name,
|
self.ctx, subcloud_name=subcloud.name,
|
||||||
endpoint_type=endpoint,
|
endpoint_type=endpoint,
|
||||||
@@ -467,7 +488,8 @@ class TestSubcloudManager(base.DCManagerTestCase):
|
|||||||
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
dcorch_consts.ENDPOINT_TYPE_IDENTITY,
|
||||||
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
dcorch_consts.ENDPOINT_TYPE_PATCHING,
|
||||||
dcorch_consts.ENDPOINT_TYPE_FM,
|
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(
|
sm.update_subcloud_endpoint_status(
|
||||||
self.ctx, subcloud_name=subcloud.name,
|
self.ctx, subcloud_name=subcloud.name,
|
||||||
endpoint_type=endpoint,
|
endpoint_type=endpoint,
|
||||||
@@ -485,11 +507,27 @@ class TestSubcloudManager(base.DCManagerTestCase):
|
|||||||
def test_update_subcloud_availability_go_online(self):
|
def test_update_subcloud_availability_go_online(self):
|
||||||
# create a subcloud
|
# create a subcloud
|
||||||
subcloud = self.create_subcloud_static(self.ctx, name='subcloud1')
|
subcloud = self.create_subcloud_static(self.ctx, name='subcloud1')
|
||||||
|
|
||||||
self.assertIsNotNone(subcloud)
|
self.assertIsNotNone(subcloud)
|
||||||
self.assertEqual(subcloud.availability_status,
|
self.assertEqual(subcloud.availability_status,
|
||||||
consts.AVAILABILITY_OFFLINE)
|
consts.AVAILABILITY_OFFLINE)
|
||||||
|
|
||||||
sm = subcloud_manager.SubcloudManager()
|
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,
|
sm.update_subcloud_availability(self.ctx, subcloud.name,
|
||||||
consts.AVAILABILITY_ONLINE)
|
consts.AVAILABILITY_ONLINE)
|
||||||
|
|
||||||
|
@@ -128,12 +128,14 @@ ENDPOINT_TYPE_IDENTITY = "identity"
|
|||||||
ENDPOINT_TYPE_FM = "faultmanagement"
|
ENDPOINT_TYPE_FM = "faultmanagement"
|
||||||
ENDPOINT_TYPE_NFV = "nfv"
|
ENDPOINT_TYPE_NFV = "nfv"
|
||||||
ENDPOINT_TYPE_LOAD = "load"
|
ENDPOINT_TYPE_LOAD = "load"
|
||||||
|
ENDPOINT_TYPE_DC_CERT = 'dc-cert'
|
||||||
|
|
||||||
# All endpoint types
|
# All endpoint types
|
||||||
ENDPOINT_TYPES_LIST = [ENDPOINT_TYPE_PLATFORM,
|
ENDPOINT_TYPES_LIST = [ENDPOINT_TYPE_PLATFORM,
|
||||||
ENDPOINT_TYPE_PATCHING,
|
ENDPOINT_TYPE_PATCHING,
|
||||||
ENDPOINT_TYPE_IDENTITY,
|
ENDPOINT_TYPE_IDENTITY,
|
||||||
ENDPOINT_TYPE_LOAD]
|
ENDPOINT_TYPE_LOAD,
|
||||||
|
ENDPOINT_TYPE_DC_CERT]
|
||||||
|
|
||||||
# Dcorch sync endpoint types
|
# Dcorch sync endpoint types
|
||||||
SYNC_ENDPOINT_TYPES_LIST = [ENDPOINT_TYPE_PLATFORM,
|
SYNC_ENDPOINT_TYPES_LIST = [ENDPOINT_TYPE_PLATFORM,
|
||||||
|
Reference in New Issue
Block a user