#!/bin/bash


checkip(){
	regex="\b(10)\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\b"
	if ! echo $1 | egrep ${regex} >/dev/null; then
		echo "$1 地址不规范"
		exit
	fi
}


check_iscsiadm(){
	if which iscsiadm > /dev/null 2>&1;then
		$1
		$2
		if which iscsiadm > /dev/null 2>&1;then
			echo "iscsiadm安装未成功"
			exit 1
		fi
	fi
}


select_nic(){
	echo -n > /tmp/nic.tmp
	nic_pool=$(ip link show | awk -F[\ :] '/BROADCAST/{print$3}' | grep -v $(ip route show | awk '/default/{print$5}'))
	if [ $(echo ${nic_pool} | tr " " "\n" | wc -l) -eq 1 ];then
		private_nic=${nic_pool}
		echo "自动选择内网网卡${nic_pool}"
	else
		echo ${nic_pool} | tr " " "\n"
		read -p "无法找到内网网卡，在以上网卡中选择一个并输入 : " private_nic
		if [ -z ${private_nic} ];then
			echo "输入不能为空"
			exit
		fi
		if echo ${nic_pool} | grep -w ${private_nic} > /dev/null 2>&1;then
			echo "你选择的内网网卡是 : ${private_nic}"
		else
			echo "输入的网卡不在范围内"
			exit
		fi
	fi
}


ifcfg_7(){
	if grep IPADDR /etc/sysconfig/network-scripts/ifcfg-${private_nic} > /dev/null 2>&1;then
		echo "该网口已存在ip配置无法自动设置"
		exit
	fi
	read -p "输入需要新增的IP地址: " ip
	checkip ${ip}
	gateway=$(echo ${ip} | awk -F"." '{print$1"."$2"."$3".254"}')
	mac=$(ip addr show dev ${private_nic} | grep "link/ether" | awk '{print$2}')
	cat > /etc/sysconfig/network-scripts/ifcfg-${private_nic} <<INTERFACE
TYPE=Ethernet
BOOTPROTO=static
HWADDR=${mac}
DEFROUTE=yes
NAME=${private_nic}
DEVICE=${private_nic}
ONBOOT=yes
IPADDR=${ip}
NETMASK=255.255.255.0
NM_CONTROLLED=no
INTERFACE
	echo "10.0.0.0/8 via ${gateway} dev ${private_nic}" > /etc/sysconfig/network-scripts/route-${private_nic}
	systemctl restart network
	net_stat=no
	echo -n "内网ip配置完成，测试内网中"
	for times in $(seq 1 20);do
		echo -n "."
		if ping -w 1 -c 1 ${gateway} > /dev/null 2>&1;then
			net_stat=ok
			break
		fi
		sleep 1
	done
	if [ ${net_stat} == "ok" ];then
		echo "测试网络通过"
	else
		echo "测试网络失败，请检查网卡是否正确、链路是否正常"
		exit
	fi

}


ifcfg_8(){
	if grep IPADDR /etc/sysconfig/network-scripts/ifcfg-${private_nic} > /dev/null 2>&1;then
		echo "该网口已存在ip配置无法自动设置"
		exit
	fi
	read -p "输入需要新增的IP地址: " ip
	checkip ${ip}
	gateway=$(echo ${ip} | awk -F"." '{print$1"."$2"."$3".254"}')
	mac=`ip addr show dev ${private_nic} | grep "link/ether" | awk '{print$2}'`
	cat > /etc/sysconfig/network-scripts/ifcfg-${private_nic} <<INTERFACE
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
HWADDR=${mac}
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=${private_nic}
DEVICE=${private_nic}
ONBOOT=yes
IPADDR=${ip}
NETMASK=255.255.255.0
INTERFACE
	echo "10.0.0.0/8 via ${gateway} dev ${private_nic}" > /etc/sysconfig/network-scripts/route-${private_nic}
	nmcli connection reload > /dev/null 2>&1
	nmcli connection up ${private_nic} > /dev/null 2>&1
	net_stat=no
	echo -n "内网ip配置完成，测试内网中"
	for times in $(seq 1 20);do
		echo -n "."
		if ping -w 1 -c 1 ${gateway} > /dev/null 2>&1;then
			net_stat=ok
			break
		fi
		sleep 1
	done
	if [ ${net_stat} == "ok" ];then
		echo "测试网络通过"
	else
		echo "测试网络失败，请检查网卡是否正确、链路是否正常"
		exit
	fi
}

