2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-30 09:36:41 +00:00

Merge pull request #6201 from bybai/extra_param

confignetwork extra params support and multiple ipv4 address ethernet nic support using nmcli
This commit is contained in:
zet809 2019-04-12 14:51:17 +08:00 committed by GitHub
commit da0790d35d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 162 additions and 58 deletions

View File

@ -31,6 +31,12 @@ networkmanager_active=0
checkservicestatus NetworkManager > /dev/null
if [ $? -eq 0 ]; then
networkmanager_active=1
else
#In RH8 postscripts stage, NetworkManager is active but nmcli cannot modify NIC configure file
ps -ef|grep -v grep|grep NetworkManager >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
networkmanager_active=2
fi
fi
str_conf_file=""
str_conf_file_xcatbak=""
@ -40,7 +46,7 @@ function configipv4(){
str_v4ip=$2
str_v4net=$3
str_v4mask=$4
num_v4num=$5
num_v4num=$5 #If NIC has multiple IPs, the ordinal number of IP is num_v4num
str_extra_params=$6
str_nic_mtu=$7
@ -131,18 +137,45 @@ function configipv4(){
# Write the info to the ifcfg file for redhat
con_name="xcat-"${str_if_name}
str_conf_file=""
if [ $num_v4num -ne 0 ]; then
str_if_name=${str_if_name}:${num_v4num}
fi
str_conf_file="/etc/sysconfig/network-scripts/ifcfg-${str_if_name}"
if [ $networkmanager_active -eq 1 ]; then
is_nmcli_connection_exist $con_name
if [ $? -eq 0 ]; then
tmp_con_name=$con_name"-tmp"
nmcli con modify $con_name connection.id $tmp_con_name
if [ $num_v4num -eq 0 ]; then
is_nmcli_connection_exist $con_name
if [ $? -eq 0 ]; then
tmp_con_name=$con_name"-tmp"
nmcli con modify $con_name connection.id $tmp_con_name
fi
nmcli con add type ethernet con-name $con_name ifname ${str_if_name} ipv4.method manual ipv4.addresses ${str_v4ip}/${str_prefix} connection.autoconnect-priority 9
else
nmcli con modify $con_name +ipv4.addresses ${str_v4ip}/${str_prefix}
fi
nmcli con add type ethernet con-name $con_name ifname ${str_if_name} ipv4.method manual ipv4.addresses ${str_v4ip}/${str_prefix} connection.autoconnect-priority 9
str_conf_file="/etc/sysconfig/network-scripts/ifcfg-xcat-${str_if_name}"
str_conf_file_1="/etc/sysconfig/network-scripts/ifcfg-xcat-${str_if_name}-1"
if [ -f $str_conf_file_1 ]; then
grep -x "NAME=$con_name" $str_conf_file_1 >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
str_conf_file=$str_conf_file_1
fi
fi
elif [ $networkmanager_active -eq 2 ]; then
str_conf_file="/etc/sysconfig/network-scripts/ifcfg-xcat-${str_if_name}"
if [ $num_v4num -eq 0 ]; then
echo "DEVICE=${str_if_name}" > $str_conf_file
echo "BOOTPROTO=none" >> $str_conf_file
echo "IPADDR=${str_v4ip}" >> $str_conf_file
echo "NETMASK=${str_v4mask}" >> $str_conf_file
echo "NAME=xcat-${str_if_name}" >> $str_conf_file
echo "ONBOOT=yes" >> $str_conf_file
echo "AUTOCONNECT_PRIORITY=9" >> $str_conf_file
else
echo "IPADDR$num_v4num=${str_v4ip}" >> $str_conf_file
echo "NETMASK$num_v4num=${str_v4mask}" >> $str_conf_file
fi
else
#If using network service, the NIC alias device format is <NIC>:<num_v4num> like eth0:1
if [ $num_v4num -ne 0 ]; then
str_if_name=${str_if_name}:${num_v4num}
fi
str_conf_file="/etc/sysconfig/network-scripts/ifcfg-${str_if_name}"
echo "DEVICE=${str_if_name}" > $str_conf_file
echo "BOOTPROTO=none" >> $str_conf_file
echo "NM_CONTROLLED=no" >> $str_conf_file
@ -152,26 +185,23 @@ function configipv4(){
fi
if [ "$str_nic_mtu" != "$str_default_token" ]; then
if [ $networkmanager_active -eq 1 ]; then
nmcli con modify $con_name mtu $str_nic_mtu
nmcli con modify $con_name mtu $str_nic_mtu
else
echo "MTU=${str_nic_mtu}" >> $str_conf_file
fi
fi
fi
if [[ ${str_if_name} == [a-zA-Z0-9]*.[0-9]* ]]; then
echo "VLAN=yes" >> $str_conf_file
fi
#add extra params
i=0
while [ $i -lt ${#array_extra_param_names[@]} ]
do
name="${array_extra_param_names[$i]}"
value="${array_extra_param_values[$i]}"
echo " $i: name=$name value=$value"
echo "${name}=${value}" >> $str_conf_file
i=$((i+1))
done
#add extra params
i=0
while [ $i -lt ${#array_extra_param_names[@]} ]
do
name="${array_extra_param_names[$i]}"
value="${array_extra_param_values[$i]}"
echo "${name}=${value}" >> $str_conf_file
i=$((i+1))
done
fi
}
@ -341,7 +371,7 @@ function add_ip_temporary(){
else
str_label=''
ip addr show dev $str_temp_name | grep inet | grep "global" | grep -v ':' | grep "${str_temp_name}"
if [ $? -eq 0 ];then
if [ $? -eq 0 ] && [ $networkmanager_active -eq 0 ]; then
for num_i in {1..1000}
do
ip addr show dev $str_temp_name | grep inet | grep "global" | grep ":${num_i}"
@ -630,6 +660,9 @@ elif [ "$1" = "-s" ];then
con_name="xcat-install-"${str_inst_nic}
str_inst_prefix=$(v4mask2prefix ${str_inst_mask})
str_conf_file="/etc/sysconfig/network-scripts/ifcfg-${str_inst_nic}"
if [ $networkmanager_active -eq 2 ]; then
str_conf_file="/etc/sysconfig/network-scripts/ifcfg-xcat-install-${str_inst_nic}"
fi
if [ $networkmanager_active -eq 1 ]; then
is_nmcli_connection_exist "$con_name"
if [ $? -eq 0 ]; then
@ -637,20 +670,31 @@ elif [ "$1" = "-s" ];then
nmcli con modify $con_name connection.id $tmp_con_name
fi
nmcli con add type ethernet con-name $con_name ifname ${str_inst_nic} ipv4.method manual ipv4.addresses ${str_inst_ip}/${str_inst_prefix} connection.autoconnect-priority 9
str_conf_file_1="/etc/sysconfig/network-scripts/ifcfg-xcat-${str_if_name}-1"
if [ -f $str_conf_file_1 ]; then
grep $con_name $str_conf_file_1 >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
$str_conf_file=$str_conf_file_1
fi
fi
else
echo "DEVICE=${str_inst_nic}" > $str_conf_file
echo "IPADDR=${str_inst_ip}" >> $str_conf_file
echo "NETMASK=${str_inst_mask}" >> $str_conf_file
echo "BOOTPROTO=none" >> $str_conf_file
echo "ONBOOT=yes" >> $str_conf_file
echo "NAME=xcat-install-${str_inst_nic}" >> $str_conf_file
echo "HWADDR=${str_inst_mac}" >> $str_conf_file
fi
if [ $networkmanager_active -eq 2 ]; then
echo "AUTOCONNECT_PRIORITY=9" >> $str_conf_file
fi
if [ -n "${str_inst_mtu}" ];then
if [ $networkmanager_active -eq 1 ]; then
nmcli con modify $con_name mtu ${str_inst_mtu}
if [ $networkmanager_active -eq 1 ]; then
nmcli con modify $con_name mtu ${str_inst_mtu}
else
echo "MTU=${str_inst_mtu}" >> $str_conf_file
fi
fi
fi
if [ -n "$str_inst_gateway" ];then
grep -i "GATEWAY" /etc/sysconfig/network
@ -660,17 +704,16 @@ elif [ "$1" = "-s" ];then
echo "GATEWAY=${str_inst_gateway}" >> /etc/sysconfig/network
fi
fi
#add extra params
i=0
while [ $i -lt ${#array_extra_param_names[@]} ]
do
name="${array_extra_param_names[$i]}"
value="${array_extra_param_values[$i]}"
echo " $i: name=$name value=$value"
echo "${name}=${value}" >> $str_conf_file
i=$((i+1))
done
#add extra params
i=0
while [ $i -lt ${#array_extra_param_names[@]} ]
do
name="${array_extra_param_names[$i]}"
value="${array_extra_param_values[$i]}"
echo "$i: name=$name value=$value"
echo "${name}=${value}" >> $str_conf_file
i=$((i+1))
done
hostname $NODE
if [ -f "/etc/hostname" ]; then
@ -692,9 +735,10 @@ elif [ "$1" = "-s" ];then
else
ip link set dev $str_inst_nic down
fi
if [ $networkmanager_active -eq 1 ]; then
if [ $networkmanager_active -eq 1 ]; then
nmcli con reload
nmcli con up $con_name
else
else
ifup $str_inst_nic
fi
if [ $? -ne 0 ]; then
@ -1111,11 +1155,12 @@ else
if [ $reboot_nic_bool -eq 1 ]; then
if_state=0
echo "bring up ip"
if [ $networkmanager_active -eq 1 ]; then
if [ $networkmanager_active -eq 1 ]; then
nmcli con reload
nmcli con up $con_name
else
else
ifup $str_nic_name
fi
fi
if [ $? -ne 0 ]; then
if_state=$(wait_for_ifstate $str_nic_name UP 20 5)
fi

View File

@ -63,7 +63,9 @@ function get_nic_cfg_file_content {
elif [ $is_debian -eq 1 ]; then
cfg_file="$nwdir/${cfg_dev}"
fi
if [ "$networkmanager_active" = "1" ]; then
#TODO:this is networkmanager_active=2
ps -ef|grep -v grep|grep NetworkManager >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
$ip address show dev ${cfg_dev}| $sed -e 's/^/[Ethernet] >> /g' | log_lines info
else
if [ -f $cfg_file ]; then
@ -568,7 +570,9 @@ function configure_nicdevice {
else
create_bridge_interface ifname=$nic_dev _brtype=$nic_dev_type _port=$base_nic_dev _pretype=$base_nic_type
fi
elif [ "$networkmanager_active" = "1" ]; then
elif [ "$networkmanager_active" = "2" ]; then
create_bridge_interface ifname=$nic_dev _brtype=$nic_dev_type _port=$base_nic_dev _pretype=$base_nic_type
else
create_bridge_interface_nmcli ifname=$nic_dev _brtype=$nic_dev_type _port=$base_nic_dev _pretype=$base_nic_type _ipaddr=$ipaddrs
fi
if [ $? -ne 0 ]; then
@ -585,9 +589,9 @@ function configure_nicdevice {
vlanname=`echo "$nic_dev" | $sed -e 's/^\(.*\)vla\?n\?\([0-9]\+\)$/\1/'`
fi
ipaddrs=$(find_nic_ips $nic_dev)
if [ "$networkmanager_active" = "0" ]; then
if [ "$networkmanager_active" != "1" ]; then
create_vlan_interface ifname=$vlanname vlanid=$vlanid
elif [ "$networkmanager_active" = "1" ]; then
else
create_vlan_interface_nmcli ifname=$vlanname vlanid=$vlanid ipaddrs=$ipaddrs next_nic=$is_mid_device
fi
if [ $? -ne 0 ]; then
@ -596,9 +600,9 @@ function configure_nicdevice {
fi
#configure bond
elif [ x"$nic_dev_type" = "xbond" ]; then
if [ "$networkmanager_active" = "0" ]; then
if [ "$networkmanager_active" != "1" ]; then
create_bond_interface ifname=$nic_dev slave_ports=$base_nic_for_bond slave_type=$base_nic_type
elif [ "$networkmanager_active" = "1" ]; then
else
create_bond_interface_nmcli bondname=$nic_dev slave_ports=$base_nic_for_bond slave_type=$base_nic_type _ipaddr=$ipaddrs next_nic=$is_mid_device
fi
if [ $? -ne 0 ]; then
@ -655,13 +659,15 @@ if [ $boot_install_nic -eq 1 ];then
fi
#check if using NetworkManager or network service
networkmanager_active=2
networkmanager_active=3
check_NetworkManager_or_network_service
is_active=$?
if [ $is_active -eq 0 ]; then
networkmanager_active=0
elif [ $is_active -eq 1 ]; then
networkmanager_active=1
elif [ $is_active -eq 2 ]; then
networkmanager_active=2
else
exit 1
fi

View File

@ -1691,6 +1691,7 @@ function create_vlan_interface_nmcli {
local _netmask=""
local _mtu=""
local next_nic=""
rc=0
# in case it's on top of bond, we need to migrate ip from its
# member vlan ports.
# parser input arguments
@ -1750,9 +1751,14 @@ function create_vlan_interface_nmcli {
tmp_con_name=$con_name"-tmp"
$nmcli con modify $con_name connection.id $tmp_con_name
fi
#create VLAN connetion
$nmcli con add type vlan con-name $con_name dev $ifname id $(( 10#$vlanid )) $_ipaddrs $_mtu connection.autoconnect-priority 9
log_info "create NetworkManager connection for $ifname.$vlanid"
#add extra params
add_extra_params_nmcli $ifname.$vlanid $con_name
[ $? -ne 0 ] && rc=1
if [ -z "$next_nic" ]; then
$nmcli con up $con_name
is_connection_activate_intime $con_name
@ -1770,7 +1776,48 @@ function create_vlan_interface_nmcli {
$nmcli con delete $tmp_con_name
fi
$ip address show dev $ifname.$vlanid | $sed -e 's/^/[vlan] >> /g' | log_lines info
return 0
return $rc
}
###############################################################################
#
# add extra params for nmcli connection
#
# input : $1 nic device
# $2 nmcli connection name
# return : 1 error
# 0 successful
#
###############################################################################
function add_extra_params_nmcli {
nicdev=$1
con_name=$2
rc=0
str_conf_file="/etc/sysconfig/network-scripts/ifcfg-${con_name}"
str_conf_file_1="/etc/sysconfig/network-scripts/ifcfg-${con_name}-1"
if [ -f $str_conf_file_1 ]; then
grep -x "NAME=$con_name" $str_conf_file_1 >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
str_conf_file=$str_conf_file_1
fi
fi
#query extra params
query_extra_params $nicdev
i=0
while [ $i -lt ${#array_extra_param_names[@]} ]
do
name="${array_extra_param_names[$i]}"
value="${array_extra_param_values[$i]}"
if [ -n "$name" -a -n "$value" ]; then
echo "$name=$value" >> $str_conf_file
else
log_error "invalid extra params $name $value, please check nics.nicextraparams"
rc=1
fi
i=$((i+1))
done
$nmcli con reload $str_conf_file
return $rc
}
###############################################################################
@ -1951,10 +1998,13 @@ function create_bridge_interface_nmcli {
$nmcli con mod $xcat_con_name ipv4.method manual ipv4.addresses $ipv4_addr/$str_prefix;
fi
# add extra params
add_extra_params_nmcli $ifname $xcat_con_name
[ $? -ne 0 ] && rc=1
# bring up interface formally
log_info "$nmcli con up $xcat_con_name"
$nmcli con up $xcat_con_name
rc=$?
[ $? -ne 0 ] && rc=1
log_info "$nmcli con up $xcat_slave_con"
$nmcli con up $xcat_slave_con
# If bridge interface is active, delete tmp old connection
@ -1983,7 +2033,7 @@ function create_bridge_interface_nmcli {
$nmcli con delete $tmp_slave_con_name
fi
wait_for_ifstate $ifname UP 20 40
rc=$?
[ $? -ne 0 ] && rc=1
$ip address show dev $ifname| $sed -e 's/^/[bridge] >> /g' | log_lines info
fi
@ -2176,8 +2226,12 @@ function create_bond_interface_nmcli {
break
fi
done
# bring up interface formally
invalid_extra_params=0
if [ $rc -ne 1 ]; then
# add extra params
add_extra_params_nmcli $bondname $xcat_con_name
[ $? -ne 0 ] && invalid_extra_params=1
# bring up interface formally
log_info "$nmcli con up $xcat_con_name"
$nmcli con up $xcat_con_name
if [ -z "$next_nic" ]; then
@ -2194,8 +2248,6 @@ function create_bond_interface_nmcli {
$ip address show dev $bondname| $sed -e 's/^/[bond] >> /g' | log_lines info
fi
fi
else
rc=0
fi
fi
@ -2231,6 +2283,7 @@ function create_bond_interface_nmcli {
delete_bond_slaves_con "$tmp_slave_con_names"
fi
fi
[ $invalid_extra_params -eq 1 ] && rc=$invalid_extra_params
return $rc
}
######################################################################