4502b7cba6
The key_name default is ignored because the parameter is used in some mutually exclusive environments where the default doesn't need to be the same. Change-Id: I77c1a1159fae38d03b0e59b80ae6bee491d734d7 Partial-Bug: 1700664
163 lines
5.4 KiB
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
|