背景说明

工作中经常会遇到一次上几十台、几百台服务器的情况

每当到这个时候小伙伴们拿台笔记本和一根网线,一台服务器、一台服务器的去修改idrac IP

为了节约这个工作量,利用dell的racadm工具,写了下面这个脚本。只要运行起这个脚本,后面要做的就只是插拔网线的工作

安装racadm工具包
  1. [root@localhost ~]# curl -s http://linux.dell.com/repo/hardware/dsu/bootstrap.cgi | bash
  2.  
  3. [root@localhost ~]# yum -y install srvadmin-all

准备工作

在采购时dell会提供一份服务器的sn列表,会根据这个列表规划好每台服务器的idrac IP,我们可以将此转换成以逗号分隔的CSV文件如下:

  1. [root@localhost ~]# cat idrac_ip_list
  2.  
  3. AAAAAAA,10.10.10.2,255.255.255.0,10.10.10.1
  4.  
  5. BBBBBBB,10.10.10.3,255.255.255.0,10.10.10.1
脚本
  1. [root@localhost ~]# cat set_idrac_ip.sh
  2.  
  3. #!/usr/bin/env bash
  4.  
  5. # @Author : Eric Winn
  6.  
  7. # @Email : eng.eric.winn@gmail.com
  8.  
  9. # @Time : 2018-07-27 14:47
  10.  
  11. # @Version : 1.0
  12.  
  13. # @File : set_idrac_ip
  14.  
  15. # @Software : PyCharm
  16.  
  17. # the file of idrac
  18.  
  19. idrac_ip_list_file=${1}
  20.  
  21. if [ ! -f "${idrac_ip_list_file}" ]; then
  22.  
  23. echo "idrac_ip_list_file is not found!!!!"
  24.  
  25. echo "$0 [idrac_ip_list_file]"
  26.  
  27. exit 127
  28.  
  29. fi
  30.  
  31. # idrac Default infomation
  32.  
  33. idrac_default_ip=${2:-192.168.0.120}
  34.  
  35. idrac_default_user=${3:-root}
  36.  
  37. idrac_default_pass=${4:-calvin}
  38.  
  39. # racadm bin
  40.  
  41. racadm_bin=/opt/dell/srvadmin/sbin/racadm
  42.  
  43. # install check
  44.  
  45. srvadmin_install="curl -s http://linux.dell.com/repo/hardware/dsu/bootstrap.cgi | bash\nyum -y install srvadmin-all"
  46.  
  47. test ! `ls ${racadm_bin} 2> /dev/null` && printf "Please run these commands as root to install racadm.\n\e[1;31m${srvadmin_install}\e[0m\n" && exit 1
  48.  
  49. RACADM="${racadm_bin} -r $idrac_default_ip -u $idrac_default_user -p $idrac_default_pass"
  50.  
  51. # idrac history
  52.  
  53. idrac_sn_history=()
  54.  
  55. # idrac set
  56.  
  57. set_idrac_ip(){
  58.  
  59. # get SN
  60.  
  61. sn=`${RACADM} get BIOS.SysInformation.SystemServiceTag |grep SystemServiceTag |awk -F '=' '{print $2}'`
  62.  
  63. if [ "${sn}s" == "s" ]; then
  64.  
  65. echo "Get idrac sn is field!"
  66.  
  67. return 1
  68.  
  69. fi
  70.  
  71. # We only need the first 7 characters
  72.  
  73. sn=${sn:0:7}
  74.  
  75. echo "sn ======> ${sn}"
  76.  
  77. for h_sn in ${idrac_sn_history[*]}
  78.  
  79. do
  80.  
  81. if [ "$h_sn" == "${sn}" ]; then
  82.  
  83. echo "The ${sn} is already set."
  84.  
  85. return 0
  86.  
  87. fi
  88.  
  89. done
  90.  
  91. # get new idrac_net from idrac_ip_list_file
  92.  
  93. new_idrac_net=(`grep ${sn} $idrac_ip_list_file|awk -F ',' '{print $2,$3,$4}'`)
  94.  
  95. if [ "${new_idrac_net}s" == "s" ]; then
  96.  
  97. echo "The ${sn} is not in the ${idrac_ip_list_file}"
  98.  
  99. return 1
  100.  
  101. fi
  102.  
  103. echo "Setting the new ip: ${new_idrac_net[*]}"
  104.  
  105. # set idrac ip
  106.  
  107. ${RACADM} setniccfg -s ${new_idrac_net[*]} | grep successfully
  108.  
  109. if [ $? -eq 0 ]; then
  110.  
  111. idrac_sn_history=(${idrac_sn_history[*]} ${sn})
  112.  
  113. return 0
  114.  
  115. else
  116.  
  117. echo "Set is field!"
  118.  
  119. return 1
  120.  
  121. fi
  122.  
  123. }
  124.  
  125. # check internet
  126.  
  127. check_internet() {
  128.  
  129. pings=""
  130.  
  131. echo -e "Connecting ...\c"
  132.  
  133. while [ "${pings}s" == "s" ]
  134.  
  135. do
  136.  
  137. pings=`ping -c 2 $idrac_default_ip |awk 'NR==6 {print $4}'`
  138.  
  139. if [ "${pings}s" == "s" ]; then
  140.  
  141. echo -e ".\c"
  142.  
  143. else
  144.  
  145. echo
  146.  
  147. fi
  148.  
  149. done
  150.  
  151. return 0
  152.  
  153. }
  154.  
  155. # main function
  156.  
  157. main() {
  158.  
  159. while true
  160.  
  161. do
  162.  
  163. check_internet
  164.  
  165. if [ $? -eq 0 ]; then
  166.  
  167. echo "Let's starting set"
  168.  
  169. set_idrac_ip
  170.  
  171. if [ $? -eq 0 ]; then
  172.  
  173. echo
  174.  
  175. echo "Now , Please change to a new server"
  176.  
  177. sleep 5
  178.  
  179. else
  180.  
  181. echo
  182.  
  183. echo "Please check it."
  184.  
  185. sleep 15
  186.  
  187. fi
  188.  
  189. fi
  190.  
  191. done
  192.  
  193. }
  194.  
  195. main
