XenServer命令列自動化拷貝並初始化虛擬機器
那就是,每臺新建的VM,其IP地址與主機名等在複製之後,不能自動更新。
我請教過一些同行,可能是他們並沒有這樣大規模的使用XCP/XenServer,所以都是在XenCenter裡面建立好機器,然後通過console進去修改IP地址和主機名等等。
於是乎,我就在Google上反覆搜尋,最終找到了一個解決辦法。那就是通過修改VM的核心載入程式,將自定義的引數傳遞給一個叫PV-args的核心引數,這樣在VM啟動之後就可以通過/proc/cmdline中獲取到引數了,
在獲取到之後,VM在第一次啟動時,會執行一個Shell指令碼,來根據自定義的引數更新IP地址和主機名等;這樣,一臺新建立好的VM就可以自動配置好hostname和ip,
後續方便Puppet這樣的管理工具,可以接著再自動拉取最新的配置,完成整個伺服器的自動化配置,然後上線。
環境介紹:
xenhost1 一臺物理XCP/XenServer主機
vm-template 之前定義好的模板
vm-host-1 將要建立的VM
在vm-template中定義一個shell指令碼,來根據自定義的引數更新IP地址和主機名,這樣,使用該模板建立VM,
(1)、首先在建立VM時傳入自定義的引數傳遞給一個叫PV-args的核心引數,
(2)、之後VM啟動就可以通過/proc/cmdline中獲取到引數,
(3)、最後自動執行一個Shell指令碼,來根據自定義的引數更新IP地址和主機名。
獲取vm-template的uuid
[
uuid ( RO) : c77040ae-3a50-9217-ff03-41992c34d1ec
2 name-label ( RW): vm-host-1
修改核心啟動方式,並傳遞自定義引數
[[email protected] ~]# xe vm-param-set uuid=c77040ae-3a50-9217-ff03-41992c34d1ec HVM-boot-policy=""
[[email protected] ~]# xe vm-param-set uuid=c77040ae-3a50-9217-ff03-41992c34d1ec PV-bootloader="pygrub"
[
啟動vm-template
[[email protected] ~]# xe vm-start vm=vm-template
這裡,我們用vm-template模板建立的VM,對這臺VM進行配置(就是編寫一個shell指令碼,在vm啟動時執行,)
獲取自定義引數
[
view sourceprint?
1 ro root=/dev/mapper/vg_t-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_t/lv_root [email protected] KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet _hostname=vm-template _ipaddr=192.168.1.121 _netmask=255.255.255.0 _gateway=192.168.1.1
定義初始化指令碼
[[email protected] ~]# cat /etc/rc.local
view sourceprint?
1 #!/bin/sh
2 #
3 # This script will be executed *after* all the other init scripts.
4 # You can put your own initialization stuff in here if you don't
5 # want to do the full Sys V style init stuff.
6
7 touch /var/lock/subsys/local
8 /root/bootstrap.sh
建立具體的指令碼
[[email protected] ~]# touch /root/bootstrap.sh
[[email protected] ~]# chmod +x /root/bootstrap.sh
[[email protected] ~]# vim /root/bootstrap.sh
#!/bin/bash
#
# Bootstrap Script for Hostname,Network...
#
# Author: Dong Guo
# Last Modified: 2013/10/24 by Dong Guo
options=$(cat /proc/cmdline|sed 's/.*rhgb quiet //g')
config=/etc/sysconfig/network-scripts/ifcfg-eth0
failed=/root/bootstrap.failed
function check_root(){
if [ $EUID -ne 0 ]; then
echo "This script must be run as root"
exit 1
fi
}
function configure_os(){
echo "DEVICE=eth0" > $config
echo "ONBOOT=yes" >> $config
echo "BOOTPROTO=none" >> $config
for i in $options
do
option=$(echo $i|cut -d "=" -f 1)
value=$(echo $i|cut -d "=" -f 2)
if [ "${option:0:1}" = "_" ]; then
case "$option" in
_hostname)
oldname=$(hostname)
newname=$value
sed -i s/"$oldname"/"$newname"/g /etc/sysconfig/network
hostname $newname
;;
_ipaddr)
echo "IPADDR=$value" >> $config
;;
_netmask)
echo "NETMASK=$value" >> $config
;;
_gateway)
echo "GATEWAY=$value" >> $config
;;
esac
fi
done
}
function restart_network(){
/etc/init.d/network restart
}
function check_status(){
gateway=$(grep -w GATEWAY $config|cut -d "=" -f 2)
route -n | grep -wq $gateway
if [ $? -eq 0 ]; then
sed -i /bootstrap/d /etc/rc.local
if [ -a $failed ]; then
rm -f $failed
fi
else
touch $failed
fi
}
check_root
configure_os
restart_network
check_status
檢視指令碼
[[email protected] ~]# ls
anaconda-ks.cfg install.log.syslog bootstrap.sh install.log
退出vm-template
[[email protected] ~]# exit
關閉vm-template
[[email protected] ~]# xe vm-shutdown vm=vm-template
至此,在vm-template建立的VM完成shell指令碼的配置
3)、拷貝VM並自動化配置VM的主機名,ip
獲取xenhost1本地儲存的uuid
[[email protected] ~]# xe sr-list | grep -A 2 -B 3 xenhost1 | grep -A 4 -B 1 "Local Storage"
uuid ( RO) : 38e1ae16-6d5e-55af-5b55-8e26d30b13d7
name-label ( RW): Local storage
name-description ( RW):
host ( RO): xenhost1
type ( RO): lvm
content-type ( RO): user
複製建立新的VM vm-host-1
[[email protected] ~]# xe vm-copy new-name-label=vm-host-1 vm=vm-template sr-uuid=38e1ae16-6d5e-55af-5b55-8e26d30b13d7
9529e2e5-e5b8-a22f-83da-6d3cd1be8101
獲取vm-host-1的uuid
[[email protected] ~]# xe vm-list | grep -A 1 9529e2e5-e5b8-a22f-83da-6d3cd1be8101
uuid ( RO) : 9529e2e5-e5b8-a22f-83da-6d3cd1be8101
name-label ( RW): vm-host-1
傳遞自定義引數
[[email protected] ~]# xe vm-param-set uuid=9529e2e5-e5b8-a22f-83da-6d3cd1be8101 PV-args="_hostname=vm-host-1 _ipaddr=192.168.1.122 _netmask=255.255.255.0 _gateway=192.168.1.1"
啟動vm-host-1
[[email protected] ~]# xe vm-start vm=vm-host-1
登陸vm-host-1
[[email protected] ~]# ssh [email protected]
The authenticity of host '192.168.1.122 (192.168.1.122)' can't be established.
RSA key fingerprint is 81:f9:a4:45:0e:95:36:c5:e5:3e:80:33:8a:3a:db:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.122' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Thu Oct 24 05:49:24 2013 from 10.0.8.34
相關推薦
XenServer命令列自動化拷貝並初始化虛擬機器
我們建立了本地機房,購買了一定數量的物理伺服器,每臺伺服器安裝了Xenserver,並打算在上面建立虛擬機器。之前我們一直通過的是XenCenter的方式,圖形化的操作來建立我們遇到了一個問題, 那就是,每臺新建的VM,其IP地址與主機名等在複製之後,不能自動更新。 我請教
初始化虛擬機器錯誤 - Error occurred during initialization of VM
文章目錄 1 環境配置資訊 1.1 伺服器配置資訊 1.2 Tomcat啟動引數 2 問題描述 3 問題解決 4 關於vm.overcommit_memory引數的說明 4.1 vm.overcommit
假設分配給命令的連接位於本地掛起事務中,ExecuteReader 要求命令擁有事務。命令的 Transaction 屬性尚未初始化
execute ati com data- dap system.in tty exceptio ada {System.InvalidOperationException: 假設分配給命令的連接位於本地掛起事務中。ExecuteReader 要求命令擁
自動化測試-selenium初始化Driver參考
ref med ash 自動化 eve ima 測試 address get 涉及到的工具: org.openqa.selenium.Proxy org.openqa.selenium.chrome.ChromeDriver org.openqa.selenium.chro
JAVA構造MAP並初始化MAP
popu 初始化 table 擁有 內存泄露 dem () private clip 第一種方法:static塊初始化 [java] view plain copy public class Demo{ private
python list的深拷貝與淺拷貝-以及初始化空白list的方法(2)
src 分享圖片 [1] 深拷貝 pen net .com 空白 tails 其實python對於深拷貝與淺拷貝的處理方式依然是很靈活的,甚至有一個專門的工具包copy來做個事情 來看以下這組list的拷貝方法: 已知lista是一個已經定義好了的list listb=l
安裝並初始化k8s
使用阿里雲的映象 docker:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo k8s:https://mirrors.aliyun.com/kubernetes/yum/repos/
JAVA 構造 MAP 並初始化 MAP、定義時就初始化
第一種方法:static塊初始化 public class Demo{ private static final Map<String, String> myMap; static { myMap = new HashMa
用命令列編譯java並生成可執行的jar包
如果對於編譯有編碼要求的 應該使用-encoding引數指明編碼方式:javac -encoding UTF-8 XX.java 一個package中,兩個java檔案中,一個有main函式,一個沒有,兩者之間有呼叫關係 ThreadTest.java package
ubuntu 命令列解除安裝並清理軟體
1、刪除軟體 方法一、如果你知道要刪除軟體的具體名稱,可以使用 sudo apt-get remove --purge 軟體名稱 sudo apt-get autoremove --purge 軟體名稱 方法二、如果不知
如何成功安裝vue.js並初始化一個基於webpack的專案
1、要想安裝vue.js,首先得保證你的筆記本安裝了node環境以及npm,因為vue.js的安裝是需要藉助npm的。但是這兒有個問題,我剛開始使用npm安裝的時候,因為網速的原因,沒有安裝成功,因為國內使用npm很慢,所以建議在使用npm安裝vue之前將cnpm全域性安裝
ubuntu 命令列解除安裝並清理軟體(解除安裝的很乾淨)
ubuntu 命令列解除安裝並清理軟體刪除軟體方法一、如果你知道要刪除軟體的具體名稱,可以使用sudo apt-get remove --purge 軟體名稱 sudo apt-get autorem
xenserver 命令列得到vm的ip
All IP addresses for the host? export hostuuid=`xe host-list name-label=[YOURHOSTNAME] --minimal` && xe pif-list host-uu
vlc命令列: 轉碼 流化 推流
轉載地址 寫在命令列之前的話: VLC不僅僅可以通過介面進行播放,轉碼,流化,也可以通過命令列進行播放,轉碼和流化。還可以利用裡面的SDK進行二次開發。vlc命令列使用方法: 1,安裝最新版的vlc1.0.3版 2,開啟cmd,進入vlc的安裝檔案目錄,
使用命令列執行unity並執行某個靜態函式(運用於遠端打包)
可以寫個python,這個python去接收遠端的命令,然後執行一個bat批處理 這個bat批處理首先判斷Unity是否執行中,如果執行中,則先殺掉Unity,然後啟動Unity並執行某個Editor的靜態函式 bat指令碼例: ::判斷Unity是否執行中 TASKLI
如何用cmd命令列連線資料庫並進行資料庫相關的操作
以下提到的相關操作只針對於SQL Server軟體,請知曉!其實在Windows系統上是可以使用命令列對不在本地或本地的的資料庫進行操作的。相信這是一個不錯的裝逼利器哦首先說如何用cmd連線本地的資料庫: 首先win+R快捷鍵開啟 “執行”介面,輸入cm
linux命令列介面如何安裝圖形化介面
目錄 問題描述 當我們在安裝Linux系統時,我們一開始可能安裝的是非圖形介面的系統,就是有可能選擇的是最小化安裝方式。這種安裝凡是有很多的坑。那麼有時候,我們可能需要進行圖形化設定,但是我們又不可能重啟設定,這就需要我們利用yum安裝相應的包,使
自動化測試的初始化操作。
Fixtures的使用 說明: 我們都知道在unittest測試框架中,setUp和tearDown 用於測試用例的初始化的工作,如果我們需要在整個模組或者類之前初始化一些工作,unittest也
XenServer命令列工具指南-xe param list的param屬性
執行XenServer的xe param list命令,比如sr-param-list會返回 [[email protected] ~]# xe sr-param-list uuid=a90e4c0b-ad89-189f-fac0-4ba6ae51111c
linux的命令列介面下安裝圖形化介面
說明:本次操作在虛擬機器上進行。 所使用虛擬化軟體為:VMware Workstation Pro 所使用系統映象為:rhel-server-7.2-x86_64-dvd.iso 在安裝作業系統時若安裝了圖形化介面的軟體包:只需輸入命令“startx”啟動圖形化介面即可