netcfg(){
	net_conf_file=$(ls /etc/netplan/*.yaml)
	if grep ${private_nic} ${net_conf_file} > /dev/null 2>&1;then
		echo "该网口已存在ip配置无法自动设置"
		exit
	fi
	read -p "输入需要新增的IP地址: " ip
	checkip ${ip}
	gateway=$(echo ${ip} | awk -F"." '{print$1"."$2"."$3".254"}')
	indent=$(awk -F"version" '/version/{print$1}' /etc/netplan/*.yaml)
	cat >> ${net_conf_file} <<INTERFACE
${indent}${indent}${private_nic}:
${indent}${indent}${indent}addresses: [${ip}/24]
${indent}${indent}${indent}routes:
${indent}${indent}${indent}${indent}-
${indent}${indent}${indent}${indent}${indent}to: 10.0.0.0/8
${indent}${indent}${indent}${indent}${indent}via: ${gateway}
INTERFACE
	netplan apply
	net_stat=no
	echo -n "内网ip配置完成，测试内网中"
	for times in $(seq 1 20);do
		echo -n "."
		if ping -w 1 -c 1 ${gateway} > /dev/null 2>&1;then
			net_stat=ok
			break
		fi
		sleep 1
	done
	if [ ${net_stat} == "ok" ];then
		echo "测试网络通过"
	else
		echo "测试网络失败，请检查网卡是否正确、链路是否正常"
		exit
	fi
}

interface(){
	if grep ${private_nic} /etc/network/interfaces > /dev/null 2>&1;then
		echo "该网口已存在ip配置无法自动设置"
		exit
	fi
	read -p "输入需要新增的IP地址: " ip
	checkip ${ip}
	gateway=$(echo ${ip} | awk -F"." '{print$1"."$2"."$3".254"}')
	cat >> /etc/network/interfaces <<INTERFACE

auto ${private_nic}
iface ${private_nic} inet static
address ${ip}
netmask 255.255.255.0

post-up ip route add 10.0.0.0/8 via ${gateway} dev ${private_nic}
INTERFACE
	ip link set up dev ${private_nic}
	ip addr add ${ip}/24 dev ${private_nic}
	ip route add 10.0.0.0/8 via ${gateway} dev ${private_nic}
	net_stat=no
	echo -n "内网ip配置完成，测试内网中"
	for times in $(seq 1 20);do
		echo -n "."
		if ping -w 1 -c 1 ${gateway} > /dev/null 2>&1;then
			net_stat=ok
			break
		fi
		sleep 1
	done
	if [ ${net_stat} == "ok" ];then
		echo "测试网络通过"
	else
		echo "测试网络失败，请检查网卡是否正确、链路是否正常"
		exit
	fi
}


mount_storage(){
	read -p "输入存储服务器IP地址: " storage_ip
	checkip ${storage_ip}
	if ping -w 1 -c 1 ${storage_ip} > /dev/null 2>&1;then
		echo "测试到存储服务网络通过"
	else
		echo "测试到存储服务网络问题，需要检查是否开通存储"
		exit
	fi
	read -p "输入存储用户名: " iscsi_user
	if [ -z ${iscsi_user} ];then
		echo "输入为空"
		exit 1
	fi
	read -p "输入存储密码: " iscsi_password
	if [ -z ${iscsi_password} ];then
		echo "输入为空"
		exit 1
	fi
	target=$(iscsiadm -m discovery -t st -p ${storage_ip} | awk '{print$2}')
	iscsiadm -m node --targetname ${target} --portal ${storage_ip}:3260 --op=update --name=node.session.auth.username --value=${iscsi_user}
	iscsiadm -m node --targetname ${target} --portal ${storage_ip}:3260 --op=update --name=node.session.auth.password --value=${iscsi_password}
	iscsiadm -m node -T ${target} -p ${storage_ip} -l
	iscsiadm -m node -T ${target} -p ${storage_ip} --op update -n node.startup -v automatic
}


if grep "CentOS Linux release 7" /etc/redhat-release > /dev/null 2>&1; then
	echo system Centos7
	if ! which iscsiadm > /dev/null 2>&1;then
		yum install iscsi-initiator-utils -y > /dev/null 2>&1
		if ! which iscsiadm > /dev/null 2>&1;then
			echo "iscsiadm安装未成功"
			exit 1
		fi
	fi
	select_nic
	ifcfg_7
	mount_storage
elif grep "CentOS Linux release 8" /etc/redhat-release > /dev/null 2>&1; then
	echo system Centos8
	select_nic
	ifcfg_8
	mount_storage
elif egrep "Ubuntu 18|Ubuntu 20|Ubuntu 22" /etc/issue > /dev/null 2>&1; then
	echo system ubuntu18-22
	select_nic
	netcfg
	mount_storage
elif egrep "Debian 12|Debian 8|Debian 10" /proc/version > /dev/null 2>&1; then
	echo system debian10-12
	if ! which iscsiadm > /dev/null 2>&1;then
		apt-get update > /dev/null 2>&1
		apt-get install open-iscsi -y > /dev/null 2>&1
		if ! which iscsiadm > /dev/null 2>&1;then
			echo "iscsiadm安装未成功"
			exit 1
		fi
	fi
	select_nic
	interface
	mount_storage
else
	echo "该系统未做适配需要手动配置"
fi