ceph测试框架

teutholog的Python项目详细描述


一、CEPH集成测试运行器(CEPH integration test runner)需要自动化测试。由于ceph是一个高度
的分布式系统,并且具有活跃的内核开发,因此它的测试
需求与典型的lamp web
应用程序有很大的不同。似乎没有什么可以满足我们的需求,
因此我们编写了自己的框架,称为"teuthology"。



overview
==


teuthology运行一组给定的python函数(`tasks`),与参与测试的每个主机都有一个ssh
连接。ssh连接
使用"paramiko<;http://www.lag.net/paramiko/>;`` uu,ssh2协议的本地python
客户端,这允许我们例如在单个ssh连接中运行多个
命令,以加快测试执行。测试可以使用"gevent<;http://www.gevent.org/>;``在并发或后台执行操作。




build
==
teuthology不打算作为库分发,因此我们依赖于``requirements.txt``中列出的固定依赖关系,``setup.py`
将不列出任何依赖关系,并且只在那里。要安装包入口点
(也称为Teuthology的脚本)。

cd teuthology



----------
teuthology
脚本是为自动构建/执行Teuthology本身而提供的。只有在使用ubuntu的情况下,你才能直接运行它。为了使依赖关系更容易纠正,我们使用
`virtualenv`来管理它们。首先,确保安装了
``virtualenv``和``pip``程序;例如在debian/ubuntu上:


sudo apt get install python dev python virtualenv python pip libevent dev libmysqlclient dev python libvirt

,然后运行::

./bootstrap


macos x
----


。注意:这些说明假设您像往常一样使用"Homebrew<;http://brew.sh/>;`\u

nvs/teuthology
source~/.virtualenvs/teuthology/bin/activate

