Fix access field for instances created before upgrade

For instances created prior to Victoria, the access field in trove db
is None. We need to check 'is_public' based on instance addresses.

Change-Id: I3302ddea19f32683fda404802550ca5dd1081312
This commit is contained in:
Lingxian Kong 2020-08-13 23:39:53 +12:00
parent a1275bbc43
commit 7486a7c382
2 changed files with 32 additions and 0 deletions

View File

@ -69,6 +69,13 @@ class InstanceView(object):
if self.instance.access:
instance_dict['access'] = self.instance.access
elif 'addresses' in instance_dict:
for addr in instance_dict['addresses']:
if addr.get('type') == 'public':
instance_dict['access']['is_public'] = True
break
else:
instance_dict['access']['is_public'] = False
LOG.debug(instance_dict)
return {"instance": instance_dict}

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
#
from unittest.mock import MagicMock
from unittest.mock import Mock
from trove.common import cfg
from trove.instance.views import InstanceDetailView
@ -133,3 +134,27 @@ class InstanceDetailViewTest(trove_testtools.TestCase):
result = view.data()
self.assertNotIn('server_id', result['instance'])
self.assertNotIn('volume_id', result['instance'])
def test_access(self):
instance = MagicMock()
instance.hostname = None
instance.get_visible_ip_addresses.return_value = [
{'address': '10.111.0.27', 'type': 'private'}
]
instance.access = None
instance.slaves = []
view = InstanceDetailView(instance, self.req)
data = view.data()['instance']
self.assertFalse(data['access']['is_public'])
instance.get_visible_ip_addresses.return_value = [
{'address': '10.111.0.27', 'type': 'private'},
{'address': '172.30.5.107', 'type': 'public'}
]
view = InstanceDetailView(instance, self.req)
data = view.data()['instance']
self.assertTrue(data['access']['is_public'])