openstack在建立實例的時候能夠將文件注入到實例中,也能夠傳一些參數到實例,這在有些狀況下會很是有用,好比修改root密碼,注入ssh密鑰,對實例的個性化定製(後面會舉例子) Note: 只有注入文件失敗纔會使建立實例過程失敗 對注入的支持能夠有loop, guestfs, nbd, mount等,其中 mount 不安全。缺省使用: img_handlers=」loop,nbd,guestfs」 對於nbd,在ubuntu下只須要加載內核模塊(modprobe nbd)和安裝qemu-nbd 在centos下就比較麻煩了,須要手工編譯 nbd 和 qemu-nbd Guestfs方法比較簡單,只須要安裝正確的包就能夠,ubuntu下安裝guestmount, centos須要安裝libguestfs和fusepython
本文檔是以nova命令行的方式,圖形對有些參數的支持尚未ubuntu
使用nova命令須要設置如下參數vim
export OS_USERNAME=usercentos
export OS_PASSWORD=pass安全
export OS_TENANT_NAME='tenant'ssh
export OS_AUTH_URL=http://localhost:5000/v2.0oop
a) 建立密鑰(ssh-keygen)加密
b) 添加密鑰對url
i. nova keypair-add --pub_key .ssh/id_rsa.pub mykey命令行
c) 建立實例的時候注入密鑰
i. nova boot --key_name mykey --image id_of_image --flavor 1 name_of_instance
Note: id_of_image能夠經過nova image-list取得
假如我要注入.vimrc這個文件到新建立的實例中,能夠:
nova boot --file /root/.vimrc=/root/.vimrc --image id_of_image --flavor 1 name_of_instance
Note: 能夠注入多個文件(最多5個),只要寫多個--file <dst-path=src-path>
能夠經過--meta給實例中傳入鍵值對,注入後會寫在/meta.js文件裏,以相似python字典的方式存儲在虛擬機的/meta.js文件中
nova boot --meta key2=value2 --meta key1=value1 --image id_of_image --flavor 1 name_of_instance
Cat /meta.js # 虛擬機中
{"key2": "value2", "key1": "value1"}
假如咱們想讓新建立的實例運行一個初始化腳本,但這個腳本會根據不用的需求有所變化,咱們能夠這樣作
在建立鏡像模板的時候在/etc/rc.local中加入
/opt/init.py
Init.py能夠讀取注入的元數據(meta.js)好比
{"url": "http://example.com/init.sh"}
獲得初始化腳本的地址,下載下來並執行,這樣的好處是對不一樣的須要能夠有多個初始化文件,而不用修改模板