初探oVirt-测试sdk-python

日期:2015/10/20 - 2015/10/26 time 18:42

主机:n86

目的:初探oVirt-测试sdk-python

操作内容:

一、说明
使用sdk-python
通过pip安装 ovirt-engine-sdk-python
# pip install ovirt-engine-sdk-python

二、示例
# -*- coding:utf-8 -*-
# !/bin/env python
#
# 2015/10/26

from __future__ import print_function
from time import sleep

from ovirtsdk.api import API
from ovirtsdk.xml import params

__version__ = ‘0.2.3‘

OE_URL = ‘https://e01.test/api‘
OE_USERNAME = ‘[email protected]‘
OE_PASSWORD = ‘TestVM‘
# curl -k https://e01.test/ca.crt -o ca.crt
OE_CA_FILE = ‘ca.crt‘  # ca.crt 在当前目录下

def vm_list(oe_api):
    """
        List VM
    """
    try:
        print(‘[I] List vms:‘)
        for vm_online in oe_api.vms.list():
            print(‘{0}‘.format(vm_online.name))
    except Exception as err:
        print(‘[E] List VM:\n{0}‘.format(str(err)))

def vm_start(oe_api, vm_name):
    """
        start vm by name
    """
    try:
        if vm_name not in [vm_online.name for vm_online in oe_api.vms.list()]:
            print("[E] VM not found: {0}".format(vm_name))
            return 1
        if oe_api.vms.get(vm_name).status.state != ‘up‘:
            print(‘[I] Starting VM‘)
            oe_api.vms.get(vm_name).start()
            print(‘[I] Waiting for VM to reach Up status.‘)
            while oe_api.vms.get(vm_name).status.state != ‘up‘:
                sleep(1)
                print(‘.‘, end=‘‘)
            print(‘ VM {0} is up!‘.format(vm_name))
        else:
            print(‘[E] VM already up.‘)
    except Exception as err:
        print(‘[E] Failed to Start VM:\n{0}‘.format(str(err)))

def vm_stop(oe_api, vm_name):
    """
        stop vm by name
    """
    try:
        if vm_name not in [vm_online.name for vm_online in oe_api.vms.list()]:
            print("[E] VM not found: {0}".format(vm_name))
            return 1
        if oe_api.vms.get(vm_name).status.state != ‘down‘:
            print(‘[I] Stop VM.‘)
            oe_api.vms.get(vm_name).stop()
            print(‘[I] Waiting for VM to reach Down status..‘)
            while oe_api.vms.get(vm_name).status.state != ‘down‘:
                sleep(1)
                print(‘.‘, end=‘‘)
            print(‘ VM {0} is down!‘.format(vm_name))
        else:
            print(‘[E] VM already down:\n{0}‘.format(vm_name))
    except Exception as err:
        print(‘[E] Stop VM:\n{0}‘.format(str(err)))

def vm_delete(oe_api, vm_name):
    """
        delete vm by name
    """
    try:
        if vm_name not in [vm_online.name for vm_online in oe_api.vms.list()]:
            print("[E] VM not found: {0}".format(vm_name))
            return 1
        oe_api.vms.get(vm_name).delete()
        print(‘[I] Waiting for VM to be deleted.‘)
        while vm_name in [vm_online.name for vm_online in oe_api.vms.list()]:
            sleep(1)
            print(‘.‘, end=‘‘)
        print(‘ VM was removed successfully.‘)
    except Exception as err:
        print(‘[E] Failed to remove VM:\n{0}‘.format(str(err)))

def vm_run_once(oe_api, vm_name, vm_password, vm_nic_info):
    """
        vm run once with cloud-init
    """
    try:
        if vm_name not in [vm_online.name for vm_online in oe_api.vms.list()]:
            print("[E] VM not found: {0}".format(vm_name))
            return 1
        elif vm_nic_info is None:
            print(‘[E] VM nic info is needed: "name_of_nic, ip_address, net_mask, gateway"‘)
            return 2
        elif oe_api.vms.get(vm_name).status.state == ‘down‘:
            print(‘[I] Starting VM with cloud-init.‘)
            p_host = params.Host(address="{0}".format(vm_name))
            p_users = params.Users(user=[params.User(user_name="root", 
                                                     password=vm_password)])
            vm_nic = [nic for nic in vm_nic_info.split(‘, ‘)]
            if len(vm_nic) != 4:
                print(‘[E] VM nic info need 4 args: "name_of_nic, ip_address, net_mask, gateway"‘)
                return 3
            p_nic = params.Nics(nic=[params.NIC(name=vm_nic[0],
                                                boot_protocol="STATIC",
                                                on_boot=True,
                                                network=params.Network(ip=params.IP(address=vm_nic[1],
                                                                                    netmask=vm_nic[2],
                                                                                    gateway=vm_nic[3])))])
            p_network = params.NetworkConfiguration(nics=p_nic)
            p_cloud_init = params.CloudInit(host=p_host,
                                            users=p_users,
                                            regenerate_ssh_keys=True,
                                            network_configuration=p_network)
            p_initialization = params.Initialization(cloud_init=p_cloud_init)
            vm_params = params.VM(initialization=p_initialization)
            vm_action = params.Action(vm=vm_params)
            oe_api.vms.get(vm_name).start(vm_action)
            
            print(‘[I] Waiting for VM to reach Up status.‘)
            while oe_api.vms.get(vm_name).status.state != ‘up‘:
                sleep(1)
                print(‘.‘, end=‘‘)
            print(‘ VM {0} is up!‘.format(vm_name))
        else:
            print(‘[E] VM already up.‘)
            
    except Exception as err:
        print(‘[E] Failed to Start VM with cloud-init:\n{0}‘.format(str(err)))

