summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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: '*'