1. 程式人生 > >XenServer命令列自動化拷貝並初始化虛擬機器

XenServer命令列自動化拷貝並初始化虛擬機器

我們建立了本地機房,購買了一定數量的物理伺服器,每臺伺服器安裝了Xenserver,並打算在上面建立虛擬機器。之前我們一直通過的是XenCenter的方式,圖形化的操作來建立我們遇到了一個問題,
那就是,每臺新建的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
[
[email protected]
~]# xe vm-list | grep -B 1 vm-template
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"
[
[email protected]
~]# xe vm-param-set uuid=c77040ae-3a50-9217-ff03-41992c34d1ec PV-args="_hostname=vm-template _ipaddr=192.168.1.121 _netmask=255.255.255.0 _gateway=192.168.1.1"
啟動vm-template
[[email protected] ~]# xe vm-start vm=vm-template


這裡,我們用vm-template模板建立的VM,對這臺VM進行配置(就是編寫一個shell指令碼,在vm啟動時執行,)
獲取自定義引數
[
[email protected]
~]# cat /proc/cmdline
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”啟動圖形化介面即可