diff options
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/configure-deps-functions.sh | 53 | ||||
-rwxr-xr-x | lib/configure-vm | 32 | ||||
-rw-r--r-- | lib/installer/domain.xml | 6 | ||||
-rw-r--r-- | lib/python/apex/inventory.py | 3 | ||||
-rwxr-xr-x | lib/undercloud-functions.sh | 41 | ||||
-rwxr-xr-x | lib/virtual-setup-functions.sh | 10 |
6 files changed, 112 insertions, 33 deletions
diff --git a/lib/configure-deps-functions.sh b/lib/configure-deps-functions.sh index 32900015..4c00fbf3 100755 --- a/lib/configure-deps-functions.sh +++ b/lib/configure-deps-functions.sh @@ -129,36 +129,39 @@ EOF virsh pool-list --all | grep default > /dev/null || virsh pool-define-as --name default dir --target /var/lib/libvirt/images virsh pool-list | grep -Eo "default\s+active" > /dev/null || (virsh pool-autostart default; virsh pool-start default) - if ! egrep '^flags.*(vmx|svm)' /proc/cpuinfo > /dev/null; then - echo "${red}virtualization extensions not found, kvm kernel module insertion may fail.\n \ + # Virt flag check is Arch dependent on x86 + if [ "$(uname -i)" == 'x86_64' ]; then + if ! egrep '^flags.*(vmx|svm)' /proc/cpuinfo > /dev/null; then + echo "${red}virtualization extensions not found, kvm kernel module insertion may fail.\n \ Are you sure you have enabled vmx in your bios or hypervisor?${reset}" - fi + fi - if ! lsmod | grep kvm > /dev/null; then modprobe kvm; fi - if ! lsmod | grep kvm_intel > /dev/null; then modprobe kvm_intel; fi + if ! lsmod | grep kvm > /dev/null; then modprobe kvm; fi + if ! lsmod | grep kvm_intel > /dev/null; then modprobe kvm_intel; fi - if ! lsmod | grep kvm > /dev/null; then - echo "${red}kvm kernel modules not loaded!${reset}" - return 1 - fi + if ! lsmod | grep kvm > /dev/null; then + echo "${red}kvm kernel modules not loaded!${reset}" + return 1 + fi - # try to enabled nested kvm - if [ "$virtual" == "TRUE" ]; then - nested_kvm=`cat /sys/module/kvm_intel/parameters/nested` - if [ "$nested_kvm" != "Y" ]; then - # try to enable nested kvm - echo 'options kvm-intel nested=1' > /etc/modprobe.d/kvm_intel.conf - if rmmod kvm_intel; then - modprobe kvm_intel + # try to enabled nested kvm + if [ "$virtual" == "TRUE" ]; then + nested_kvm=`cat /sys/module/kvm_intel/parameters/nested` + if [ "$nested_kvm" != "Y" ]; then + # try to enable nested kvm + echo 'options kvm-intel nested=1' > /etc/modprobe.d/kvm_intel.conf + if rmmod kvm_intel; then + modprobe kvm_intel + fi + nested_kvm=`cat /sys/module/kvm_intel/parameters/nested` + fi + if [ "$nested_kvm" != "Y" ]; then + echo "${red}Cannot enable nested kvm, falling back to qemu for deployment${reset}" + DEPLOY_OPTIONS+=" --libvirt-type qemu" + else + echo "${blue}Nested kvm enabled, deploying with kvm acceleration${reset}" + fi fi - nested_kvm=`cat /sys/module/kvm_intel/parameters/nested` - fi - if [ "$nested_kvm" != "Y" ]; then - echo "${red}Cannot enable nested kvm, falling back to qemu for deployment${reset}" - DEPLOY_OPTIONS+=" --libvirt-type qemu" - else - echo "${blue}Nested kvm enabled, deploying with kvm acceleration${reset}" - fi fi ##sshkeygen for root diff --git a/lib/configure-vm b/lib/configure-vm index 340a7ab6..5cb45218 100755 --- a/lib/configure-vm +++ b/lib/configure-vm @@ -100,6 +100,7 @@ def main(): 'enable_serial_console': '', 'direct_boot': '', 'kernel_args': '', + 'user_interface': '', } if args.image is not None: params['imagefile'] = args.image @@ -162,6 +163,37 @@ def main(): <cmdline>%s</cmdline> """ % ' '.join(args.kernel_args) + if args.arch == 'aarch64': + + params['direct_boot'] += """ + <loader readonly='yes' type='pflash'>/usr/share/AAVMF/AAVMF_CODE.fd</loader> + <nvram>/var/lib/libvirt/qemu/nvram/centos7.0_VARS.fd</nvram> + """ + params['user_interface'] = """ + <controller type='virtio-serial' index='0'> + <address type='virtio-mmio'/> + </controller> + <serial type='pty'> + <target port='0'/> + </serial> + <console type='pty'> + <target type='serial' port='0'/> + </console> + <channel type='unix'> + <target type='virtio' name='org.qemu.guest_agent.0'/> + <address type='virtio-serial' controller='0' bus='0' port='1'/> + </channel> + """ + else: + params['user_interface'] = """ + <input type='mouse' bus='ps2'/> + <graphics type='vnc' port='-1' autoport='yes'/> + <video> + <model type='cirrus' vram='9216' heads='1'/> + </video> + """ + + libvirt_template = source_template % params conn=libvirt.open(args.uri) a = conn.defineXML(libvirt_template) diff --git a/lib/installer/domain.xml b/lib/installer/domain.xml index ead0de69..57a67d87 100644 --- a/lib/installer/domain.xml +++ b/lib/installer/domain.xml @@ -29,10 +29,6 @@ %(network)s %(bm_network)s %(enable_serial_console)s - <input type='mouse' bus='ps2'/> - <graphics type='vnc' port='-1' autoport='yes'/> - <video> - <model type='cirrus' vram='9216' heads='1'/> - </video> + %(user_interface)s </devices> </domain> diff --git a/lib/python/apex/inventory.py b/lib/python/apex/inventory.py index 2e08d3b9..64f47b49 100644 --- a/lib/python/apex/inventory.py +++ b/lib/python/apex/inventory.py @@ -9,6 +9,7 @@ import yaml import json +import platform from .common import constants from .common import utils @@ -67,7 +68,7 @@ class Inventory(dict): 'for non-HA baremetal deployment') if virtual: - self['arch'] = 'x86_64' + self['arch'] = platform.machine() self['host-ip'] = '192.168.122.1' self['power_manager'] = \ 'nova.virt.baremetal.virtual_power_driver.VirtualPowerManager' diff --git a/lib/undercloud-functions.sh b/lib/undercloud-functions.sh index 3bd0341a..44bd3903 100755 --- a/lib/undercloud-functions.sh +++ b/lib/undercloud-functions.sh @@ -173,6 +173,7 @@ EOI echo "Running undercloud installation and configuration." echo "Logging undercloud installation to stack@undercloud:/home/stack/apex-undercloud-install.log" ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" << EOI +set -e openstack-config --set undercloud.conf DEFAULT local_ip ${admin_installer_vm_ip}/${admin_cidr##*/} openstack-config --set undercloud.conf DEFAULT network_gateway ${admin_installer_vm_ip} openstack-config --set undercloud.conf DEFAULT network_cidr ${admin_cidr} @@ -194,6 +195,22 @@ sudo sed -i '/CephClusterFSID:/c\\ CephClusterFSID: \\x27$(cat /proc/sys/kernel sudo sed -i '/CephMonKey:/c\\ CephMonKey: \\x27'"\$(ceph-authtool --gen-print-key)"'\\x27' /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml sudo sed -i '/CephAdminKey:/c\\ CephAdminKey: \\x27'"\$(ceph-authtool --gen-print-key)"'\\x27' /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml +if [ "\$(uname -i)" == 'aarch64' ]; then + +# These two fixes are done in the base OOO image build right now +# keeping them here to know that they are done and in case we need +# to take care of them in the future. +# # remove syslinux references for aarch64 +# sudo sh -xc 'cd /etc/puppet/modules/ironic/manifests && patch -p0 < puppet-ironic-manifests-pxe-pp-aarch64.patch' +# sudo sed -i '/syslinux-extlinux/d' /usr/share/instack-undercloud/puppet-stack-config/puppet-stack-config.pp +# +# # disable use_linkat in swift +# sudo sed -i 's/o_tmpfile_supported()/False/' /usr/lib/python2.7/site-packages/swift/obj/diskfile.py + + openstack-config --set undercloud.conf DEFAULT ipxe_enabled false + sudo sed -i '/ _link_ip_address_pxe_configs/a\\ _link_mac_pxe_configs(task)' /usr/lib/python2.7/site-packages/ironic/common/pxe_utils.py +fi + openstack undercloud install &> apex-undercloud-install.log || { # cat the undercloud install log incase it fails echo "ERROR: openstack undercloud install has failed. Dumping Log:" @@ -201,6 +218,30 @@ openstack undercloud install &> apex-undercloud-install.log || { exit 1 } +if [ "\$(uname -i)" == 'aarch64' ]; then +sudo yum -y reinstall grub2-efi shim +sudo cp /boot/efi/EFI/centos/grubaa64.efi /tftpboot/grubaa64.efi +sudo mkdir -p /tftpboot/EFI/centos +sudo tee /tftpboot/EFI/centos/grub.cfg > /dev/null << EOF +set default=master +set timeout=5 +set hidden_timeout_quiet=false + +menuentry "master" { +configfile /tftpboot/\\\$net_default_ip.conf +} +EOF +sudo chmod 644 /tftpboot/EFI/centos/grub.cfg +sudo openstack-config --set /etc/ironic/ironic.conf pxe uefi_pxe_config_template \\\$pybasedir/drivers/modules/pxe_grub_config.template +sudo openstack-config --set /etc/ironic/ironic.conf pxe uefi_pxe_bootfile_name grubaa64.efi +sudo service openstack-ironic-conductor restart +sudo sed -i 's/linuxefi/linux/g' /usr/lib/python2.7/site-packages/ironic/drivers/modules/pxe_grub_config.template +sudo sed -i 's/initrdefi/initrd/g' /usr/lib/python2.7/site-packages/ironic/drivers/modules/pxe_grub_config.template +echo '' | sudo tee --append /tftpboot/map-file > /dev/null +echo 'r ^/EFI/centos/grub.cfg-(.*) /tftpboot/pxelinux.cfg/\\1' | sudo tee --append /tftpboot/map-file > /dev/null +sudo service xinetd restart +fi + # Set nova domain name sudo openstack-config --set /etc/nova/nova.conf DEFAULT dns_domain ${domain_name} sudo openstack-config --set /etc/nova/nova.conf DEFAULT dhcp_domain ${domain_name} diff --git a/lib/virtual-setup-functions.sh b/lib/virtual-setup-functions.sh index ac7b507b..8e15ef5d 100755 --- a/lib/virtual-setup-functions.sh +++ b/lib/virtual-setup-functions.sh @@ -81,7 +81,7 @@ EOF cpu: $vcpus memory: $ramsize disk: 41 - arch: "x86_64" + arch: "$(uname -i)" capabilities: "$capability" EOF vbmc add baremetal$i --port 623$i @@ -139,11 +139,17 @@ function define_vm () { kernel_args='--kernel-arg console=ttyS0 --kernel-arg root=/dev/sda' fi + if [ "$(uname -i)" == 'aarch64' ]; then + diskbus='scsi' + else + diskbus='sata' + fi + # create the VM $LIB/configure-vm --name $1 \ --bootdev $2 \ --image "$volume_path" \ - --diskbus sata \ + --diskbus $diskbus \ --arch $(uname -i) \ --cpus $vcpus \ --memory $ramsize \ |