tripleo-heat-templates/extraconfig/pre_network/contrail/compute_pre_network.yaml

163 lines
5.4 KiB
YAML

heat_template_version: pike
# NOTE: You don't need to pass the parameter explicitly from the
# parent template, it can be specified via the parameter_defaults
# in the resource_registry instead, if you want to override the default
# and/or share values with other templates in the tree.
parameters:
ContrailRepo:
type: string
default: ''
ContrailVrouterPhysicalInterface:
default: 'eth0'
description: vRouter physical interface
type: string
ContrailVlanParentInterface:
default: ''
description: Parent interface of vlan interface
type: string
ContrailBondInterface:
default: ''
description: Bond interface name
type: string
ContrailBondInterfaceMembers:
default: ''
description: Bond interface members
type: string
ContrailBondMode:
default: '4'
description: Bond Mode
type: string
ContrailBondPolicy:
default: '1'
description: Bond Policy
type: string
RoleParameters:
type: json
description: Parameters specific to the role
default: {}
ServiceNames:
type: comma_delimited_list
default: []
server:
type: string
description: >
This template installs the Contrail kernel module packages in order
to bring vhost0 interface up. Vhost0 interface must be up before
os-net-config takes over.
resources:
ContrailVrouterModuleDeployment:
type: OS::Heat::SoftwareDeployment
properties:
name: ContrailVrouterModuleDeployment
server: {get_param: server}
config: {get_resource: ContrailVrouterModuleConfig}
input_values:
phy_int: {get_param: ContrailVrouterPhysicalInterface}
bond_int: {get_param: ContrailBondInterface}
bond_int_members: {get_param: ContrailBondInterfaceMembers}
vlan_parent: {get_param: ContrailVlanParentInterface}
contrail_repo: {get_param: ContrailRepo}
bond_mode: {get_param: ContrailBondMode}
bond_policy: {get_param: ContrailBondPolicy}
actions: ['CREATE'] # Only do this on CREATE
ContrailVrouterModuleConfig:
type: OS::Heat::SoftwareConfig
properties:
group: script
inputs:
- name: phy_int
- name: bond_int
- name: bond_int_members
- name: vlan_parent
- name: contrail_repo
- name: bond_mode
- name: bond_policy
config: |
#!/bin/bash
phy_int=$phy_int
bond_int=$bond_int
bond_int_members=$bond_int_members
bond_mode=$bond_mode
bond_policy=$bond_policy
vlan_parent=$vlan_parent
contrail_repo=$contrail_repo
if [[ ${contrail_repo} ]]; then
yum install -y contrail-vrouter-utils
fi
function pkt_setup () {
for f in /sys/class/net/$1/queues/rx-*
do
q="$(echo $f | cut -d '-' -f2)"
r=$(($q%32))
s=$(($q/32))
((mask=1<<$r))
str=(`printf "%x" $mask`)
if [ $s -gt 0 ]; then
for ((i=0; i < $s; i++))
do
str+=,00000000
done
fi
echo $str > $f/rps_cpus
done
ifconfig $1 up
}
function insert_vrouter() {
if [ -f /sys/class/net/pkt1/queues/rx-0/rps_cpus ]; then
pkt_setup pkt1
fi
if [ -f /sys/class/net/pkt2/queues/rx-0/rps_cpus ]; then
pkt_setup pkt2
fi
if [ -f /sys/class/net/pkt3/queues/rx-0/rps_cpus ]; then
pkt_setup pkt3
fi
DEV_MAC=$(cat /sys/class/net/${phy_int}/address)
vif --create vhost0 --mac $DEV_MAC
vif --add ${phy_int} --mac $DEV_MAC --vrf 0 --vhost-phys --type physical
vif --add vhost0 --mac $DEV_MAC --vrf 0 --type vhost --xconnect ${phy_int}
ip link set vhost0 up
return 0
}
if [[ ${bond_int} ]]; then
bond_int_member_list=$(echo ${bond_int_members} | tr "," "\n")
ip link add name ${bond_int} type bond
echo ${bond_mode} > /sys/class/net/${bond_int}/bonding/mode
echo ${bond_policy} > /sys/class/net/${bond_int}/bonding/xmit_hash_policy
for member in ${bond_int_member_list}; do
ip link set dev $member master ${bond_int}
done
fi
if [[ ${vlan_parent} ]]; then
vlanId=`echo ${phy_int} | awk -F"vlan" '{print $2}'`
ip link add name ${phy_int} link ${vlan_parent} type vlan id ${vlanId}
fi
if [[ ${contrail_repo} ]]; then
yumdownloader contrail-vrouter --destdir /tmp
cd /tmp
rpm2cpio /tmp/contrail-vrouter*.rpm | cpio -idmv
cp `find /tmp/lib/modules -name vrouter.ko |tail -1` /tmp
insmod /tmp/vrouter.ko
else
modprobe vrouter
fi
insert_vrouter
if [[ `ifconfig ${phy_int} |grep "inet "` ]]; then
def_gw=''
if [[ `ip route show |grep default|grep ${phy_int}` ]]; then
def_gw=`ip route show |grep default|grep ${phy_int}|awk '{print $3}'`
fi
ip=`ifconfig ${phy_int} |grep "inet "|awk '{print $2}'`
mask=`ifconfig ${phy_int} |grep "inet "|awk '{print $4}'`
ip address delete $ip/$mask dev ${phy_int}
ip address add $ip/$mask dev vhost0
if [[ $def_gw ]]; then
ip route add default via $def_gw
fi
fi