aboutsummaryrefslogtreecommitdiffstats
path: root/patches
diff options
context:
space:
mode:
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>2017-07-10 17:32:57 +0200
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>2017-07-11 19:51:24 +0200
commitde0b0f160f6ac408c2ba302507ede4d0a537b73f (patch)
treec9ea030e00a631ec07ef2d4f8d956a2bbad93eed /patches
parent7ce3a621f2156110f5434e95a46e6aa6aa1fb9a1 (diff)
MCP: patches: AArch64: Add initial support
- p/fuel: classes: AArch64: virtio-pci-net sync - p/reclass-system-salt-model: Add Armband repos - mcp/config: AArch64: Use UEFI arm64 image Also, allow removal of VMs booted via guest UEFI (OVMF or AAVMF). While at it, bump default vCPU number from 2 to 6. - lib.sh: AArch64: Use VGA video mode for guests On AArch64, there is no Cirrus video, so use VGA mode instead. For now, we install vgabios package no matter the arch, although it is only used on AArch64. On Debian systems, also fix a missing link for vgabios-stdvga.bin. Based on previous Armband work from [1]. - lib.sh: AArch64: virt-install: Use virtio-net-pci AArch64 virt tools (i.e. libvirt) default to "virtio-mmio", instead of "virtio-net-pci", at least before libvirt 3.x (see [2]). Without PCI bus info, we can't really enforce a specific order for the guest ethernet devices. Moreover, predictable network interface naming is out of the question with virtio-mmio, as there is no bus information to rely on. Therefore we will enforce "virtio-net-pci" on AArch64, instead of the default "virtio" (which translates into "virtio-mmio" currently). - salt.sh, user-data: Add Saltstack arm64 repo - salt.sh: Clone armband repo, apply patches from it - classes: virtual: AArch64: virtio-pci-net sync Since AArch64 will be using virtio-net-pci NIC model for guests, predictable interface naming yields a slightly different scheme. Update all configuration to reflect this. FIXME: - Use https for fetching Armband GPG keys! - Revise the patching mechanism, make things more dynamic. [1] https://github.com/opnfv/armband/blob/danube.2.0/patches/fuel-library/ arm64-bug-fixes/0002-Install-vgabios-and-link-for-aarch64.patch [2] https://www.redhat.com/archives/libvir-list/2016-August/msg00931.html Change-Id: If5aae22066f75732652201a78357c4931438d58d Signed-off-by: Guillermo Herrero <Guillermo.Herrero@enea.com> Signed-off-by: Charalampos Kominos <Charalampos.Kominos@enea.com> Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
Diffstat (limited to 'patches')
-rw-r--r--patches/opnfv-fuel/0001-mcp-config-AArch64-Use-UEFI-arm64-image.patch49
-rw-r--r--patches/opnfv-fuel/0002-lib.sh-AArch64-Use-VGA-video-mode-for-guests.patch64
-rw-r--r--patches/opnfv-fuel/0003-lib.sh-AArch64-virt-install-Use-virtio-net-pci.patch78
-rw-r--r--patches/opnfv-fuel/0004-salt.sh-user-data-Add-Saltstack-arm64-repo.patch45
-rw-r--r--patches/opnfv-fuel/0005-salt.sh-Clone-armband-repo-apply-patches-from-it.patch32
-rw-r--r--patches/opnfv-fuel/0006-classes-virtual-AArch64-virtio-pci-net-sync.patch318
-rw-r--r--patches/reclass-system-salt-model/0001-linux-system-repo-mcp-Add-Armband-repos.patch85
7 files changed, 671 insertions, 0 deletions
diff --git a/patches/opnfv-fuel/0001-mcp-config-AArch64-Use-UEFI-arm64-image.patch b/patches/opnfv-fuel/0001-mcp-config-AArch64-Use-UEFI-arm64-image.patch
new file mode 100644
index 00000000..06e8391e
--- /dev/null
+++ b/patches/opnfv-fuel/0001-mcp-config-AArch64-Use-UEFI-arm64-image.patch
@@ -0,0 +1,49 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Tue, 11 Jul 2017 18:24:24 +0200
+Subject: [PATCH] mcp/config: AArch64: Use UEFI arm64 image
+
+Also, allow removal of VMs booted via guest UEFI (OVMF or AAVMF).
+While at it, bump default vCPU number from 2 to 6.
+
+Signed-off-by: Guillermo Herrero <Guillermo.Herrero@enea.com>
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ mcp/config/defaults.yaml | 4 ++--
+ mcp/scripts/lib.sh | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/mcp/config/defaults.yaml b/mcp/config/defaults.yaml
+index b841e88..17fbbfc 100644
+--- a/mcp/config/defaults.yaml
++++ b/mcp/config/defaults.yaml
+@@ -1,6 +1,6 @@
+-base_image: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img
++base_image: https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-arm64-uefi1.img
+ virtual:
+ default:
+- vcpus: 2
++ vcpus: 6
+ ram: 4096
+
+diff --git a/mcp/scripts/lib.sh b/mcp/scripts/lib.sh
+index b3abd21..b2998e0 100644
+--- a/mcp/scripts/lib.sh
++++ b/mcp/scripts/lib.sh
+@@ -18,7 +18,7 @@ cleanup_vms() {
+ # clean up existing nodes
+ for node in $(virsh list --name | grep -P '\w{3}\d{2}'); do
+ virsh destroy $node
+- virsh undefine $node
++ virsh undefine --nvram $node
+ done
+ }
+
+@@ -57,7 +57,7 @@ create_vms() {
+
+ # create vms with specified options
+ for node in "${vnodes[@]}"; do
+- virt-install --name ${node} --ram ${vnodes_ram[$node]} --vcpus=2 --cpu host --accelerate \
++ virt-install --name ${node} --ram ${vnodes_ram[$node]} --vcpus=6 --cpu host --accelerate \
+ --network network:pxe,model=virtio \
+ --network network:mgmt,model=virtio \
+ --network network:internal,model=virtio \
diff --git a/patches/opnfv-fuel/0002-lib.sh-AArch64-Use-VGA-video-mode-for-guests.patch b/patches/opnfv-fuel/0002-lib.sh-AArch64-Use-VGA-video-mode-for-guests.patch
new file mode 100644
index 00000000..a4d71a82
--- /dev/null
+++ b/patches/opnfv-fuel/0002-lib.sh-AArch64-Use-VGA-video-mode-for-guests.patch
@@ -0,0 +1,64 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Tue, 11 Jul 2017 18:35:40 +0200
+Subject: [PATCH] lib.sh: AArch64: Use VGA video mode for guests
+
+On AArch64, there is no Cirrus video, so use VGA mode instead.
+For now, we install vgabios package no matter the arch, although
+it is only used on AArch64.
+
+On Debian systems, also fix a missing link for vgabios-stdvga.bin.
+Based on previous Armband work from [1].
+
+[1] https://github.com/opnfv/armband/blob/danube.2.0/patches/fuel-library/
+ arm64-bug-fixes/0002-Install-vgabios-and-link-for-aarch64.patch
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ ci/deploy.sh | 5 +++--
+ mcp/scripts/lib.sh | 10 +++++++++-
+ 2 files changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/ci/deploy.sh b/ci/deploy.sh
+index f98246d..c803a2a 100755
+--- a/ci/deploy.sh
++++ b/ci/deploy.sh
+@@ -230,8 +230,9 @@ pushd ${DEPLOY_DIR} > /dev/null
+ # scenario, etc.
+
+ # Install required packages
+-[ -n "$(command -v apt-get)" ] && apt-get install -y mkisofs curl virtinst cpu-checker qemu-kvm
+-[ -n "$(command -v yum)" ] && yum install -y genisoimage curl virt-install qemu-kvm
++[ -n "$(command -v apt-get)" ] && apt-get install -y mkisofs curl virtinst cpu-checker qemu-kvm vgabios && \
++ ln -sf /usr/share/vgabios/vgabios.bin /usr/share/qemu/vgabios-stdvga.bin
++[ -n "$(command -v yum)" ] && yum install -y genisoimage curl virt-install qemu-kvm vgabios
+
+ # Check scenario file existence
+ if [[ ! -f ../config/${DEPLOY_SCENARIO}.yaml ]]; then
+diff --git a/mcp/scripts/lib.sh b/mcp/scripts/lib.sh
+index b2998e0..282ca38 100644
+--- a/mcp/scripts/lib.sh
++++ b/mcp/scripts/lib.sh
+@@ -55,6 +55,13 @@ create_vms() {
+ local -n vnodes=$1
+ local -n vnodes_ram=$2
+
++ # AArch64: prepare arch specific arguments
++ local virt_extra_args=""
++ if [ "$(uname -i)" = "aarch64" ]; then
++ # No Cirrus VGA on AArch64, use vga std
++ virt_extra_args="$virt_extra_args --video=vga --noautoconsole"
++ fi
++
+ # create vms with specified options
+ for node in "${vnodes[@]}"; do
+ virt-install --name ${node} --ram ${vnodes_ram[$node]} --vcpus=6 --cpu host --accelerate \
+@@ -65,7 +72,8 @@ create_vms() {
+ --disk path=$(pwd)/images/mcp_${node}.qcow2,format=qcow2,bus=virtio,cache=none,io=native \
+ --os-type linux --os-variant none \
+ --boot hd --vnc --console pty --autostart --noreboot \
+- --disk path=$(pwd)/images/mcp_${node}.iso,device=cdrom
++ --disk path=$(pwd)/images/mcp_${node}.iso,device=cdrom \
++ ${virt_extra_args}
+ done
+ }
+
diff --git a/patches/opnfv-fuel/0003-lib.sh-AArch64-virt-install-Use-virtio-net-pci.patch b/patches/opnfv-fuel/0003-lib.sh-AArch64-virt-install-Use-virtio-net-pci.patch
new file mode 100644
index 00000000..e311f0f0
--- /dev/null
+++ b/patches/opnfv-fuel/0003-lib.sh-AArch64-virt-install-Use-virtio-net-pci.patch
@@ -0,0 +1,78 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Tue, 11 Jul 2017 19:06:47 +0200
+Subject: [PATCH] lib.sh: AArch64: virt-install: Use virtio-net-pci
+
+AArch64 virt tools (i.e. libvirt) default to "virtio-mmio", instead of
+"virtio-net-pci", at least before libvirt 3.x (see [1]).
+
+Without PCI bus info, we can't really enforce a specific order for
+the guest ethernet devices.
+
+This leads to a mismatch between cloud-init, who expects "pxe"
+network to reside on "eth0", while in fact it ends up on "eth3".
+As a consequence, we have no connectivity to the guest, as DHCP
+is only configured by cloud-init on "eth0", and also the boot
+sequence waits ~5 minutes for "eth0" to come up, before eventually
+giving up.
+
+Moreover, predictable network interface naming is out of the question
+with virtio-mmio, as there is no bus information to rely on.
+
+Therefore we will enforce "virtio-net-pci" on AArch64, instead of
+the default "virtio" (which translates into "virtio-mmio" currently).
+
+FIXME: Apparently, both legacy and modern virtio (0.9 and 1.0) are
+active, which leads to triggering bug[2].
+For now, throw some sed magic at it and disable legacy mode.
+
+[1] https://www.redhat.com/archives/libvir-list/2016-August/msg00931.html
+[2] https://bugzilla.redhat.com/show_bug.cgi?id=1370005
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ mcp/scripts/lib.sh | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/mcp/scripts/lib.sh b/mcp/scripts/lib.sh
+index 282ca38..12b1ef1 100644
+--- a/mcp/scripts/lib.sh
++++ b/mcp/scripts/lib.sh
+@@ -57,23 +57,34 @@ create_vms() {
+
+ # AArch64: prepare arch specific arguments
+ local virt_extra_args=""
++ local virt_net_model="virtio"
+ if [ "$(uname -i)" = "aarch64" ]; then
+ # No Cirrus VGA on AArch64, use vga std
+ virt_extra_args="$virt_extra_args --video=vga --noautoconsole"
++ # AArch64 networking defaults to virtio-mmio before libvirt 3.x
++ virt_net_model="virtio-net-pci"
+ fi
+
+ # create vms with specified options
+ for node in "${vnodes[@]}"; do
+ virt-install --name ${node} --ram ${vnodes_ram[$node]} --vcpus=6 --cpu host --accelerate \
+- --network network:pxe,model=virtio \
+- --network network:mgmt,model=virtio \
+- --network network:internal,model=virtio \
+- --network network:public,model=virtio \
++ --network network:pxe,model=${virt_net_model} \
++ --network network:mgmt,model=${virt_net_model} \
++ --network network:internal,model=${virt_net_model} \
++ --network network:public,model=${virt_net_model} \
+ --disk path=$(pwd)/images/mcp_${node}.qcow2,format=qcow2,bus=virtio,cache=none,io=native \
+ --os-type linux --os-variant none \
+ --boot hd --vnc --console pty --autostart --noreboot \
+ --disk path=$(pwd)/images/mcp_${node}.iso,device=cdrom \
+ ${virt_extra_args}
++
++ # NOTE(armband): Disable legacy virtio (0.9) in favor of modern virtio (1.0)
++ # http://blog.vmsplice.net/2011/04/how-to-pass-qemu-command-line-options.html
++ # <qemu:commandline>
++ # <qemu:arg value='-global'/>
++ # <qemu:arg value='virtio-pci.disable-legacy=on'/>
++ # </qemu:commandline>
++ EDITOR="sed -i -e \"s|\(<domain.*\)>|\1 xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>|\" -e \"s|\(</domain>\)|<qemu:commandline><qemu:arg value='-global'/><qemu:arg value='virtio-pci.disable-legacy=on'/></qemu:commandline>\1|\"" virsh edit ${node}
+ done
+ }
+
diff --git a/patches/opnfv-fuel/0004-salt.sh-user-data-Add-Saltstack-arm64-repo.patch b/patches/opnfv-fuel/0004-salt.sh-user-data-Add-Saltstack-arm64-repo.patch
new file mode 100644
index 00000000..909b1705
--- /dev/null
+++ b/patches/opnfv-fuel/0004-salt.sh-user-data-Add-Saltstack-arm64-repo.patch
@@ -0,0 +1,45 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Tue, 11 Jul 2017 18:57:57 +0200
+Subject: [PATCH] salt.sh, user-data: Add Saltstack arm64 repo
+
+FIXME: Use https for fetching GPG repo key.
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ mcp/scripts/salt.sh | 4 ++++
+ mcp/scripts/user-data.template | 9 +++++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/mcp/scripts/salt.sh b/mcp/scripts/salt.sh
+index c876450..bb4f6cc 100755
+--- a/mcp/scripts/salt.sh
++++ b/mcp/scripts/salt.sh
+@@ -18,6 +18,10 @@ ssh ${SSH_OPTS} ubuntu@${SALT_MASTER} bash -s << SALT_INSTALL_END
+ ln -s /root/fuel/mcp/reclass /srv/salt/reclass
+
+ cd /srv/salt/scripts
++ if [ "\$(uname -i)" = "aarch64" ]; then
++ # NOTE(armband): On AArch64, skip creating apt source list definitions (-r)
++ export BOOTSTRAP_SALTSTACK_OPTS=" -r -dX stable 2016.3 "
++ fi
+ MASTER_HOSTNAME=cfg01.${CLUSTER_DOMAIN} DISTRIB_REVISION=nightly ./salt-master-init.sh
+ salt-key -Ay
+
+diff --git a/mcp/scripts/user-data.template b/mcp/scripts/user-data.template
+index 811a58c..03ce35e 100644
+--- a/mcp/scripts/user-data.template
++++ b/mcp/scripts/user-data.template
+@@ -1,6 +1,11 @@
+ #!/bin/bash
+-wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
+-echo "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest xenial main" > /etc/apt/sources.list.d/salt.list
++if [ "$(uname -i)" = "aarch64" ]; then
++ wget -O - http://linux.enea.com/saltstack/apt/ubuntu/16.04/arm64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
++ echo "deb http://linux.enea.com/saltstack/apt/ubuntu/16.04/arm64/latest xenial main" > /etc/apt/sources.list.d/salt.list
++else
++ wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -
++ echo "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/latest xenial main" > /etc/apt/sources.list.d/salt.list
++fi
+ apt update
+ apt-get install -y salt-minion
+ rm /etc/salt/minion_id
diff --git a/patches/opnfv-fuel/0005-salt.sh-Clone-armband-repo-apply-patches-from-it.patch b/patches/opnfv-fuel/0005-salt.sh-Clone-armband-repo-apply-patches-from-it.patch
new file mode 100644
index 00000000..6a25af97
--- /dev/null
+++ b/patches/opnfv-fuel/0005-salt.sh-Clone-armband-repo-apply-patches-from-it.patch
@@ -0,0 +1,32 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Tue, 11 Jul 2017 19:43:39 +0200
+Subject: [PATCH] salt.sh: Clone armband repo, apply patches from it
+
+FIXME: Revise the patching mechanism, make things more dynamic.
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ mcp/scripts/salt.sh | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/mcp/scripts/salt.sh b/mcp/scripts/salt.sh
+index bb4f6cc..8bd3592 100755
+--- a/mcp/scripts/salt.sh
++++ b/mcp/scripts/salt.sh
+@@ -15,6 +15,16 @@ ssh ${SSH_OPTS} ubuntu@${SALT_MASTER} bash -s << SALT_INSTALL_END
+
+ svn export --force https://github.com/salt-formulas/salt-formulas/trunk/deploy/scripts /srv/salt/scripts
+ git clone --depth=1 --recurse-submodules https://git.opnfv.org/fuel
++ # NOTE(armband): no depth speedup on http
++ git clone http://git.opnfv.org/armband
++
++ # For patch applying purposes (workaround for empty git config)
++ export GIT_COMMITTER_NAME="OPNFV Armband"
++ export GIT_COMMITTER_EMAIL="armband@enea.com"
++ git -C /root/fuel am -3 --patch-format=mbox \
++ /root/armband/patches/opnfv-fuel/*.patch
++ git -C /root/fuel/mcp/reclass/classes/system am -3 --patch-format=mbox \
++ /root/armband/patches/reclass-system-salt-model/*.patch
+ ln -s /root/fuel/mcp/reclass /srv/salt/reclass
+
+ cd /srv/salt/scripts
diff --git a/patches/opnfv-fuel/0006-classes-virtual-AArch64-virtio-pci-net-sync.patch b/patches/opnfv-fuel/0006-classes-virtual-AArch64-virtio-pci-net-sync.patch
new file mode 100644
index 00000000..dc839117
--- /dev/null
+++ b/patches/opnfv-fuel/0006-classes-virtual-AArch64-virtio-pci-net-sync.patch
@@ -0,0 +1,318 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Tue, 11 Jul 2017 18:06:14 +0200
+Subject: [PATCH] classes: virtual: AArch64: virtio-pci-net sync
+
+grep -e "ens[[:digit:]]" -R . -l | \
+ xargs sed -i \
+ -e 's/ens3/enp2s1/g' \
+ -e 's/ens4/enp2s2/g' \
+ -e 's/ens5/enp2s3/g' \
+ -e 's/ens6/enp2s4/g'
+
+Since AArch64 will be using virtio-net-pci NIC model for guests,
+predictable interface naming yields a slightly different scheme.
+
+Update all configuration to reflect this.
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ .../classes/cluster/virtual-mcp-ocata-odl/infra/config.yml | 2 +-
+ .../cluster/virtual-mcp-ocata-odl/opendaylight/control.yml | 2 +-
+ .../classes/cluster/virtual-mcp-ocata-odl/openstack/compute.yml | 8 ++++----
+ .../classes/cluster/virtual-mcp-ocata-odl/openstack/control.yml | 4 ++--
+ .../classes/cluster/virtual-mcp-ocata-odl/openstack/gateway.yml | 8 ++++----
+ .../classes/cluster/virtual-mcp-ocata-ovs-dpdk/infra/config.yml | 6 +++---
+ .../cluster/virtual-mcp-ocata-ovs-dpdk/openstack/compute.yml | 8 ++++----
+ .../cluster/virtual-mcp-ocata-ovs-dpdk/openstack/control.yml | 4 ++--
+ .../cluster/virtual-mcp-ocata-ovs-dpdk/openstack/gateway.yml | 8 ++++----
+ .../classes/cluster/virtual-mcp-ocata-ovs/infra/config.yml | 2 +-
+ .../classes/cluster/virtual-mcp-ocata-ovs/openstack/compute.yml | 8 ++++----
+ .../classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml | 4 ++--
+ .../classes/cluster/virtual-mcp-ocata-ovs/openstack/gateway.yml | 8 ++++----
+ 13 files changed, 36 insertions(+), 36 deletions(-)
+
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/infra/config.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/infra/config.yml
+index 4fbc787..61239ab 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/infra/config.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/infra/config.yml
+@@ -28,7 +28,7 @@ parameters:
+ linux:
+ network:
+ interface:
+- ens4:
++ enp2s2:
+ enabled: true
+ type: eth
+ proto: static
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/opendaylight/control.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/opendaylight/control.yml
+index 6c6640a..a9bda9e 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/opendaylight/control.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/opendaylight/control.yml
+@@ -11,7 +11,7 @@ parameters:
+ linux:
+ network:
+ interface:
+- ens4:
++ enp2s2:
+ enabled: true
+ type: eth
+ proto: static
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/compute.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/compute.yml
+index 97eda6c..1948a4e 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/compute.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/compute.yml
+@@ -10,9 +10,9 @@ classes:
+ - cluster.virtual-mcp-ocata-odl
+ parameters:
+ _param:
+- primary_interface: ens4
+- tenant_interface: ens5
+- external_interface: ens6
++ primary_interface: enp2s2
++ tenant_interface: enp2s3
++ external_interface: enp2s4
+ interface_mtu: 9000
+ linux_system_codename: xenial
+ loopback_device_size: 10
+@@ -52,7 +52,7 @@ parameters:
+ interface:
+ dhcp_int:
+ enabled: true
+- name: ens3
++ name: enp2s1
+ proto: dhcp
+ type: eth
+ mtu: ${_param:interface_mtu}
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/control.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/control.yml
+index 17c22c5..5a63cd6 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/control.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/control.yml
+@@ -40,13 +40,13 @@ parameters:
+ version: latest
+ network:
+ interface:
+- ens4:
++ enp2s2:
+ enabled: true
+ type: eth
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
+- ens6:
++ enp2s4:
+ enabled: true
+ type: eth
+ proto: static
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/gateway.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/gateway.yml
+index 4ea51f3..6486eca 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/gateway.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-odl/openstack/gateway.yml
+@@ -6,9 +6,9 @@ classes:
+ - cluster.virtual-mcp-ocata-odl
+ parameters:
+ _param:
+- primary_interface: ens4
+- tenant_interface: ens5
+- external_interface: ens6
++ primary_interface: enp2s2
++ tenant_interface: enp2s3
++ external_interface: enp2s4
+ interface_mtu: 9000
+ linux_system_codename: xenial
+ neutron_agents:
+@@ -32,7 +32,7 @@ parameters:
+ interface:
+ dhcp_int:
+ enabled: true
+- name: ens3
++ name: enp2s1
+ proto: dhcp
+ type: eth
+ mtu: ${_param:interface_mtu}
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/infra/config.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/infra/config.yml
+index 5932085..efde4b9 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/infra/config.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/infra/config.yml
+@@ -27,7 +27,7 @@ parameters:
+ linux:
+ network:
+ interface:
+- ens4:
++ enp2s2:
+ enabled: true
+ type: eth
+ proto: static
+@@ -50,14 +50,14 @@ parameters:
+ single_address: 172.16.10.105
+ tenant_address: 10.1.0.105
+ external_address: 10.16.0.105
+- dpdk0_name: ens5
++ dpdk0_name: enp2s3
+ dpdk0_pci: '"0000:00:05.0"'
+ openstack_compute_node02:
+ params:
+ single_address: 172.16.10.106
+ tenant_address: 10.1.0.106
+ external_address: 10.16.0.106
+- dpdk0_name: ens5
++ dpdk0_name: enp2s3
+ dpdk0_pci: '"0000:00:05.0"'
+ openstack_gateway_node01:
+ params:
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/compute.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/compute.yml
+index c23ca7f..b98d286 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/compute.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/compute.yml
+@@ -12,9 +12,9 @@ classes:
+ - cluster.virtual-mcp-ocata-ovs-dpdk
+ parameters:
+ _param:
+- primary_interface: ens4
+- tenant_interface: ens5
+- external_interface: ens6
++ primary_interface: enp2s2
++ tenant_interface: enp2s3
++ external_interface: enp2s4
+ interface_mtu: 9000
+ linux_system_codename: xenial
+ loopback_device_size: 10
+@@ -51,7 +51,7 @@ parameters:
+ interface:
+ dhcp_int:
+ enabled: true
+- name: ens3
++ name: enp2s1
+ proto: dhcp
+ type: eth
+ mtu: ${_param:interface_mtu}
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/control.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/control.yml
+index b85f085..e762da4 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/control.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/control.yml
+@@ -40,13 +40,13 @@ parameters:
+ version: latest
+ network:
+ interface:
+- ens4:
++ enp2s2:
+ enabled: true
+ type: eth
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
+- ens6:
++ enp2s4:
+ enabled: true
+ type: eth
+ proto: static
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/gateway.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/gateway.yml
+index e102c10..6600a36 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/gateway.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs-dpdk/openstack/gateway.yml
+@@ -6,9 +6,9 @@ classes:
+ - cluster.virtual-mcp-ocata-ovs-dpdk
+ parameters:
+ _param:
+- primary_interface: ens4
+- tenant_interface: ens5
+- external_interface: ens6
++ primary_interface: enp2s2
++ tenant_interface: enp2s3
++ external_interface: enp2s4
+ interface_mtu: 9000
+ linux_system_codename: xenial
+ neutron:
+@@ -22,7 +22,7 @@ parameters:
+ interface:
+ dhcp_int:
+ enabled: true
+- name: ens3
++ name: enp2s1
+ proto: dhcp
+ type: eth
+ mtu: ${_param:interface_mtu}
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/infra/config.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/infra/config.yml
+index 66ad53b..7daee82 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/infra/config.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/infra/config.yml
+@@ -27,7 +27,7 @@ parameters:
+ linux:
+ network:
+ interface:
+- ens4:
++ enp2s2:
+ enabled: true
+ type: eth
+ proto: static
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/compute.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/compute.yml
+index a86a7c6..b3fe914 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/compute.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/compute.yml
+@@ -10,9 +10,9 @@ classes:
+ - cluster.virtual-mcp-ocata-ovs
+ parameters:
+ _param:
+- primary_interface: ens4
+- tenant_interface: ens5
+- external_interface: ens6
++ primary_interface: enp2s2
++ tenant_interface: enp2s3
++ external_interface: enp2s4
+ interface_mtu: 9000
+ linux_system_codename: xenial
+ loopback_device_size: 10
+@@ -47,7 +47,7 @@ parameters:
+ interface:
+ dhcp_int:
+ enabled: true
+- name: ens3
++ name: enp2s1
+ proto: dhcp
+ type: eth
+ mtu: ${_param:interface_mtu}
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml
+index ae103cd..cc99156 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/control.yml
+@@ -40,13 +40,13 @@ parameters:
+ version: latest
+ network:
+ interface:
+- ens4:
++ enp2s2:
+ enabled: true
+ type: eth
+ proto: static
+ address: ${_param:single_address}
+ netmask: 255.255.255.0
+- ens6:
++ enp2s4:
+ enabled: true
+ type: eth
+ proto: static
+diff --git a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/gateway.yml b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/gateway.yml
+index 9257d86..e148d77 100644
+--- a/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/gateway.yml
++++ b/mcp/reclass/classes/cluster/virtual-mcp-ocata-ovs/openstack/gateway.yml
+@@ -6,9 +6,9 @@ classes:
+ - cluster.virtual-mcp-ocata-ovs
+ parameters:
+ _param:
+- primary_interface: ens4
+- tenant_interface: ens5
+- external_interface: ens6
++ primary_interface: enp2s2
++ tenant_interface: enp2s3
++ external_interface: enp2s4
+ interface_mtu: 9000
+ linux_system_codename: xenial
+ neutron:
+@@ -20,7 +20,7 @@ parameters:
+ interface:
+ dhcp_int:
+ enabled: true
+- name: ens3
++ name: enp2s1
+ proto: dhcp
+ type: eth
+ mtu: ${_param:interface_mtu}
diff --git a/patches/reclass-system-salt-model/0001-linux-system-repo-mcp-Add-Armband-repos.patch b/patches/reclass-system-salt-model/0001-linux-system-repo-mcp-Add-Armband-repos.patch
new file mode 100644
index 00000000..3fa4b7cd
--- /dev/null
+++ b/patches/reclass-system-salt-model/0001-linux-system-repo-mcp-Add-Armband-repos.patch
@@ -0,0 +1,85 @@
+From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+Date: Mon, 10 Jul 2017 15:31:08 +0000
+Subject: [PATCH] linux/system/repo/mcp: Add Armband repos
+
+FIXME: Use https for fetching Armband GPG key!
+
+Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
+---
+ linux/system/repo/mcp/extra.yml | 9 +++++++
+ linux/system/repo/mcp/openstack.yml | 48 +++++++++++++++++++++++++++++++++++++
+ 2 files changed, 57 insertions(+)
+
+diff --git a/linux/system/repo/mcp/extra.yml b/linux/system/repo/mcp/extra.yml
+index 826969b..01b9cc5 100644
+--- a/linux/system/repo/mcp/extra.yml
++++ b/linux/system/repo/mcp/extra.yml
+@@ -14,3 +14,12 @@ parameters:
+ - pin: 'release a=${_param:linux_system_repo_mcp_extra_version}'
+ priority: 1100
+ package: '*'
++ armband_mcp_extra:
++ source: "deb [arch=arm64] http://linux.enea.com/apt-mk/${_param:linux_system_codename}/ ${_param:linux_system_repo_mcp_extra_version} extra"
++ architectures: arm64
++ key_url: "http://linux.enea.com/apt-mk/public.gpg"
++ clean_file: true
++ pin:
++ - pin: 'release a=${_param:linux_system_repo_mcp_extra_version}'
++ priority: 1100
++ package: '*'
+diff --git a/linux/system/repo/mcp/openstack.yml b/linux/system/repo/mcp/openstack.yml
+index 2235b2c..be8ffd2 100644
+--- a/linux/system/repo/mcp/openstack.yml
++++ b/linux/system/repo/mcp/openstack.yml
+@@ -53,3 +53,51 @@ parameters:
+ - pin: 'release a=${_param:linux_system_repo_mk_openstack_version}'
+ priority: 1100
+ package: '*'
++ armband_openstack:
++ source: "deb http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename} ${_param:openstack_version} main"
++ architectures: arm64
++ key_url: "http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename}/archive-mcp${_param:openstack_version}.key"
++ pin:
++ - pin: 'release a=${_param:openstack_version}'
++ priority: 1100
++ package: '*'
++ armband_openstack_hotfix:
++ source: "deb http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename} ${_param:openstack_version}-hotfix main"
++ architectures: arm64
++ key_url: "http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename}/archive-mcp${_param:openstack_version}.key"
++ pin:
++ - pin: 'release a=${_param:openstack_version}-hotfix'
++ priority: 1100
++ package: '*'
++ armband_openstack_security:
++ source: "deb http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename} ${_param:openstack_version}-security main"
++ architectures: arm64
++ key_url: "http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename}/archive-mcp${_param:openstack_version}.key"
++ pin:
++ - pin: 'release a=${_param:openstack_version}-security'
++ priority: 1100
++ package: '*'
++ armband_openstack_updates:
++ source: "deb http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename} ${_param:openstack_version}-updates main"
++ architectures: arm64
++ key_url: "http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename}/archive-mcp${_param:openstack_version}.key"
++ pin:
++ - pin: 'release a=${_param:openstack_version}-updates'
++ priority: 1100
++ package: '*'
++ armband_openstack_holdback:
++ source: "deb http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename} ${_param:openstack_version}-holdback main"
++ architectures: arm64
++ key_url: "http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename}/archive-mcp${_param:openstack_version}.key"
++ pin:
++ - pin: 'release a=${_param:openstack_version}-holdback'
++ priority: 1100
++ package: '*'
++ armband_mk_openstack:
++ source: "deb [arch=arm64] http://linux.enea.com/apt-mk/${_param:linux_system_codename}/ ${_param:linux_system_repo_mk_openstack_version} ${_param:openstack_version}"
++ architectures: arm64
++ key_url: "http://linux.enea.com/apt-mk/public.gpg"
++ pin:
++ - pin: 'release a=${_param:linux_system_repo_mk_openstack_version}'
++ priority: 1100
++ package: '*'