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 配置界面,停滞不前