def vm_create_from_tpl(oe_api, vm_name, tpl_name, cluster_name):
    """
        create vm from template.
        notice: not (Clone/Independent), but (Thin/Dependent)
    """
    try:
        vm_params = params.VM(name=vm_name, 
                              template=oe_api.templates.get(tpl_name),
                              cluster=oe_api.clusters.get(cluster_name))
        oe_api.vms.add(vm_params)
        print(‘[I] VM was created from Template successfully.\nWaiting for VM to reach Down status‘)
        while oe_api.vms.get(vm_name).status.state != ‘down‘:
            sleep(1)
            print(‘.‘, end=‘‘)
        print(‘ VM {0} is down!‘.format(vm_name))
    except Exception as err:
        print(‘[E] Failed to create VM from template\n{0}‘.format(str(err)))

if __name__ == ‘__main__‘:
    import optparse
    p = optparse.OptionParser()
    p.add_option("-a", "--action", action="store", type="string", dest="action",
                 help="list|init|start|stop|delete|create[-list]")
    p.add_option("-n", "--vm-name", action="store", type="string", dest="vm_name",
                 help="provide the name of vm. eg: -a create -n vm01")
    p.add_option("-c", "--vm-cluster", action="store", type="string", dest="vm_cluster",
                 help="provide cluster name")
    p.add_option("-t", "--vm-template", action="store", type="string", dest="vm_template",
                 help="provide template name. eg: -a create -n vm01 -t tpl01 -c cluster01")
    p.add_option("-p", "--vm-password", action="store", type="string", dest="vm_password",
                 help="-a init -p password_of_vm -i vm_nic_info")
    p.add_option("-i", "--vm-nic-info", action="store", type="string", dest="vm_nic_info",
                 help=‘nic info: "name_of_nic, ip_address, net_mask, gateway". ‘
                      ‘eg: -a init -n vm01 -p 123456 -i "eth0, 10.0.100.101, 255.255.255.0, 10.0.100.1"‘)
    p.add_option("-L", "--vm-list", action="store", type="string", dest="vm_list",
                 help=‘a list of vms. eg: -a stop-list -L "vm01, vm02, vm03"‘)
    p.set_defaults(action=‘list‘,
                   vm_cluster=‘Host-Only‘,
                   vm_template=‘tpl-s1‘)
    opt, args = p.parse_args()
    oe_conn = None
    try:
        oe_conn = API(url=OE_URL, username=OE_USERNAME, password=OE_PASSWORD, ca_file=OE_CA_FILE)
        if opt.action == ‘list‘:
            vm_list(oe_conn)
        elif opt.action == ‘start‘:
            vm_start(oe_conn, opt.vm_name)
        elif opt.action == ‘stop‘:
            vm_stop(oe_conn, opt.vm_name)
        elif opt.action == ‘delete‘:
            vm_delete(oe_conn, opt.vm_name)
        elif opt.action == ‘create‘:
            vm_create_from_tpl(oe_conn, opt.vm_name, opt.vm_template, opt.vm_cluster)
        elif opt.action == ‘init‘:
            vm_run_once(oe_conn, opt.vm_name, opt.vm_password, opt.vm_nic_info)
        elif opt.action == ‘start-list‘:
            for vm in opt.vm_list.split(‘, ‘):
                print(‘[I] try to start vm: {0}‘.format(vm))
                vm_start(oe_conn, vm)
        elif opt.action == ‘stop-list‘:
            for vm in opt.vm_list.split(‘, ‘):
                print(‘[I] try to stop vm: {0}‘.format(vm))
                vm_stop(oe_conn, vm)
        elif opt.action == ‘delete-list‘:
            for vm in opt.vm_list.split(‘, ‘):
                print(‘[I] try to delete: {0}‘.format(vm))
                vm_delete(oe_conn, vm)
        elif opt.action == ‘create-list‘:
            for vm in opt.vm_list.split(‘, ‘):
                print(‘[I] try to create: {0}‘.format(vm))
                vm_create_from_tpl(oe_conn, vm, opt.vm_template, opt.vm_cluster)
    except Exception as e:
        print(‘[E] :\n{0}‘.format(str(e)))
    finally:
        if oe_conn is not None:
            oe_conn.disconnect()

ZYXW、参考
1、docs
http://www.ovirt.org/Python-sdk
http://www.ovirt.org/Testing/PythonApi
http://www.ovirt.org/Features/Cloud-Init_Integration
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Virtualization/3.5/html-single/Technical_Guide/index.html#chap-REST_API_Quick_Start_Example
时间: 2024-10-12 19:26:25

