pythonvif
#encoding=utf-8
importtime
fromoperatorimportitemgetter
#DatainBC.txt:
#a b
#a h
#b c
#b h
#h i
#h g
#g i
#g f
#c f
#c i
#c d
#d f
#d e
#f e
classGraph:
def__init__(self):
self.Graph=defaultdict(set)
self.NodesNum=0
defMakeLink(self,filename,separator):
withopen(filename,'r')asgraphfile:
forlineingraphfile:
nodeA,nodeB=line.strip().split(separator)
self.Graph[nodeA].add(nodeB)
self.Graph[nodeB].add(nodeA)
self.NodesNum=len(self.Graph)
defBetweennessCentrality(self):
betweenness=dict.fromkeys(self.Graph,0.0)
forsinself.Graph:
#1.
S=[]
P={}
forvinself.Graph:
P[v]=[]
Sigma=dict.fromkeys(self.Graph,0.0)
Sigma[s]=1.0
D={}
D[s]=0
Q=[s]
#
whileQ:
v=Q.pop(0)
S.append(v)
Dv=D[v]
forwinself.Graph[v]:
#wfoundforthefirsttime?
ifwnotinD:
Q.append(w)
D[w]=D[v]+1
#shortestpathtowviav
ifD[w]==D[v]+1:
Sigma[w]+=Sigma[v]
P[w].append(v)
#2.sumallpair-dependenciesofnodes
delta=dict.fromkeys(self.Graph,0.0)
#Sreturnsverticesinorderofnon-increasingdistancefroms
whileS:
w=S.pop()
coeff=(1.0+delta[w])/Sigma[w]
forvinP[w]:
delta[v]+=Sigma[v]*coeff
ifw!=s:
betweenness[w]+=delta[w]
scale=1.0/((self.NodesNum-1)*(self.NodesNum-2))
forvinbetweenness:
betweenness[v]*=scale
betweenness=[(node,bc)fornode,bcinbetweenness.iteritems()]
betweenness=sorted(betweenness,key=itemgetter(1),reverse=True)
returnbetweenness
if__name__=='__main__':
separator=' '
file='C:\Users\Administrator\Desktop\BC.txt'
begin=time.time()
myGraph=Graph()
myGraph.MakeLink(file,separator)
printmyGraph.BetweennessCentrality()
print'Time:',time.time()-begin,'seconds'
㈡ 已經獲取虛擬機的所有信息,怎麼用python提取網卡信息
KVM(Kernel-based Virtual Machine)作為一個開源的系統虛擬化模塊,已經成為虛擬機虛擬化技術的主流,在越來越多的Cloud環境中使用。為了保證Cloud環境的正常運行,需要在運維過程中對Cloud環境中的VM狀態進行監控,比如CPU,內存,Disk,Disk I/O,Network I/O等信息,可以利用這些信息及時的調整分配Cloud環境的資源,保證VM的正常運行。Libvirt是基於KVM的上層封裝,提供了操作KVM的原生層介面,可以實現對虛擬機的日常管理操作,如虛擬機的生命周期(創建,刪除,查看,管理),開機,關機,重啟,網路管理,存儲管理等。本文以查看hypervisor的instance為例,講述通過Libvirt-python模塊,查看當前HOST的KVM虛擬機常用監控信息。文章主要包括如下幾個方面的內容:
1、 Libvirt-python模塊的簡單介紹與環境安裝配置;
2、 利用Python調用API獲取 VM相關監控信息;
1. Libvirt-python模塊的簡單介紹與安裝配置
Libvirt提供一種虛擬機監控程序不可知的 API 來安全管理運行於主機上的客戶操作系統,是一種可以建立工具來管理客戶操作系統的 API。Libvirt 本身構建於一種抽象的概念之上。它為受支持的虛擬機監控程序實現的常用功能提供通用的API,適用於包括基於KVM/QEMU, Xen, LXC, OpenVZ, Virtualbox, VMware, PowerVM等多種虛擬機化技術的虛擬機。Libvirt-python是基於libvirt API的python語言綁定工具包,通過該包,可以使用python對VM進行日常管理操作和監控數據獲取。需要運行的Python監控程序可以在KVM的HOST中運行,也可以在基於KVM虛擬機化的任意環境運行,需要做的配置如下:
1) 環境准備:
安裝python 2.6及以上
安裝libvirt 1.2及以上
安裝libvirt-client 1.2及以上
安裝libvirt-python1.2及以上
以上環境如果已經在操作系統中存在並且滿足要求,不需要進行重復安裝,可以在libvirt的官方網站選擇不同的站點和適合自己操作系統的安裝包進行下載安裝。
2) 驗證安裝環境:
安裝完上述安裝包後,在命令行運行rpm -qa | grep libvirt 查看相關安裝信息是否正確如圖:
在命令行運行python命令查看python環境
在命令行運行virsh進入virsh命令行窗口
執行list –all,列出所有虛擬機,執行dommemstat domainID驗證windows虛擬機內存信息
unused代表虛機內部未使用的內存量,available代表虛機內部識別出的總內存量,那麼虛機內部的內存使用量則是(available-unused)。
如果windows虛擬機中沒有unused值,
按下一步安裝virtio-win驅動和balloon service,並且啟動balloon service
3) windows虛擬機Windows Virtio Drivers安裝。
1、下載地址,根據自己需求下載相應版本,這里以下載Stable virtio-win iso為例。
2、安裝驅動
3、安裝Balloon Services,
在python應用運行環境驗證servie,查看該VM 內存信息。
2. 利用Python調用API獲取 VM相關監控信息
2.1創建連接
Python的管理應用程序可以和域位於同一節點上,管理應用程序通過libvirt工作,以控制本地域,如下圖:
也可以運行在遠端,通過本地libvirt連接遠端libvirt,以控制本地域,該模式使用一種運行於遠程節點上的libvirtd守護進程。當在新節點上安裝libvirt時該程序會自動啟動,且可自動確定本地虛擬機監控程序並為其安裝驅動程序。該管理應用程序通過一種通用協議從本地libvirt連接到遠程libvirtd。
提供不同的連接方式,注意連接使用過後需要關閉。
from __future__ import print_function
import sys
import libvirt
# conn = libvirt.open('qemu+ssh://IP/system'
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
conn.close()
2.2 列出Domains
conn.listAllDomains(type)方法返回指定類型的domains列表,type參數可以設置以下類型
VIR_CONNECT_LIST_DOMAINS_ACTIVE
VIR_CONNECT_LIST_DOMAINS_INACTIVE
VIR_CONNECT_LIST_DOMAINS_PERSISTENT
VIR_CONNECT_LIST_DOMAINS_TRANSIENT
VIR_CONNECT_LIST_DOMAINS_RUNNING
VIR_CONNECT_LIST_DOMAINS_PAUSED
VIR_CONNECT_LIST_DOMAINS_SHUTOFF
VIR_CONNECT_LIST_DOMAINS_OTHER
VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE
VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE
VIR_CONNECT_LIST_DOMAINS_AUTOSTART
VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART
VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT
VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHO
如果設置為0,則返回所有活動和關機的domain
2.2 獲取監控數據
VM的監控信息主要是CPU使用率,內存使用率,Disk使用率,Disk I/O,Network I/O。其中,CPU的使用率,Disk I/O,Network I/O並不能直接獲取,需要經過計算獲得。
2.2.1 CPU使用率
libvirt中並不能直接獲取到虛擬機的CPU使用率,但是可以通過CPUTIME來計算出實際使用率。計算的公式為:
首先得到一個周期差:cpu_time_diff = cpuTimenow — cpuTimet seconds ago
然後根據這個差值計算實際使用率:%CPU = 100 × cpu_time_diff / ((now- seconds ago) × vcpus × 109).CPUtime可以使用domain的info函數獲得,如下:
from __future__ import print_function
import sys
import libvirt
from xml.dom import minidom
conn = libvirt.open('qemu:///system')
dom = conn.lookupByName(domName)
dominfo = dom.info()
print('The state is ' + str(dominfo[0]))
print('The max memory is ' + str(dominfo[1]))
print('The memory is ' + str(dominfo[2]))
print('The number of cpus is ' + str(dominfo[3]))
print('The cpu time is ' + str(dominfo[4]))
conn.close()
info()函數返回一個數組,下標為4的值即為CPUTime。
2.2.2 內存使用率
內存的使用情況可以函數dom.memoryStats()獲得,如下:
from __future__ import print_function
import sys
import libvirt
domName = 'Fedora22-x86_64-1'
conn = libvirt.open('qemu:///system')
if conn == None:
print('Failed to open connection to qemu:///system', file=sys.stderr)
exit(1)
dom = conn.lookupByID(5)
if dom == None:
print('Failed to find the domain '+domName, file=sys.stderr)
exit(1)
stats = dom.memoryStats()
print('memory used:')
for name in stats:
print(' '+str(stats[name])+' ('+name+')')
conn.close()
exit(0)
可以在Virsh命令行中驗證獲取的值是否正確。
2.2.3 Disk使用率
對於一個VM的DISK,在DOMAIN XML的device根據標示獲取,有關Disk部分的XML如下所示。
<devices>
<disk type='file' snapshot='external'>
<driver name="tap" type="aio" cache="default"/>
<source file='/var/lib/xen/images/fv0' startupPolicy='optional'>
<seclabel relabel='no'/>
</source>
<target dev='hda' bus='ide'/>
/*這個'hda'就是需要的參數 */
<iotune>
<total_bytes_sec>10000000</total_bytes_sec>
<read_iops_sec>400000</read_iops_sec>
<write_iops_sec>100000</write_iops_sec>
</iotune>
<boot order='2'/>
<encryption type='...'>
...
</encryption>
<shareable/>
<serial>
...
</serial>
</disk>
...
</devices>
使用函數domain.blockInfo(disk,0)獲得磁碟的總量和已使用量
2.2.4 Disk I/O
可以使用 domain. blockStats ()方法,該方法需要傳遞一個Disk的參數,這個參數可以通過XML文件取得:
<devices>
<disk type='file' snapshot='external'>
<driver name="tap" type="aio" cache="default"/>
<source file='/var/lib/xen/images/fv0' startupPolicy='optional'>
<seclabel relabel='no'/>
</source>
<target dev='hda' bus='ide'/>
/*這個'hda'就是需要的參數 */
<iotune>
<total_bytes_sec>10000000</total_bytes_sec>
<read_iops_sec>400000</read_iops_sec>
<write_iops_sec>100000</write_iops_sec>
</iotune>
<boot order='2'/>
<encryption type='...'>
...
</encryption>
<shareable/>
<serial>
...
</serial>
</disk>
...
</devices>
2.2.5 Network I/O
可以使用 domain.interfaceStats()方法,該方法需要傳遞一個虛擬網卡介面的參數,這個參數可以通過XML文件取得:
<interface type='bridge'>
<mac address='00:16:3e:74:03:53'/>
<source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0 '/>
/*這個vif1.0就是需要的參數 */
</interface>
網卡的I/O值返回是一個數組,根據自己需要獲取對應的值。
3. 總結
通過對VM監控信息的獲取,可以實時的了解Cloud環境中各個VM的負載和使用情況,合理的調配計算資源,或者關閉長時間沒有使用的VM,做到Cloud資源的合理利用和運行環境的健康可靠性。
㈢ consul 怎麼移除失敗的服務
Docker 1.9.0開始支持多主機網路(multi-host networking)。我們可以通過OVNOpen vSwitch virtual network)來將Docker的網路和Open vSwitch結合起來。
簡介
對於OVN和Docker的多主機網路(multi-host networking),Docker需要分布式鍵值對存儲的支持。假設我們這里採用consul來提供分布式鍵值對存儲,並且你的主機IP地址為$HOST_IP。用戶可以使用下面的命令來啟動Docker進程:
docker daemon --cluster-store=consul://127.0.0.1:8500 /
--cluster-advertise=$HOST_IP:0
OVN為容器提供了網路虛擬化技術。OVN和Docker的結合使用存在兩種模式—underlay模式和overlay模式。
在underlay模式下,OVN要求配置OpenStack來提供容器網路。在這個模式下,用戶可以創建邏輯網路,並且讓運行在虛擬機中的容器、獨立的虛擬機(沒有容器運行在其中)和物理機器連接到同一個邏輯網路上。這是一種多租戶、多主機的解決辦法。
在overlay模式下,OVN可以為運行跨主機的容器們提供一個邏輯網路。這是一種單租戶(是否能擴展到多租戶取決於安全特性)、多主機的解決辦法。在這種模式下,你並不需要預創建好的OpenStack。
值得注意的是,用戶必須在他想要運行容器的虛擬機或主機上安裝並運行Open vSwitch。
Overlay 模式
Overlay模式下,需要Open vSwitch 2.5版本或後續版本的支持。
啟動核心模塊
OVN架構中會有一個核心的模塊來存儲網路信息。因此你需要在你其中一台主機(IP地址為$CENTRAL_IP,並且已經安裝和啟動了Open vSwitch)上啟動相關的核心服務。
首先我們讓ovsdb-server監聽一個TCP埠:
ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640
接下來,啟動ovn-northd後台進程。這個進程負責將來自Docker的網路信息(存儲在OVN_Northbound 資料庫中)轉換成邏輯流存儲於OVN_Southbound資料庫。
/usr/share/openvswitch/scripts/ovn-ctl start_northd
一次性配置
在每一個你打算創建容器的主機上,你需要運行以下的命令(如果你的OVS資料庫被清空,你需要再次運行這個命令。除此之外,重復運行這個命令都是沒有任何影響的)。
其他的主機可以通過$LOCAL_IP地址來訪問到這個主機,它就相當於本地通道的端點。
$ENCAP_TYPE是指用戶想使用的通道的類型。它可以是地geneve逗或者地stt逗。(注意,你的內核需要支持以上兩個類型,用戶可以通過運行以下命令來檢測內核是否支持以上類型:逗lsmod | grep $ENCAP_TYPE")
ovs-vsctl set Open_vSwitch . external_ids:ovn-remote="tcp:$CENTRAL_IP:6640"
external_ids:ovn-encap-ip=$LOCAL_IP external_ids:ovn-encap-type="$ENCAP_TYPE"
最後,啟動ovn-controller(你需要在每一次啟動時運行以下命令):
/usr/share/openvswitch/scripts/ovn-ctl start_controller
啟動Open vSwitch網路驅動
在默認情況下,Docker使用Linux網橋,但它支持外擴展。為了替換Linux網橋,我們需要先啟動Open vSwitch驅動。
Open vSwitch驅動使用了Python Flask模塊來監聽Docker的網路API請求。因此,用戶需要先安裝Python 的Flask模塊。
easy_install -U pip
pip install Flask
在每一個你想要創建容器的主機上啟動Open vSwitch驅動:
ovn-docker-overlay-driver --detach
Docker內部包含了一些模塊,這些模塊擁有類似於OVN的邏輯交換機和邏輯埠的概念。請讀者仔細閱讀Docker的文檔來查找相關的命令。這里我們給出了一些案例:
NID=`docker network create -d openvswitch --subnet=192.168.1.0/24 foo`
docker network ls
你也可以通過以下命令從OVN的northbound資料庫中查找到這個邏輯交換機:
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lswitch-list
docker run -itd --net=foo --name=busybox busybox
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lport-list $NID
docker network create -d openvswitch --subnet=192.168.2.0/24 bar
docker network connect bar busybox
用戶可以刪除邏輯埠,或者將它們從運行容器上分離出來:
docker network disconnect bar busybox
docker network rm bar
Underlay模式
在這個模式下,OVN要求用戶預安裝好OpenStack。
用戶也可以刪除邏輯交換機:
用戶也可以創建一個邏輯埠,並將它添加到一個運行中的容器上:
顯示所有的邏輯埠
Docker現在並沒有一個CLI命令來羅列所有的邏輯埠,但是你可以從OVN的資料庫中找到它們:
Docker創建邏輯埠,並且將這個埠附加到邏輯網路上
比如說,將一個邏輯埠添加到容器busybox的逗foo地網路上:
顯示已有邏輯交換機
創建用戶自己的邏輯交換機
下面的命令創建了一個名為地foo逗的邏輯交換機,它的網段為地192.168.1.0/24地:
一次性配置
一個OpenStack的租戶創建了一個虛擬機,這個虛擬機擁有單張或多張網卡。如果租戶想要發送虛擬機中容器的網路包,他需要獲取這些網卡的port-id。port-id可以通過以下命令獲得:
nova list
然後運行:
neutron port-list --device_id=$id
在虛擬機中,下載OpenStack的RC文件,這些文件包含了租戶的信息(我們用openrc.sh來指代它)。編輯這個文件,並且將之前獲取到的port-id以 export OS_VIF_ID=$port-id的格式加入到文件中。文件的內容如下:
!/bin/bash
export OS_AUTH_URL=
export OS_TENANT_ID=
export OS_TENANT_NAME="demo"
export OS_USERNAME="demo"
export OS_VIF_ID=e798c371-85f4-4f2d-ad65-d09dd1d3c1c9
創建Open vSwitch網橋
如果用戶的虛擬機只有一個乙太網介面(比如說eth0),你需要將這個設備作為一個埠加入到Open vSwitch的地breth0地網橋上,並且移除它的IP地址,將其他相關的信息轉移到這個網橋上。(如果有多個網路介面,用戶自己創建Open vSwitch網橋,並且添加介面到網橋上)
如果你使用DHCP來獲取IP地址,你需要關閉監聽eth0的DHCP客戶端,並且開啟一個監聽Open vSwitch breth0網橋的DHCP客戶端。
你可以讓以上的步驟持久化,比如說你的虛擬機是Debian/Ubuntu,你可以參考 openvswitch-switch.README.Debian,如果你的虛擬機基於RHEL,你可以閱讀 README.RHEL完成持久化。
開啟Open vSwitch網路驅動
Open vSwitch驅動使用了Python Flask模塊來監聽Docker的網路API調用。這個驅動還使用了OpenStack的python-neutronclient庫。因此,如果你的主機還沒有安裝Python Flask或者python-neutronclient,你需要使用以下命令來安裝:
easy_install -U pip
pip install python-neutronclient
pip install Flask
運行openrc文件:
../openrc.sh
開啟網路驅動,並且提供OpenStack租戶的密碼:
ovn-docker-underlay-driver --bridge breth0 --detach
從現在開始,你可以使用和overlay模式類似的Docker命令了。請閱讀逗man ovn-architecture地來理解OVN的技術細節。
㈣ python 返回dict 的key 和value
a={'a':1,'b':2}
k=list(a.keys())
v=list(a.values())
㈤ 如何在Docker中使用Open vSwitch-Harries Blog64
Docker 1.9.0開始支持多主機網路(multi-host networking)。我們可以通過OVNOpen vSwitch virtual network)來將Docker的網路和Open vSwitch結合起來。
簡介
對於OVN和Docker的多主機網路(multi-host networking),Docker需要分布式鍵值對存儲的支持。假設我們這里採用consul來提供分布式鍵值對存儲,並且你的主機IP地址為$HOST_IP。用戶可以使用下面的命令來啟動Docker進程:
docker daemon --cluster-store=consul://127.0.0.1:8500 /
--cluster-advertise=$HOST_IP:0
OVN為容器提供了網路虛擬化技術。OVN和Docker的結合使用存在兩種模式—underlay模式和overlay模式。
在underlay模式下,OVN要求配置OpenStack來提供容器網路。在這個模式下,用戶可以創建邏輯網路,並且讓運行在虛擬機中的容器、獨立的虛擬機(沒有容器運行在其中)和物理機器連接到同一個邏輯網路上。這是一種多租戶、多主機的解決辦法。
在overlay模式下,OVN可以為運行跨主機的容器們提供一個邏輯網路。這是一種單租戶(是否能擴展到多租戶取決於安全特性)、多主機的解決辦法。在這種模式下,你並不需要預創建好的OpenStack。
值得注意的是,用戶必須在他想要運行容器的虛擬機或主機上安裝並運行Open vSwitch。
Overlay 模式
Overlay模式下,需要Open vSwitch 2.5版本或後續版本的支持。
啟動核心模塊
OVN架構中會有一個核心的模塊來存儲網路信息。因此你需要在你其中一台主機(IP地址為$CENTRAL_IP,並且已經安裝和啟動了Open vSwitch)上啟動相關的核心服務。
首先我們讓ovsdb-server監聽一個TCP埠:
ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640
接下來,啟動ovn-northd後台進程。這個進程負責將來自Docker的網路信息(存儲在OVN_Northbound 資料庫中)轉換成邏輯流存儲於OVN_Southbound資料庫。
/usr/share/openvswitch/scripts/ovn-ctl start_northd
一次性配置
在每一個你打算創建容器的主機上,你需要運行以下的命令(如果你的OVS資料庫被清空,你需要再次運行這個命令。除此之外,重復運行這個命令都是沒有任何影響的)。
其他的主機可以通過$LOCAL_IP地址來訪問到這個主機,它就相當於本地通道的端點。
$ENCAP_TYPE是指用戶想使用的通道的類型。它可以是」geneve「或者」stt「。(注意,你的內核需要支持以上兩個類型,用戶可以通過運行以下命令來檢測內核是否支持以上類型:「lsmod | grep $ENCAP_TYPE")
ovs-vsctl set Open_vSwitch . external_ids:ovn-remote="tcp:$CENTRAL_IP:6640"
external_ids:ovn-encap-ip=$LOCAL_IP external_ids:ovn-encap-type="$ENCAP_TYPE"
最後,啟動ovn-controller(你需要在每一次啟動時運行以下命令):
/usr/share/openvswitch/scripts/ovn-ctl start_controller
啟動Open vSwitch網路驅動
在默認情況下,Docker使用Linux網橋,但它支持外擴展。為了替換Linux網橋,我們需要先啟動Open vSwitch驅動。
Open vSwitch驅動使用了Python Flask模塊來監聽Docker的網路API請求。因此,用戶需要先安裝Python 的Flask模塊。
easy_install -U pip
pip install Flask
在每一個你想要創建容器的主機上啟動Open vSwitch驅動:
ovn-docker-overlay-driver --detach
Docker內部包含了一些模塊,這些模塊擁有類似於OVN的邏輯交換機和邏輯埠的概念。請讀者仔細閱讀Docker的文檔來查找相關的命令。這里我們給出了一些案例:
NID=`docker network create -d openvswitch --subnet=192.168.1.0/24 foo`
docker network ls
你也可以通過以下命令從OVN的northbound資料庫中查找到這個邏輯交換機:
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lswitch-list
docker run -itd --net=foo --name=busybox busybox
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lport-list $NID
docker network create -d openvswitch --subnet=192.168.2.0/24 bar
docker network connect bar busybox
用戶可以刪除邏輯埠,或者將它們從運行容器上分離出來:
docker network disconnect bar busybox
docker network rm bar
Underlay模式
在這個模式下,OVN要求用戶預安裝好OpenStack。
用戶也可以刪除邏輯交換機:
用戶也可以創建一個邏輯埠,並將它添加到一個運行中的容器上:
顯示所有的邏輯埠
Docker現在並沒有一個CLI命令來羅列所有的邏輯埠,但是你可以從OVN的資料庫中找到它們:
Docker創建邏輯埠,並且將這個埠附加到邏輯網路上
比如說,將一個邏輯埠添加到容器busybox的「foo」網路上:
顯示已有邏輯交換機
創建用戶自己的邏輯交換機
下面的命令創建了一個名為」foo「的邏輯交換機,它的網段為」192.168.1.0/24」:
一次性配置
一個OpenStack的租戶創建了一個虛擬機,這個虛擬機擁有單張或多張網卡。如果租戶想要發送虛擬機中容器的網路包,他需要獲取這些網卡的port-id。port-id可以通過以下命令獲得:
nova list
然後運行:
neutron port-list --device_id=$id
在虛擬機中,下載OpenStack的RC文件,這些文件包含了租戶的信息(我們用openrc.sh來指代它)。編輯這個文件,並且將之前獲取到的port-id以 export OS_VIF_ID=$port-id的格式加入到文件中。文件的內容如下:
!/bin/bash
export OS_AUTH_URL=http://10.33.75.122:5000/v2.0
export OS_TENANT_ID=
export OS_TENANT_NAME="demo"
export OS_USERNAME="demo"
export OS_VIF_ID=e798c371-85f4-4f2d-ad65-d09dd1d3c1c9
創建Open vSwitch網橋
如果用戶的虛擬機只有一個乙太網介面(比如說eth0),你需要將這個設備作為一個埠加入到Open vSwitch的」breth0」網橋上,並且移除它的IP地址,將其他相關的信息轉移到這個網橋上。(如果有多個網路介面,用戶自己創建Open vSwitch網橋,並且添加介面到網橋上)
如果你使用DHCP來獲取IP地址,你需要關閉監聽eth0的DHCP客戶端,並且開啟一個監聽Open vSwitch breth0網橋的DHCP客戶端。
你可以讓以上的步驟持久化,比如說你的虛擬機是Debian/Ubuntu,你可以參考 openvswitch-switch.README.Debian,如果你的虛擬機基於RHEL,你可以閱讀 README.RHEL完成持久化。
開啟Open vSwitch網路驅動
Open vSwitch驅動使用了Python Flask模塊來監聽Docker的網路API調用。這個驅動還使用了OpenStack的python-neutronclient庫。因此,如果你的主機還沒有安裝Python Flask或者python-neutronclient,你需要使用以下命令來安裝:
easy_install -U pip
pip install python-neutronclient
pip install Flask
運行openrc文件:
../openrc.sh
開啟網路驅動,並且提供OpenStack租戶的密碼:
ovn-docker-underlay-driver --bridge breth0 --detach
從現在開始,你可以使用和overlay模式類似的Docker命令了。請閱讀「man ovn-architecture」來理解OVN的技術細節。
㈥ python怎樣獲取字典中前十個
字典為mydict={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6,'g':7,'h':8,'i':9,'j':10,'k':11}
#列印字典的所有鍵值
print(mydict.keys())
#列印字典的所有值
print(mydict.values())
#列印字典的前5個鍵值
print([i for i in mydict.keys()][:5])
#列印字典的前8個值
print([i for i in mydict.values()][:8])
㈦ 創建新的虛擬機Xen使用命令行問題,怎麼解決
(1) 啟動 Xend 時出現錯誤 ImportError: /usr /lib/python/xen/lowlevel/acm.so: undefined symbol: Py_InitMole4
(2) 使用 virt-install 創建Xen虛擬機時出現錯誤:ERROR virDomainCreateLinux() failed XML描述 domain 不是良好的格式或者無效
(3) virt-manager 中連接虛擬機管理者Dom 0時出現錯誤:虛擬機管理者連接失敗 libvirtError: virConnectOpenReadOnly() failed
(4) virt-install 安裝虛擬機是出現錯誤:ERROR 無法連接到 'localhost:8000': 拒絕連接
(5) virt-manager 安裝Xen虛擬機連接網路時nat和橋接設備均為空,無法選擇,安裝不能繼續
(6) virt-manager 或者 virt-install 安裝虛擬機系統過程中出現錯誤:
'libvirt.libvirtError virDomainCreateLinux() failed POST操作失敗: (xend.err 'Device 0 (vif) could not be connected. Hotplug scripts not working.
(7)半虛擬化安裝,選擇nat上網方式、IP配置使用 DHCP 方式時,虛擬機系統安裝過程卡在 TCP/IP 配置界面,停滯不前