path: root/apex/builders/
diff options
authorCharalampos Kominos <>2018-10-01 13:12:46 +0200
committerCharalampos Kominos <>2018-11-18 16:18:08 +0100
commit8f75445a37099590f36ce6044109209c67ef0deb (patch)
treeb34e9c39054ab86520e00465c09e574d4d1e4f94 /apex/builders/
parent9066cb52523aeb4a5b98c634aa6616233b0c0237 (diff)
Bring in aarch64 support in apex
RDO builds packages which are aarch64 compatible but some configuration is needed to succesfully deploy. This change: - Prepares the aarch64 repo as the source for Kolla Containers - Configures VM sizing for aarch64 undercloud. - Configures VM sizing for aarch64 virtual deploy targets. Vms need to be larger on aarch64 compared to x86 to avoid starvation of resources. (MYSQL) - Configures vda2 as the location of the Linux Kernel in aarch64 in an UEFI system - Configures the vNICs to be on the pci-bus instead of the virtio-mmio bus.This will enalbe the Nics to come up in the same order as the x86 ones, so the extra configuration in ansible is not needed - Configures apex to use a stable version of the ceph:daemon container - Configure apex for containerized undercloud in Rocky - Add extra ansible.cfg file for aarch64 which increases waiting times in ansible for aarch64 - Provide helper scripts for DIB to create aarch64 UEFI images Known limitations: - Selinux is interfering with DHCP requests in ironic and ssh so it must be disabled before the deploy command is ran. - The aarch64 containers are frozen for in this commit: - The 600s timeout defined in : is not enough for aarch64. A value of 1200s is recommended JIRA: APEX-619 Change-Id: Ia3f067821e12bba44939bbf8c0e4676f2da70239 Signed-off-by: Charalampos Kominos <> Signed-off-by: ting wu <>
Diffstat (limited to 'apex/builders/')
1 files changed, 15 insertions, 7 deletions
diff --git a/apex/builders/ b/apex/builders/
index 2934a1d..7627ae3 100644
--- a/apex/builders/
+++ b/apex/builders/
@@ -59,7 +59,7 @@ def project_to_path(project, patch=None):
return "/usr/lib/python2.7/site-packages/"
-def project_to_docker_image(project):
+def project_to_docker_image(project, docker_url):
Translates OpenStack project to OOO services that are containerized
:param project: name of OpenStack project
@@ -69,7 +69,8 @@ def project_to_docker_image(project):
# based on project
hub_output = utils.open_webpage(
- urllib.parse.urljoin(con.DOCKERHUB_OOO, '?page_size=1024'), timeout=10)
+ urllib.parse.urljoin(docker_url,
+ '?page_size=1024'), timeout=10)
results = json.loads(hub_output.decode())['results']
except Exception as e:
@@ -89,7 +90,7 @@ def project_to_docker_image(project):
return docker_images
-def is_patch_promoted(change, branch, docker_image=None):
+def is_patch_promoted(change, branch, docker_url, docker_image=None):
Checks to see if a patch that is in merged exists in either the docker
container or the promoted tripleo images
@@ -122,8 +123,8 @@ def is_patch_promoted(change, branch, docker_image=None):
return True
# must be a docker patch, check docker tag modified time
- docker_url = con.DOCKERHUB_OOO.replace('tripleomaster',
- "tripleo{}".format(branch))
+ docker_url = docker_url.replace('tripleomaster',
+ "tripleo{}".format(branch))
url_path = "{}/tags/{}".format(docker_image, con.DOCKER_TAG)
docker_url = urllib.parse.urljoin(docker_url, url_path)
logging.debug("docker url is: {}".format(docker_url))
@@ -176,10 +177,15 @@ def add_upstream_patches(patches, image, tmp_dir,
# and move the patch into the containers directory. We also assume
# this builder call is for overcloud, because we do not support
# undercloud containers
+ if platform.machine() == 'aarch64':
+ docker_url = con.DOCKERHUB_AARCH64
+ else:
+ docker_url = con.DOCKERHUB_OOO
if docker_tag and 'python' in project_path:
# Projects map to multiple THT services, need to check which
# are supported
- ooo_docker_services = project_to_docker_image(patch['project'])
+ ooo_docker_services = project_to_docker_image(patch['project'],
+ docker_url)
docker_img = ooo_docker_services[0]
ooo_docker_services = []
@@ -189,6 +195,7 @@ def add_upstream_patches(patches, image, tmp_dir,
patch_promoted = is_patch_promoted(change,
branch.replace('stable/', ''),
+ docker_url,
if patch_diff and not patch_promoted:
@@ -288,7 +295,8 @@ def prepare_container_images(prep_file, branch='master', neutron_driver=None):
p_set['neutron_driver'] = neutron_driver
p_set['namespace'] = "{}".format(branch)
if platform.machine() == 'aarch64':
- p_set['ceph_tag'] = 'master-fafda7d-luminous-centos-7-aarch64'
+ p_set['namespace'] = ""
+ p_set['ceph_tag'] = 'v3.1.0-stable-3.1-luminous-centos-7-aarch64'
except KeyError:
logging.error("Invalid prep file format: {}".format(prep_file))