PowerCLI: One-Liner to get VMs, Clusters, ESX Hosts and Datastores并导入数据库中
需求:定期自动获取Vm在VCenter中对应的cluster、ESX、Datastore信息,同时将变化或者新增的数据上传到数据库中
解决思路分析:
1 首先使用VMware的powerCLI工具通过任务计划程序,定期抓取上述所需信息
2 然后通过文件比较差异,将新增或者修改了的数据提取出来
3 将差异结果放到指定位置,或者数据库中
详细解决步骤:
下面详细说一下我的解决步骤
1 通过PowerCLI抓取所需信息,并上传
1.1首先安装PowerCLI工具(在win7或者windows2008上安装,参考附录)
1.2然后编写自动获取数据的脚本,脚本VMInfo.ps1示例如下,对应这个脚本的解释 ,请参考附录
#这个脚本获取VMname,vmid,ESXname,ESXID,Cluster,Datastore Connect-VIServer -server ip -user 用户名l -password 密码 Get-VM | Select Name,id,@{N="ESXIP";E={(Get-VMHost -VM $_).name}}, ` @{N="ESXID";E={(Get-VMHost -VM $_).id}}, ` @{N="Cluster";E={Get-Cluster -VM $_}}, ` @{N="Datastore";E={Get-Datastore -VM $_}},` Time | Export-Csv -NoTypeInformation c:\VMInfo\"Export67VMinfo$(Get-Date -Format 'yyyyMMdd').csv" Disconnect-VIServer -server * -force -Confirm:$false
获取得到的数据格式如下:
我通过任务计划程序自动运行该脚本并将其上传至FTP服务器
1.3创建任务计划程序脚本CreateTask.bat
schtasks /create /ru system /tn :
1.4任务计划程序引用的脚本VMInfoBat.bat,这个脚本会调用PowershellCLI脚本,并输出日志
set datevar=%,%%,%%,% echo -------------%datevar%-log------------- >> c:\VMInfo\Running.log if exist c:\VMInfo\Export* del /q c:\VMInfo\Export*.csv C:\Windows\System32\WindowsPowerShell\v1.\powershell.exe -psconsolefile >& c:\VMInfo\runftp.bat >> c:\VMInfo\Running.log >&
1.5使用FTP上传
::UploadFtp.bat,上传文件至FTP open 10.200.169.2 用户名 密码
binary cd VMdata put C:\VMInfo\Export*.csv bye ::runftp.bat通过命令执行上面的ftp脚本 ftp -s:c:\VMInfo\UploadFtp.bat
2 提前在数据库上创建好对应的表,注意一般都需要有主键列和时间列,免得后面再添加更改
--建表,表中uuid是主键,会顺序加1,IMTIME是每次插入的时间 CREATE TABLE ARADMIN.VM_INFO_Dayly (UUID int primary key, VMNAME ), VMID ), ESXIP ), ESXID ) , CLUSTERNAME ), DATASTORE ), IMTIME date default sysdate not null,STATUS varchar2(128)) --建立序列 START ;--或者如下建立序列
/* create sequence VM_ID_SEQ minvalue 1 maxvalue 9999999999999999999999999999 start with 1 increment by 1 nocache; */
--建立一个触发器: CREATE OR REPLACE TRIGGER TRG_VM BEFORE INSERT ON VM_INFO_Dayly FOR EACH ROW BEGIN SELECT VM_ID_SEQ.NEXTVAL INTO :NEW.UUID FROM DUAL; END TR_VM;
3 比对今天和昨天的文件,并将差异结果写入数据库
这个过程是在linux机器上完成的,毕竟linux命令毕竟熟悉一些
比较用到的命令是 :
grep -vxFf file1 file2 >a.txt #比较存在于file2中而不在file1中的行
grep -xFf file1 file2 >b.txt #比较file1 和file2 的交集,具体参考附录
数据上传使用的是sqlload
运行下面命令提前看一下数据库的字符集,并修改下面文件中的字符集,以便不出现乱码
select userenv('language') from dual;
1 脚本sqlload.sh
好了下面把我的脚本sqlload.sh放上来,这个脚本实现今日和昨日数据比较,并把差异放入数据库
#!/bin/bash # Description: # Program download the VMinfo csv data # And then compair with yesterday's data # At the End sqlload the diff to Oracle #-- lizhaoxian PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin ORACLE_HOME=/oracle/app/oracle/product/11.2.0.3/db_1 export ORACLE_HOME export PATH=$PATH:$ORACLE_HOME/bin ddate=`date +%Y%m%d` ydate=`date --date='1 days ago' +%Y%m%d` yydate=`date --date='2 days ago' +%Y%m%d` # Log File LOGFILE=/Vminfo/Vminfo.log cat /dev/null > ${LOGFILE} # DownLoad From FTP echo ${ddate} >> ${LOGFILE} FileName=`echo "Export67VMinfo${ddate}.csv"` >& user administrator abcde@ cd VMdata lcd /Vminfo binary mget ${FileName} bye ! # 文件格式转换 dos2unix /Vminfo/Export* >> ${LOGFILE} >& # 文件处理和比较 sed -i 's/硬盘\ /Disk/g;s/\ Disk/;Disk/g' /Vminfo/Export67VMinfo${ddate}.csv
#里面可以提前把ipv6的地址都过滤掉awk 'NF>2{gsub(/fe80::[a-zA-Z0-9:]+/, " ", $0);gsub(/ +/, " ", $0); print $0;}' test.log
grep -vxFf /Vminfo/Export67VMinfo${ydate}.csv /Vminfo/Export67VMinfo${ddate}.csv |sed 's/^\"/,/g' | sed 's/\"//g' > /Vminfo/Vmdata${ddate}.txt # sqlload导入数据库 export ORACLE_SID=ARDB export NLS_LANG=american_america.AL32UTF8 #数据库结构控制文件 CTL_FILE=/Vminfo/Vmdata.ctl #sqlload输出日志文件 LOG_FILE=/Vminfo/sqlload.log #数据文件 DATA_FILE=/Vminfo/Vmdata${ddate}.txt sqlldr ARADMIN/clmAdm1n@10.200.243.85/ARDB control=${CTL_FILE} data=${DATA_FILE} log=${LOG_FILE} # Clean log files # clear yesterday's data rm -f /Vminfo/Vmdata${yydate}.txt /Vminfo/Vmdata${ydate}.bad /Vminfo/Export67VMinfo${yydate}.csv
3 都写好了,那就添加到crontab中,让系统自动运行吧
#备份系统crontab crontab -u root -l > crontab.bak #修改系统定时任务 crontab -e #添加一行到文件末,每天八点,定时跑 * * * /Vminfo/sqlload.sh
大功告成,查看下数据库有没有数据就行了
参考附录:
PowerCLI: One-Liner to get VMs, Clusters, ESX Hosts and Datastores
powercli script to get cluster name, datastore name, total size & free space on DS for a VM
PowerCLI: One-Liner to get VMs, Clusters, ESX Hosts and Datastores并导入数据库中的更多相关文章
- ESX/ESXi 主机上的每个插槽中安装了多少内存
要确定在 ESX/ESXi 主机上的每个插槽中安装了多少内存,请执行以下操作: 1. 启动ssh服务 2. 登陆esxi主机查看 使用 SSH 客户端登录主机,以 root 用户身份运行以下命令之一: ...
- VMware PowerCLi 使用示例
这几天研究PowerCLI,积累了几个例子,记下来,以便以后或者大家使用.部分例子来着网络,具体出处参考附录 1 获取vm 磁盘 和磁盘对应的datastore的信息 这个例子可以针对一台虚机有多个磁 ...
- 【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中
[exp/imp]将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后 ...
- 转-【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中
原帖地址:http://blog.csdn.net/lihuarongaini/article/details/71512116 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完 ...
- Python实现电子词典(图形界面)
Python实现电子词典(图形界面) 终端电子词典:https://www.cnblogs.com/noonjuan/p/11341375.html 文件一览: .├── client.py├── d ...
- Vmware esx/esxi Vlan三种配置模式(VST、EST和VGT)
在Vmware esx/esxi中使用虚拟Lan(Vlan)时,一般是指Vlan Trunk的使用,使用的Vlan配置还有其它三种类型: Virtual Switch Tagging(虚拟交换机标记, ...
- Oracle Real Application Clusters (RAC)
Oracle Real Application Clusters — 概述 包含 Oracle Real Application Clusters (RAC) 选件的 Oracle 数据库允许依托一组 ...
- 基于PowerCli自动部署和配置vmvare虚拟机
1 文档说明 2 Vsphere PowerCli安装和配置 3 PowerCli常用命令 4 创建自定义规范 5 虚拟机克隆与配置脚本 6 技术资料 1 文档说明 使用Vsphere管理虚拟机,在进 ...
- VCAP5-DCA – What’s new?
see also: 韩国人的教材:http://ddii.pe.kr/ Section 1.1 – Implement and Manage complex storage Determine use ...
随机推荐
- 平衡树Treap模板与原理
这次我们来讲一讲Treap(splay以后再更) 平衡树是一种排序二叉树(或二叉搜索树),所以排序二叉树可以迅速地判断两个值的大小,当然操作肯定不止那么多(不然我们还学什么). 而平衡树在排序二叉树的 ...
- Vista 及后续版本的新线程池
在上一篇的博文中,说了下老版本的线程池,在Vista之后,微软重新设计了一套线程池机制,并引入一组新的线程池API,新版线程池相对于老版本的来说,它的可控性更高,它允许程序员自己定义线程池,并规定线程 ...
- master_pos_wait函数与MySQL主从切换
背景 主从切换是高可用MySQL架构的必要步骤(即使用不发生,也要有备无患).一般设置为双M(M1.M2),假设当前状态为写M1,而M2只读,切换的大致流程如下: 1. 停止应用写M1,将M1设置为 ...
- (3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html2环境架设http://www.cn ...
- Visual Studio总是在重新生成项目?
你是否曾经有过这种感觉:即使代码没有改变,Visual Studio也总是在重新生成项目? 我们可以生成一个项目,然后不做任何处理后再次生成,我们就可以看见--VS正在开始生成项目,而我的项目代码并没 ...
- eslint 的基本配置介绍
eslint 这个代码规则,是在用webpack +vue-cli这个脚手架时候接触的,默认的规则可能不太习惯我们日常平时的代码开发,需要对这个规则稍加改造. 下面的是 eslintrc.js的基本规 ...
- [搬运] 写给 C# 开发人员的函数式编程
原文地址:http://www.dotnetcurry.com/csharp/1384/functional-programming-fsharp-for-csharp-developers 摘要:作 ...
- 声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码
上周看到一个变调算法,挺有意思的,原本计划尝试用来润色TTS合成效果的. 实测感觉还需要进一步改进,待有空再思考改进方案. 算法细节原文,移步链接: http://blogs.zynaptiq.com ...
- CSS3中结构伪类选择器——root、not、empty、target选择器
1.root选择器 将样式绑定到页面的根元素中.根元素是指位于文档树中最顶层结构的元素,在HTML页面中就是指包含整个页面的<html>部分. <style type="t ...
- [51nod1254]最大子段和 V2
N个整数组成的序列a[1],a[2],a[3],-,a[n],你可以对数组中的一对元素进行交换,并且交换后求a[1]至a[n]的最大子段和,所能得到的结果是所有交换中最大的.当所给的整数均为负数时和为 ...