初探oVirt-测试sdk-python的相关文章

测试Flask+PYTHON的WEB框架

参数URL: http://blog.csdn.net/qwiwuqo/article/details/8970621 安装flask之前,你必须要先安装python和easy_install. 安装 virtualenv,这个主要是用来做解释器环境隔离的,避免同一机器上的多个python或者多个python的库依赖. 然后cd到myvir目录的Scripts下输入activate.bat,就进入了虚拟环境了,然后输入easy_install Flask. 测试Flask+PYTHON的WEB框

测试开发Python培训:模拟登录新浪微博-技术篇

测试开发Python培训:模拟登录新浪微博-技术篇 一般一个初学者项目的起点就是登陆功能的自动化,而面临的项目不同实现的技术难度是不一样的,poptest在做测试开发培训中更加关注技术难点,掌握技术实现思路,提高动手能力.这里通过大家都能接触到的系统新浪微博,作为案例. 模拟登录功能比较简单,很多人在学习自动化的时候都会以登陆来作为自己的第一个学习案例,有点像开发语言中第一段代码都是helloworld!一样.登陆简单的模拟登录,直接发post请求就OK,很容易实现. 这里用新浪微博,就是技术实

测试开发Python培训:抓取新浪微博抓取数据-技术篇

测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的selenium的课程中,我们在培训的课程里讲python的语言,也是通过项目实战的方式进行讲解,前期分享了个新浪微博的登陆功能,这次在通过抓取新浪微博数据进一步讲解脚本.(大家对课程感兴趣,请加qq:564202718) 微博有发布微博功能,微博发布后需要验证内容,那么如何验证微博发布数据的正确性,首先要

测试开发Python培训:自动发布新浪微博-技术篇

测试开发Python培训:自动发布新浪微博-技术篇 在前面我们教大家如何登陆,大家需要先看自动登陆新浪微博(http://www.cnblogs.com/laoli0201/articles/4880969.html),再看这篇文章会好很多: 在上一篇python的自动化脚本中,把脚本中的发送请求数据修改就好,上一篇脚本代码替换掉: formData={ ‘location':'v6_content_home', 'appkey':'', ‘style_type':'1', ‘pic_id':'

微信支付SDK(python版)

最近一段时间一直在搞微信平台开发,最近的v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为 python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看着微信官方的demo 照葫芦画瓢就可以了. 我已经把代码放到github了,https://github.com/Skycrab/wzhifuSDK,我主要测试了JsApi调用方式,其它的调用方式并没有测试,如果你发现了bug,请多多pull request,我将不甚感激. 方便观看,代码贴于此.

一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

Web登录测试是很常见的测试!手动测试大家在熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化登录测试,给大家提供点参考!下面就包括测试代码和每种测试情况的截图: ''' cnblog的登录测试,分下面几种情况: (1)用户名.密码正确 (2)用户名正确.密码不正确 (3)用户名正确.密码为空 (4)用户名错误.密码正确 (5)用户名为空.密码正确(还有用户名和密码均为空时与此情况是一样的

数据驱动测试(Python)

自动化领域的两种驱动,对象驱动与数据驱动 数据驱动:测试数据的改变引起执行结果的改变 叫 数据驱动 关键字驱动:测试对象名字的改变起引起测试结果的改变 叫 关键字驱动 1 .读取文件参数化   以百度表搜索为例,我们可以通过脚本循环执行,读取一文件中不同的内容来完成自动化工作,也就是说我们每次取的文件里的搜索关键字不同,而每次百度搜索的的结果不同,这也是数据驱动的本质. 代码如下:d:\abc\data.txtbaidu_read_data.py #coding=utf-8 from selen

华为测试大牛Python+Django接口自动化怎么写的?

有人喜欢创造世界,他们做了开发者:有的人喜欢开发者,他们做了测试员.什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者这个软件,避免了他们被卸载的命运. 最近被几个公司实习生整自闭了,没有基础,想学自动化又不知道怎么去学,没有方向没有头绪,说白了其实就是学习过程中没有成就感,所以学不下去.出于各种花里胡哨的原因,今天给大家整一个简单又有成就感的接口自动化学习吧. 不皮了,进入正题.本文中用到的技术点有:Python

API和SDK是什么?有什么区别?如何测试SDK?

API:概念:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节.SDK:概念:软件开发工具包(外语首字母缩写:SDK.外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件时的开发工具的集合. 通俗地说,api可以比作房门钥匙.在一个房

Django框架进阶7 forms组件(pycharm内置测试环境Python Console), cookie与session操作

forms组件 写一个注册页面 获取用户输入的用户名和密码 用户点击注册发送到后端做用户名密码的校验 用户名中不能包含金瓶mei 不符合社会主义核心价值观 密码不能为空 你个DSB,密码怎么能为空 1.手写获取用户输入的前端页面代码 渲染页面 2.后端获取用户数据并做合法性校验 校验数据 3.将校验之后的结果渲染到前端页面 展示信息 不用forms组件代码: app01/views.py from django.shortcuts import render,HttpResponse # Cre