docker-compose: support aarch64 07/49607/6
authorYibo Cai <yibo.cai@arm.com>
Fri, 22 Dec 2017 10:04:42 +0000 (18:04 +0800)
committerYibo Cai <yibo.cai@arm.com>
Sun, 14 Jan 2018 11:27:41 +0000 (11:27 +0000)
Change-Id: I4b1bce45f8412af7076dca90bbb4c1193057d110
Signed-off-by: Yibo Cai <yibo.cai@arm.com>
build.sh
build/build-aarch64.yaml
util/docker-compose/group_vars/all
util/docker-compose/roles/cobbler/tasks/main.yml
util/docker-compose/roles/cobbler/templates/dhcp.template.j2
util/docker-compose/roles/compass/tasks/main.yml

index 7f67ee2..0aea6eb 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -102,7 +102,7 @@ function build_tar()
     sudo rm -rf compass_dists
     mkdir -p compass_dists
     sudo cp -f *.tar *.iso compass_dists
-    sudo cp $COMPASS_PATH/build/build.yaml compass_dists
+    sudo cp $COMPASS_PATH/build/build*.yaml compass_dists
     sudo cp -rf $COMPASS_PATH/util/docker-compose ./
     sudo tar -zcf compass.tar.gz docker-compose compass_dists
     sudo mv compass.tar.gz $TAR_DIR/$TAR_NAME
index 47bd0eb..e197f33 100644 (file)
@@ -13,29 +13,25 @@ packages:
   - name: compass-deck
     description: "RESTful API and DB Handlers for Compass"
     get_method: docker
-    url: $COMPASS_DOCKER_REPO/compass-deck:latest
+    url: linaro/compass-deck:latest
 
-  - name: compass-tasks-k8s
+    # XXX: only supports k8s now
+  - name: compass-tasks
     description: "compass task container for kubernets deployment via kargo"
     get_method: docker
-    url: $COMPASS_DOCKER_REPO/compass-tasks-k8s:latest
+    url: linaro/compass-tasks-k8s:latest
 
   - name: compass-cobbler
     description: "cobbler container for compass"
     get_method: docker
-    url: $COMPASS_DOCKER_REPO/compass-cobbler:latest
+    url: linaro/compass-cobbler:latest
 
   - name: compass-db
     description: "datebase container for compass"
     get_method: docker
-    url: $COMPASS_DOCKER_REPO/compass-db:latest
+    url: linaro/compass-db:latest
 
   - name: compass-mq
     description: "message queue container for compass"
     get_method: docker
-    url: $COMPASS_DOCKER_REPO/compass-mq:latest
-
-  - name: compass-docker-compose
-    description: "containerized compass compose ansible"
-    get_method: git
-    url: $COMPASS_GIT_REPO/compass-docker-compose
+    url: linaro/compass-mq:latest
index 1dafe81..920589c 100755 (executable)
@@ -19,7 +19,7 @@ install_ip_range: 10.1.0.100 10.1.0.250
 pip_pkg_name: pip-openstack.tar.gz
 feature_pkg_name: packages.tar.gz
 
-distros:
+distros_x86_64:
   ubuntu-16.04.3:
     breed: "ubuntu"
     kickstart: "default16.seed"
@@ -30,6 +30,8 @@ distros:
     version: "ubuntu"
     iso_name: ubuntu-16.04.3-server-amd64
     ppa_name: xenial-pike-ppa
+    cobbler_name: ubuntu-16.04.3-server
+    cobbler_arch: x86_64
 
   CentOS-7:
     breed: "redhat"
@@ -38,4 +40,29 @@ distros:
     version: "centos"
     iso_name: CentOS-7-x86_64-Minimal-1708
     ppa_name: centos7-pike-ppa
+    cobbler_name: CentOS-7-Minimal-1708
+    cobbler_arch: x86_64
 
+distros_aarch64:
+  ubuntu-16.04:
+    breed: "ubuntu"
+    kickstart: "default16.seed"
+    kopts: "netcfg/choose_interface=auto console=ttyS0 console=ttyAMA0 console=tty0 net.ifnames=0"
+    kopts_post: "console=ttyS0 console=ttyAMA0 console=tty0 net.ifnames=0"
+    extra: "--apt-dists=xenial --apt-components=main"
+    aliase: "xenial"
+    version: "ubuntu"
+    iso_name: ubuntu-16.04-server-arm64
+    ppa_name: xenial-pike-ppa
+    cobbler_name: ubuntu-16.04-server
+    cobbler_arch: arm
+
+  CentOS-7:
+    breed: "redhat"
+    kickstart: "default-aarch64.ks"
+    aliase: "centos7"
+    version: "centos"
+    iso_name: CentOS-7-aarch64-Minimal-1611
+    ppa_name: centos7-pike-ppa
+    cobbler_name: CentOS-7-Minimal-1611
+    cobbler_arch: arm
index e3f1308..0a30e0c 100755 (executable)
     docker cp "{{ compass_dists_dir }}/{{ item.value.ppa_name }}.tar.gz" compass-cobbler:/tmp
     docker exec compass-cobbler bash -c \
     "mkdir -p /var/lib/cobbler/repo_mirror/{{ item.value.ppa_name }}"