r/>
cd/library/python/{py version}/site package s
sudo ln-s/usr/local/cell/libvirt/{version}/lib/python{pyversion}/site packages/*。


最后,安装teuthology包和"requirements.txt":

python setup.py develop
pip install-r requirements.txt



-----
这些说明应该有助于在
一个不基于OSX或Debian的系统中正确安装Teuthology。

安装所需的所有系统依赖项:

*MySQL客户端
*libevent
*libvirt(带有Python绑定)

安装Python打包工具:

*pip
*virtualenv

ses,根据操作系统的不同,您需要一个python开发包
,其中包含一些构建包所需的构建帮助程序。在ubuntu中,这是
python dev`包。

/>集成测试运行需要三项配置:

-``targets`:要运行的主机;这是一个字典映射
主机到ssh主机密钥,例如:
"username@hostname.example.com:ssh rsa long_hostkey_here"
-``roles`:如何使用主机;这是一个列表s,其中每个
条目列出了要在单个主机上运行的所有角色;例如,一个
条目可能会说``[mon.1,osd.1]``
-``tasks``:如何设置群集以及在其上运行哪些测试;
请参见下面的示例

此配置的格式为"yaml<;http://yaml.org/>;``一种
结构化数据格式,它仍然是人类可读和可编辑的。

例如,一个测试运行的完整配置,它设置一个三机
集群,通过``ceph fuse``安装ceph,并让您在一个交互式的
python提示符下进行手动探索(和enab通过ssh连接到
节点并使用实时群集(特别),可能如下所示:


角色:
-[mon.0,mds.0,osd.0]
-[mon.1,osd.1]
-[mon.2,client.0]
目标:
ubuntu@host07.example.com:ssh rsa host07\u ssh key
ubuntu@host08.example.com:ssh rsa host08\u ssh\u key
ubuntu@host09.example.com:ssh rsa host09\u ssh-key
任务:
-安装:
-ceph:
-ceph fuse:[client.0]
-交互:

在"任务"部分的每个任务名称后冒号。

"安装"任务需要在所有其他任务之前。

如果没有运行dns服务器
,则可以向`/etc/hosts``添加条目。您还需要能够在没有密码短语的情况下ssh
到列出的目标,并且远程用户需要有
无密码的"sudo"访问。注意,在
``targets``条目末尾的ssh密钥是主机的公共ssh密钥。在ubuntu上,这些
位于/etc/ssh/ssh_host_rsa_key.pub

有关详细信息,请参见
``teuthology--help`。




多个配置文件
---------

>您可以将多个文件作为参数传递给teuthology。每个
将作为配置文件读取,并合并它们的内容。这允许您共享"简单3节点集群"的定义。源树附带有"roles/3-simple.yaml`",因此我们可以跳过上面"example.yaml`"中的"roles`"部分,然后
运行:

/virtualenv/bin/teuthology roles/3-simple.yaml example.yaml



在锁定机器工作之前,您必须在主目录中创建一个设置锁定服务器的.teuthology.yaml
文件,即::


lock\u server:http://host.example.com:8080/lock


teuthology会自动为您锁定节点,如果您指定了
`--lock``选项。如果没有此选项,则必须指定要在``targets.yaml``文件中运行的计算机,并使用
teuthology lock对其进行锁定。

注意,计算机的默认所有者是``user@host`。
运行
teuthology或teuthology lock时,可以使用`--owner``选项覆盖此选项。

使用teuthology锁,还可以添加描述,这样就可以记住在它们上运行的测试。这可以在
锁定或解锁机器时执行,也可以作为带有
`--update``选项的单独操作执行。若要锁定3台计算机并设置描述,请运行::

./virtualenv/bin/teuthology lock--lock many 3--desc'test foo'

/bin/teuthology lock--update--status down machine1 machine2

要查看所有计算机的状态,请使用`--list``选项。这也可以限制在特定的机器上:

./virtualenv/bin/teuthoology lock--list machine1 machine2



tasks
==


task是"teuthoology.task``包中的python模块,可调用名为"task`"。它获得以下参数:

-``ctx``:在
测试运行的整个生命周期内都可用的上下文,它具有诸如``cluster``之类的有用属性,允许
任务访问远程主机。任务也可以在此存储其内部
状态。(要注意名称空间冲突。)
-``config`:配置文件中冒号后面的数据结构,
例如,对于上面的"ceph fuse"示例,它是一个类似于
`["client.0"]``````的列表。


任务可以是简单的函数,按在"tasks"中列出的顺序调用一次。但有时,任务能够在自身之后进行清理是有意义的;例如,在测试运行之后卸载文件系统。返回python"context
manager
<;http://docs.python.org/library/stdtypes.html typecontextmanager>;`这意味着无论成功还是失败,清理操作都以
相反的顺序运行。编写
上下文管理器的一个很好的方法是使用"contextlib.contextmanager"decorator;在现有任务中查找该字符串以查看示例,并注意
它们使用"yield"的位置。

例如:

>;>import teuthology.task.workunit
>;>help(teuthology.task.workunit)

任务转到gitbuilder并安装最新生成的
结果。但是,您可以向测试配置添加其他参数,使其安装任何分支、sha、存档或url。以下是有效参数。

-``branch`:指定分支(bobtail,墨鱼…)
-``flavor``:指定风味(下一个,不稳定…)。风味可以看作是分支的子集。有时(例如,不稳定的),它们可能有一个预定义的含义。
-``project``:指定一个项目(ceph,samba…)
-``sha1``:使用此sha1值安装生成。
-``tag``:指定一个标记/标识此生成的文本(v47.2,v48.1…)
*``ceph`:显示ceph

*``覆盖`:覆盖行为。通常,这包括被覆盖的子任务。子任务可以嵌套更多信息。例如,安装任务的覆盖
是特定于项目的,因此yaml
文件的以下部分将导致所有ceph安装默认使用墨鱼分支::


覆盖:
安装:
ceph:
分支:墨鱼g任务和目标上的行为。
*``顺序`:将子任务分组到一个单元中,子任务按所列顺序运行

*``并行`:将子任务分组到一个单元中,子任务都在
并行中运行。

可以嵌套顺序和并行任务。如果未指定,则任务按顺序运行。


teuthology/task子目录包含实现任务的所有python文件。
其中许多任务用于运行在
ceph/ceph qa套件中定义的shell脚本。

运行技术(使用--lock开关),
teuthology通常在有任何任务失败时将其锁定
以调查机器状态。当开发新的条件学任务时,有时这种行为是没有用的。"unlock_on_failure"全局选项可以设置为true,以使解锁无条件进行。

添加一个顶层:

interactive on error:true

有了这个
选项,任何失败的*任务*都将在它之后调用"交互式"任务
。这意味着,在进行任何清理之前,您都有机会通过Teuthology和额外的ssh连接来检查系统,并且只有在您选择这样做时,清理才会完成。
只需退出交互式python会话即可继续清理。

y捕获任务之间的异常。如果任务
调用多个子任务,例如使用"contextUtil.nested",则将执行这些
清理。稍后,我们可以让任务将它们希望调用的子任务传递给顶级运行程序,从而避免此问题。


interactive task facilities
==============================================================================================================。变量``ctx``可用于探索,
和``pprint.prettyprinter().pprint``对象作为
'pp'添加,以便您可以执行类似pp(dict of interest)的操作,以查看dict的格式化
视图。


test sandbox directory
===

teuthogy当前将大多数测试文件和装入点放在
沙盒目录中,默认为`/home/$user/cephtest``。要更改沙盒目录的位置,可以在"`$home/.teuthology.yaml``"中指定以下选项:


test_path:<;directory>;




teuthology还支持虚拟机,它可以与
物理机器类似,但在以下方面有所不同:

vpshost:
——


已将新条目vpshost添加到
可用机器的标准理论数据库中。对于物理计算机,此值为空。对于
虚拟机,此项是虚拟机所在的物理机的名称。


对于出现在标准数据库中的虚拟机,有固定的"插槽"。这些插槽具有vps机器类型,可以像
任何其他机器一样锁定。vpshost字段的存在是因为条件学如何知道数据库条目是否表示物理或虚拟的机器。



uri_别名=[
'mira001=qemu+ssh://ubuntu@mira001.front.sepia.ceph.com/system?没有tty=1',
'mira003=qemu+ssh://ubuntu@mira003.front.sepia.ceph.com/system?没有tty=1',
'mira004=qemu+ssh://ubuntu@mira004.front.sepia.ceph.com/system?没有tty=1',
'mira006=qemu+ssh://ubuntu@mira006.front.sepia.ceph.com/system?没有tty=1',
'mira007=qemu+ssh://ubuntu@mira007.front.sepia.ceph.com/system?没有tty=1',
'mira008=qemu+ssh://ubuntu@mira008.front.sepia.ceph.com/system?没有tty=1',
'mira009=qemu+ssh://ubuntu@mira009.front.sepia.ceph.com/system?没有tty=1',
'mira010=qemu+ssh://ubuntu@mira010.front.sepia.ceph.com/system?没有tty=1',
'mira011=qemu+ssh://ubuntu@mira011.front.sepia.ceph.com/system?没有tty=1',
'mira013=qemu+ssh://ubuntu@mira013.front.sepia.ceph.com/system?没有tty=1',
'mira014=qemu+ssh://ubuntu@mira014.front.sepia.ceph.com/系统?没有tty=1',
'mira015=qemu+ssh://ubuntu@mira015.front.sepia.ceph.com/system?没有tty=1',
'mira017=qemu+ssh://ubuntu@mira017.front.sepia.ceph.com/system?没有tty=1',
'mira018=qemu+ssh://ubuntu@mira018.front.sepia.ceph.com/system?没有tty=1',
'mira020=qemu+ssh://ubuntu@mira020.front.sepia.ceph.com/system?没有tty=1',
'vercoi01=qemu+ssh://ubuntu@vercoi01.front.sepia.ceph.com/system?没有tty=1',
'vercoi02=qemu+ssh://ubuntu@vercoi02.front.sepia.ceph.com/system?没有tty=1',
'vercoi03=qemu+ssh://ubuntu@vercoi03.front.sepia.ceph.com/system?没有tty=1',
'vercoi04=qemu+ssh://ubuntu@vercoi04.front.sepia.ceph.com/system?没有tty=1',
'vercoi05=qemu+ssh://ubuntu@vercoi05.front.sepia.ceph.com/system?没有tty=1',
'vercoi06=qemu+ssh://ubuntu@vercoi06.front.sepia.ceph.com/system?没有tty=1',
'vercoi07=qemu+ssh://ubuntu@vercoi07.front.sepia.ceph.com/system?没有tty=1',
'vercoi08=qemu+ssh://ubuntu@vercoi08.front.sepia.ceph.com/system?没有tty=1',
'senta01=qemu+ssh://ubuntu@senta01.front.sepia.ceph.com/system?没有tty=1',
'senta02=qemu+ssh://ubuntu@senta02.front.sepia.ceph.com/system?没有tty=1',
'senta03=qemu+ssh://ubuntu@senta03.front.sepia.ceph.com/system?没有tty=1',
'senta04=qemu+ssh://ubuntu@senta04.front.sepia.ceph.com/system?无tty=1',
]


downburst:
----


当虚拟机被锁定时,将在该计算机上运行downburst以安装新映像。这允许用户设置要在新创建的虚拟机上安装的不同虚拟操作系统。目前默认的虚拟机是
ubuntu(精确)。可以使用"teutology.lock``.

计算机上的映像。


临时yaml文件用于下击暴流虚拟机。典型的
yaml文件如下所示::

downburst:
cpu:1
磁盘大小:30g
发行版:centos
网络:
-{源:front}
ram:4g

这些值由downburst用来创建虚拟机。

g一个文件,一个下击暴流元数据yaml文件可以通过使用命令行上的下击暴流conf参数来指定。


要找到下击暴流可执行文件,teuthology首先检查path environment
变量。如果没有定义,teuthology接下来检查用户home
目录、/home/ubuntu和/home/teuthology中的
src/downburst/virtualenv/bin/downburst可执行文件。如果
用户在用户的.teuthology.yaml文件中指定了下击暴流字段,则所有这些都可以重写。


锁定之后,一旦建立到新机器的连接,带有`--list``或`--list targets``选项的``teuthology lock``将
显示新密钥。当使用`--lock many`
选项锁定VPS机器时,将显示一条消息,指示`--list targets``应在稍后运行。


ceph-qa-chef:
----


一旦安装了新的虚拟机后开始测试,测试将检查是否存在`/cEph QA就绪。如果该文件不存在,则在条件学首次出现时运行"ceph qa chef"。

ript会自动从相应github存储库的master分支下载它们的测试。想要运行实验测试套件的人通常会修改"teutology/task"脚本中的
下载方法,以使用其他分支或
存储库。这是应该在以后的标准测试版本中推广。
标准测试qa套件可以在"src/ceph qa套件"中找到。在运行测试套件之前,请确保此
目录存在于源树中。


每个套件名称由包含该套件的"ceph qa suite"中的目录名确定。该目录包含子目录和yaml文件,
这些文件在组装后会生成可运行的有效测试。测试套件
应用程序生成这些文件的组合,从而基于套件目录中的数据运行一组
测试。

若要运行套件,请输入::

teuthology suite-s<;suite>;[-c<;ceph>;][-k<;kernel>;][-t<;teuth>;][-m<;mtype>;]


*``teuth``:要运行的标准理论版本
*``mtype``:运行的机器类型
*``templates``:用于进一步修改套件的模板文件(可选)


例如,请考虑::


schedule_suite.sh rbd wip fix cuttlefish bob.smith@foo.com master cuttlefish plana

上面的命令使用wip fix作为ceph分支、一个
笔直的墨鱼内核和墨鱼标准学的主味道运行rbd套件。它将在plana机器上运行。

g任务。如果没有进程从正在运行的测试版本中读取数据,则需要启动额外的TeuthWorker任务。
若要启动这些任务:

*将生成树复制到"teuthology.front.sepia.ceph.com"上的"home/teuthWorker"。
*给它一个唯一的名称(在本例中为xxx)
*启动一些工作线程(与正在测试的计算机一样多,默认队列有60个正在运行):

/home/virtualenv/bin/python
/var/lib/teuthworker/xxx/virtualenv/bin/teuthworker
/var/lib/teuthworker/archive--tube xxx
--日志目录/var/lib/teuthworker/archive/worker_logs


套件完成后,会向指定的用户发送一封电子邮件,并在
`/var/lib/teuthworker/archive``中的'teuthology.front.sepia.ceph.com``上留下大量信息。

将创建一个新目录
,其名称由套件开始
的日期和时间、套件的名称、测试的ceph分支、使用的内核和
味道的串联组成。对于每个测试运行,都有一个名为该测试的pid
编号的目录。每个目录都包含该进程的
``teuthology.log``副本。套件中的其他信息存储在目录中的文件中,任务特定的yaml文件和其他日志存储在子目录中。


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从ImageIO中排除特定的TIFF读取器?   JavaJMockit和passbyreference。我们中一定有一个人错了(可能是我!)   java Android camera2放弃了牛轧糖的表面,但在棉花糖上工作   java按字符串中出现的顺序对字符数组进行排序   如何获取Groovy生成的java源代码   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java为什么我的冒泡排序代码会打印出这些奇怪的东西?   java JAXB:typesafeEnumMemberName=“generateName”是否可自定义?   Java编程输入:今天是星期天输出:星期天是今天   java不理解首个OOAD书的吉他示例   java如何从JformattedTextfield检索货币格式值   java可以从相同的源代码生成功能不同的可执行文件吗?