运行

注:后面的idrac_ip是csv文件名

  1. [root@localhost ~]# sh set_idrac_ip.sh idrac_ip
  2.  
  3. Connecting ...
  4.  
  5. Let's starting set
  6.  
  7. sn ======> AAAAAAA
  8.  
  9. Setting the new ip: 10.10.10.2 255.255.255.0 10.10.10.1
  10.  
  11. Static IP configuration enabled and modified successfully
  12.  
  13. Now , Please change to a new server

批量自动化配置Dell服务器idrac管理口IP的更多相关文章

  1. 联想 lenove 3750 M4服务器更改启动项和管理口IP

    联想 lenove 3750 M4服务器更改启动项和管理口IP 注: 因为在机房拍照的原因,再加上工作比较忙:整理成文档的时候有的过程已经忘记了,所以有的步骤可能会缺失,里面的选项都已经用中文方式表达 ...

  2. Linux下搭建Oracle11g RAC(2)----配置DNS服务器,确认SCAN IP可以被解析

    从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP  ...

  3. DELL服务器iDRAC相关设置

    iDRAC又称为Integrated Dell Remote Access Controller,也就是集成戴尔远程控制卡 iDRAC卡相当于是附加在服务器上的一台小电脑,通过与服务器主板上的管理芯片 ...

  4. zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件

    模板下载 https://files.cnblogs.com/files/LuckWJL/zbx_export_templates.xml 模板源代码 <?xml version="1 ...

  5. Dell服务器iDrac口默认账号密码和IP

    https://blog.csdn.net/artdao1987/article/details/79875528

  6. 戴尔 R730xd 服务器更改管理口密码 图文教程

    一.开机根据提示按F2进入配置界面 - 选择中间的iDRAC Setting选项,回车确认 二.进入之后选择 user configuration 选项 三.在change password 处键入新 ...

  7. DELL服务器管理工具和RACADM介绍

    DELL服务器管理工具和RACADM介绍 一.Dell服务器管理工具介绍 Dell对服务器(DELL PowerEdge)的管理主要提供了三种管理工具,分别是Dell Remote Access Co ...

  8. dell服务器快速设置idrac

    前提:将服务器专用的idrac网络接口,连接到网络上 1.登录到服务器(即被监控的服务器). 2.安装客户端工具 yum  install  OpenIPMI OpenIPMI-devel OpenI ...

  9. puppet开源的软件自动化配置和部署工具——本质就是CS,服务端统一管理配置

    1.  概述 puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用p ...

随机推荐

  1. 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)

    公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...

  2. Cesium中级教程3 - Camera - 相机(摄像机)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Camera CesiumJS中的Camera控制场景的视图.有 ...

  3. Cesium入门10 - 3D Tiles

    Cesium入门10 - 3D Tiles Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们团队有时把Ces ...

  4. Android开发----使用 Room 将数据保存到本地数据库

    Room介绍以及不使用SQLite的原因 Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库. 处理大量结构化数据的应用可极大地受益于 ...

  5. docker简单介绍。

    docker是啥? 一.概念? // 和运维有关的工具,和开发没有很大的关系.只需要去调试项目,将项目运行更迅速. 二.作用? 1.只需要关心项目的编写和调试,不需要关心具体的项目需要运行在哪里,并且 ...

  6. C# 实例解释面向对象编程中的单一功能原则

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...

  7. vue组件中使用<transition></transition>标签过渡动画

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  8. HBase安装教程

    一.版本介绍 linux : CentOS7 Hadoop : 2.7.6 zookeeper : 3.4.6 hbase : 1.4.6 jdk : jdk1.8.0_171 三个节点的主机名分别为 ...

  9. Java 中的锁原理、锁优化、CAS、AQS 详解!(转)

    1.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 2.锁实现的基本原理 2.1.volatile Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新, ...

  10. memcached 测试代码

    转载请注明来源:https://www.cnblogs.com/hookjc/ #include<stdio.h> #include <iostream> #include & ...