-  with_dict: "{{ distros }}"
+  with_dict: "{{ vars['distros_' + ansible_architecture] }}"
   run_once: "True"
   ignore_errors: "True"
 
 - name: cobbler import iso
   shell: |
-    name=`basename {{ item.value.iso_name }} | \
-    sed -e 's/.iso//g' -e 's/-amd64//g' -e 's/-x86_64//g'`
+    name="{{ item.value.cobbler_name }}"
     docker exec compass-cobbler bash -c \
     "service cobblerd restart;
      sleep 3;
      cobbler import --name $name \
                     --path /mnt/{{ item.value.iso_name }} \
-                    --arch x86_64 \
+                    --arch {{ item.value.cobbler_arch }} \
                     --kickstart /var/lib/cobbler/kickstarts/{{ item.value.kickstart }} \
                     --breed {{ item.value.breed }}"
-  with_dict: "{{ distros }}"
+  with_dict: "{{ vars['distros_' + ansible_architecture] }}"
   run_once: "True"
   register: result2
   until: result2.rc == 0
     "cobbler repo add --name {{ item.value.ppa_name }} \
                       --mirror /var/lib/cobbler/repo_mirror/{{ item.value.ppa_name }} \
                       --mirror-locally True \
-                      --arch=x86_64 {{ item.value.extra | default()}}"
-  with_dict: "{{ distros }}"
+                      --arch={{ item.value.cobbler_arch }} \
+                             {{ item.value.extra | default() }}"
+  with_dict: "{{ vars['distros_' + ansible_architecture] }}"
   run_once: "True"
 
-- name: edit profiles
+- name: edit profiles for x86_64
   shell: |
-    name=`basename {{ item.value.iso_name }} | \
-    sed -e 's/.iso//g' -e 's/-amd64//g' -e 's/-x86_64//g'`-x86_64
+    name="{{ item.value.cobbler_name }}-x86_64"
     docker exec compass-cobbler bash -c \
     "cobbler profile edit --name $name \
                           --name-servers '' \
                           --ksmeta \"tree=http://{{ host_ip }}/cobbler/ks_mirror/$name\" \
                           --kopts \"{{ item.value.kopts | default('') }}\" \
                           --kopts-post \"{{ item.value.kopts_post | default('') }}\""
-  with_dict: "{{ distros }}"
+  with_dict: "{{ distros_x86_64 }}"
   run_once: "True"
+  when: ansible_architecture == "x86_64"
+
+- name: edit profile for aarch64
+  shell: |
+    # Cobbler naming on Arm is a mess
+    # Imported name:
+    # - CentOS-7-Minimal-1611
+    # - ubuntu-16.04-server
+    # Profile name:
+    # - CentOS-7-Minimal-1611-arm-arm
+    # - ubuntu-16.04-server-arm-arm64-arm
+    # Kickstart meta url name
+    # - http://x.x.x.x/cobbler/ks_mirror/CentOS-7-Minimal-1611-arm
+    # - http://x.x.x.x/cobbler/ks_mirror/ubuntu-16.04-server-arm-arm64
+    name="{{ item.value.cobbler_name }}-arm"
+    profiles=`docker exec compass-cobbler bash -c \
+              "cobbler profile list | grep $name"`
+    for profile_name in $profiles; do
+      docker exec compass-cobbler bash -c \
+      "cobbler profile edit \
+         --name $profile_name \
+         --name-servers '' \
+         --repos {{ item.value.ppa_name }} \
+         --ksmeta \"tree=http://{{ host_ip }}/cobbler/ks_mirror/${profile_name%????}\" \
+         --kopts \"{{ item.value.kopts | default('') }}\" \
+         --kopts-post \"{{ item.value.kopts_post | default('') }}\""
+    done
+  with_dict: "{{ distros_aarch64 }}"
+  run_once: "True"
+  when: ansible_architecture == "aarch64"
 
 - name: cobbler sync
   shell: |
index 0665f2f..8b1f2a6 100755 (executable)
@@ -42,6 +42,8 @@ subnet {{ install_subnet }} netmask {{ install_netmask }} {
                   filename "grub/grub-x86.efi";
           } else if option pxe-system-type = 00:07 {
                   filename "grub/grub-x86_64.efi";
+          } else if option pxe-system-type = 00:0B {
+                  filename "grub/grub-aarch64.efi";
           } else {
                   filename "pxelinux.0";
           }
index 9ee7902..c7dba96 100755 (executable)
@@ -1,5 +1,8 @@
 ---
-- include_vars: "{{ compass_dists_dir }}/build.yaml"
+- include_vars: "{{ item }}"
+  with_first_found:
+    - "{{ compass_dists_dir }}/build-{{ ansible_architecture }}.yaml"
+    - "{{ compass_dists_dir }}/build.yaml"
 
 - set_fact:
     image_name: "{{ item.name | regex_replace('-', '_') }}"