Merge "Get undercloud name in get_undercloud_registry()"

This commit is contained in:
Zuul 2019-10-15 02:55:46 +00:00 committed by Gerrit Code Review
commit 027a33befd
2 changed files with 57 additions and 51 deletions

View File

@ -17,7 +17,6 @@ import base64
from concurrent import futures
import hashlib
import json
import netifaces
import os
import random
import re
@ -27,6 +26,7 @@ from requests.adapters import HTTPAdapter
import shutil
import six
from six.moves.urllib import parse
import socket
import subprocess
import tempfile
import tenacity
@ -40,7 +40,6 @@ from tripleo_common.image.exception import ImageNotFoundException
from tripleo_common.image.exception import ImageUploaderException
from tripleo_common.image.exception import ImageUploaderThreadException
from tripleo_common.image import image_export
from tripleo_common.utils import common as common_utils
from tripleo_common.utils.locks import threadinglock
@ -99,15 +98,19 @@ DEFAULT_UPLOADER = 'python'
def get_undercloud_registry():
addr = 'localhost'
if 'br-ctlplane' in netifaces.interfaces():
addrs = netifaces.ifaddresses('br-ctlplane')
if netifaces.AF_INET in addrs and addrs[netifaces.AF_INET]:
addr = addrs[netifaces.AF_INET][0].get('addr', 'localhost')
elif netifaces.AF_INET6 in addrs and addrs[netifaces.AF_INET6]:
addr = addrs[netifaces.AF_INET6][0].get('addr', 'localhost')
ctlplane_hostname = '.'.join([socket.gethostname().split('.')[0],
'ctlplane'])
cmd = ['getent', 'hosts', ctlplane_hostname]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
out, err = process.communicate()
return '%s:%s' % (common_utils.bracket_ipv6(addr), '8787')
if process.returncode != 0:
raise ImageUploaderException('No entry for %s in /etc/hosts'
% ctlplane_hostname)
address = out.split()[1]
return '%s:%s' % (address, '8787')
class MakeSession(object):

View File

@ -93,49 +93,52 @@ class TestImageUploadManager(base.TestCase):
key=operator.itemgetter('imagename'))
self.assertEqual(sorted_expected_data, sorted_parsed_data)
@mock.patch('netifaces.ifaddresses')
@mock.patch('netifaces.interfaces')
def test_get_undercloud_registry(self, mock_interfaces, mock_addresses):
mock_interfaces.return_value = ['lo', 'eth0']
self.assertEqual(
'localhost:8787',
image_uploader.get_undercloud_registry()
)
@mock.patch('subprocess.Popen', autospec=True)
@mock.patch('socket.gethostname', return_value='uc.somedomain')
def test_get_undercloud_registry_ipv4(self, mock_gethostname,
mock_popen):
mock_process = mock.Mock()
mock_process.communicate.return_value = (
'192.0.2.1 uc.ctlplane.localdomain uc.ctlplane', '')
mock_process.returncode = 0
mock_popen.return_value = mock_process
self.assertEqual('uc.ctlplane.localdomain:8787',
image_uploader.get_undercloud_registry())
mock_interfaces.return_value = ['lo', 'eth0', 'br-ctlplane']
mock_addresses.return_value = {
2: [{'addr': '192.0.2.0'}]
}
self.assertEqual(
'192.0.2.0:8787',
image_uploader.get_undercloud_registry()
)
@mock.patch('subprocess.Popen', autospec=True)
@mock.patch('socket.gethostname', return_value='uc.somedomain')
def test_get_undercloud_registry_ipv6(self, mock_gethostname,
mock_popen):
mock_process = mock.Mock()
mock_process.communicate.return_value = (
'fd12::1 uc.ctlplane.localdomain uc.ctlplane', '')
mock_process.returncode = 0
mock_popen.return_value = mock_process
self.assertEqual('uc.ctlplane.localdomain:8787',
image_uploader.get_undercloud_registry())
@mock.patch('netifaces.ifaddresses')
@mock.patch('netifaces.interfaces')
@mock.patch('netifaces.AF_INET6', 10)
def test_get_undercloud_registry_ipv6(self, mock_interfaces,
mock_addresses):
@mock.patch('subprocess.Popen', autospec=True)
@mock.patch('socket.gethostname', return_value='undercloud.somedomain')
def test_get_undercloud_registry_no_etc_hosts(self, mock_gethostname,
mock_popen):
mock_process = mock.Mock()
mock_process.communicate.return_value = ('', '')
mock_process.returncode = 2
mock_popen.return_value = mock_process
self.assertRaises(ImageUploaderException,
image_uploader.get_undercloud_registry)
mock_interfaces.return_value = ['lo', 'eth0', 'br-ctlplane']
mock_addresses.return_value = {
10: [{'addr': 'fd12:3456:789a:1::1'}]
}
self.assertEqual(
'[fd12:3456:789a:1::1]:8787',
image_uploader.get_undercloud_registry()
)
@mock.patch('netifaces.ifaddresses')
@mock.patch('netifaces.interfaces')
def test_get_push_destination(self, mock_interfaces, mock_addresses):
mock_interfaces.return_value = ['lo', 'eth0', 'br-ctlplane']
mock_addresses.return_value = {
2: [{'addr': '192.0.2.0'}]
}
@mock.patch('subprocess.Popen', autospec=True)
@mock.patch('socket.gethostname', return_value='undercloud.somedomain')
def test_get_push_destination(self, mock_gethostname, mock_popen):
mock_process = mock.Mock()
mock_process.communicate.return_value = (
'fd12::1 uc.ctlplane.localdomain uc.ctlplane', '')
mock_process.returncode = 0
mock_popen.return_value = mock_process
manager = image_uploader.ImageUploadManager(self.filelist)
self.assertEqual(
'192.0.2.0:8787',
'uc.ctlplane.localdomain:8787',
manager.get_push_destination({})
)
self.assertEqual(
@ -144,15 +147,15 @@ class TestImageUploadManager(base.TestCase):
'192.0.2.1:8787'})
)
self.assertEqual(
'192.0.2.0:8787',
'uc.ctlplane.localdomain:8787',
manager.get_push_destination({'push_destination': False})
)
self.assertEqual(
'192.0.2.0:8787',
'uc.ctlplane.localdomain:8787',
manager.get_push_destination({'push_destination': True})
)
self.assertEqual(
'192.0.2.0:8787',
'uc.ctlplane.localdomain:8787',
manager.get_push_destination({'push_destination': None})
)