用于将图像从主区域同步到其他区域的工具

fiware-glancesync的Python项目详细描述


…_顶部:

glassync-glash同步组件内容::本地:

fiware ops tool
用于同步fiware lab中连接的不同glance服务器中的glance图像。


此项目是"fiware"的一部分。


虽然此组件是为fiware开发的,但该软件高度可配置,除了OpenStack库之外,没有特殊要求,
可以与任何其他项目一起使用,也可以用作同步图像的通用工具。
此外,所有的OpenStack接口都在一个模块中,可以调整代码以支持其他平台。

可以像启动服务一样启动应用程序,该服务允许您使用特定的Fiware Lab管理员帐户同步不同的区域。它可以与fiware lab keystone服务生成的特定令牌一起使用。

您可以使用
`github issues`
提供反馈。


top



Overall description
===


fiware项目设计的,但是它已经扩展为对其他用户或
项目有用。

从主区域到联盟中的其他区域(或其子集)。
此功能在没有配置。它只需要
一组与
keystone服务器联系所需的环境变量,而不是glance工具。也可以在文件中设置这些
参数,而不是使用环境变量。此外,配置文件中的任何
选项也可以通过命令行提供。

glossync同步算法(即确定主
图像是否必须与其他区域同步的方法)是可配置的。默认情况下,所有公共图像都是同步的,但是,只要在
配置文件中添加一行,就可以只同步具有特定元数据的公共映像
(例如联邦映像=true)。


glossync还支持与主区域不使用同一密钥库服务器的区域的同步,并且因此需要他们自己的一组
凭据。区域按*目标*分组:如果两个区域使用相同的凭据,则它们可能位于
同一*目标*中(因此,它们的glance服务器
注册在同一密钥库服务器中)。唯一必需的*target*是
``master``目标,其中master region是。大多数glassync
配置,包括选择要同步的图像的标准,
都是在目标级别定义的。使用相同的
凭据创建多个目标是可以的,例如,如果某些区域只共享最小的图像集,而
其他区域的列表更宽。

默认情况下,glossync不会替换现有图像。如果要同步的区域与主区域之间的图像校验和不同,则会发出警告。用户可以选择使用whilelist或黑名单强制覆盖特定映像(可以选择重命名旧映像),包括配置文件中的校验和。


,glassync更新元数据,但只更新有限的集,以避免覆盖该glash服务器中被视为本地的属性。此外,系统属性"is_public"也会更新。

包括对内核映像(*aki*)和ramdisk映像(*ari*)的引用,
但它们是由uuid命名的。因此,glossync必须更新此字段以反映特定区域中的uuid。


glossync支持将图像标记为过时,添加后缀*\u obserate*
过时的图像是不可同步的,但它是以特殊方式管理的:
重命名图像时,更改将传播到其他区域。此外,还会传播图像的可见性(即,如果主图像被标记为私有,则在所有其他区域中被设置为私有)。


这些图像不再是联盟中
强制图像集的一部分,但可能是本地用户使用的。


about uuid and image names
使用uuid进行同步通常是个坏主意,因为在限制
uuid必须是唯一的时可能会出现一些问题。请注意,如果不创建新的uuid,则不可能替换
图像的内容,并且旧的uuid可能不会被
重用。如果需要类似于uuid的内容,最好使用
元数据字段来模拟它。

当目标目标中有多个
要同步的图像名称时,这是一个特别的挑战。在
这种情况下,glossync会获取使用相同检查值找到的第一个图像
(如果没有匹配的检查和,则绝对是找到的第一个图像)
,并为检测到的每个重复图像打印警告。带有重复名称的主图像
不同步并打印警告。

碰撞风险增加,用户无法控制。为了避免
这一点,glossync默认情况下忽略其他租户的图像。
无论如何,这是一个普遍的问题,而不仅仅是同步
问题,因为一个同名的图像对想要使用它们的用户来说非常混乱。因此,最好限制
共享图像的发布。

然后对每个指定区域运行
算法(或在
同一密钥库服务器中注册的所有区域,如果未指定,则为主区域)。如果在区域同步中发生错误
,则GlaseSync不会在该区域中运行更多操作
,并跳到下一个区域。

对于每个区域,GlaseSync将开始获取其图像的列表。然后
Calculates with images应与此区域同步(这将在下一节中详细介绍)。


更新元数据后,
将上载丢失的图像。上传是按大小顺序进行的,这样当glass服务器出现问题时,它将在前面用
最小的图像(例如,当没有足够的空间时)检测到。开始
的另一个原因是,ami映像;内核和ramdisk也是
映像,并且因为它们较小,所以在
需要它们的ami映像之前上载。最后一步是在同步会话期间上载内核/ramdisk映像时更新ami
映像中的内核/ramdisk字段。


glossyn检查它们比较校验和时是相同的。当它们不同时,应用以下算法:


1)是"dontupdate"列表中从节点的校验和吗?仅打印警告
2)从节点的校验和是否在"重命名"列表中?重命名旧映像(添加*.old*后缀
),将其更改为private,并上载主区域的映像
3)是"替换"列表中从属节点的校验和吗?用主区域的图像替换旧图像
4)参数"replace"是否包含关键字*any*?重命名旧图像并上载主区域的图像
5)参数"rename"是否包含关键字*any*?用主区域的图像替换旧图像
否则:打印警告。用户应该执行一个操作并填充
``dontupdate``、``replace``或``rename``参数。同时,
图像被认为是暂停的,根本不同步。

注意:当我们讨论从节点的校验和时,我们的意思是我们需要指定
不是从主节点的校验和,在我们的例子中是spain2,但同步的目标
中的校验和。

*元数据条件*和*元数据集*。对于每个目标,它们都可能不同;当大多数目标使用相同的选择条件时,
一个选项是将这些选项放在*默认*部分中。

这是确定图像是否可同步的算法:

1)带*过时*后缀的图像,从不同步
2)其他租户的图像从不同步
3)具有重复名称的图像从不同步,以避免歧义。
4)如果图像的uuid包含在"forcesync"中,则无条件同步
,即使映像不是公共的。
5)如果定义了"metadata_condition",则它包含python代码,该代码将计算
以确定映像是否同步。代码可以使用两个变量:
image,其中包含有关该映像的信息和"metadata-set",其中包含该参数的
。图像中更有趣的字段是"用户属性",这是一个包含图像元数据的字典。其他属性包括*id*,
*name*,*owner*,*size*,*region*,*is_public*。即使图像不是公共的,也可以同步
要避免这种情况,请选中条件中的"image.is_public"。
如果未定义元数据集并且"image.is_public",然后,映像将与所有"用户属性"同步

6)如果未定义"元数据条件",则映像是公共的,并且定义了"元数据集",如果"metadata\u set"的某些
属性位于"image.user\u properties`.
7)如果未定义"metadata\u condition`",则图像是公共的,并且未定义"metadata\u set`",则图像是同步的
8)否则,图像不同步。

例如,要在Fiware Lab中同步图像,最好的选择是设置"metadata"set=nid,sdc\u aware,type,nid\u version`,因为所有要同步的图像都至少有一个属性。

它用于确定如何在远程ima中更新元数据通用电气公司。如果未定义,则从主映像复制所有元数据
,否则,只复制"metadata\u set"中的属性。请注意,系统属性*是公共的*不能包含在
``元数据集``中,因为它不是用户属性,而是系统属性。无论如何,
*是公共的*是无条件同步的。

当图像被标记为过时时,将不再同步,因此不会将其上载到不存在的区域。但是,如果远程区域
中存在同名但没有后缀的图像,则会重命名该图像,并使用主区域上的值更新可见性。同时,同步在*过时的同步属性*中指定的属性(如果有)。如果要同步的
区域中有一个已重命名但未传播其他更改的
图像,则还可以管理
属性和可见性的同步。


图像:

*两个图像是否相同?校验和将被比较,并且只有当它们
相同时才进行更改。
*区域中的映像是否用于同步另一租户的公共映像?
在这种情况下,不要触摸图像。
*是否有一个名称相同但没有后缀的图像也在
主区域中,并且是可同步的?在这种情况下,图像将在不考虑过时图像的情况下正常同步。


因为不再受支持。
重命名或更改
租户后,可以将映像还原为公用以供本地使用(以避免它再次自动变为专用),但在此之前,重要的是要进一步了解映像的安全状态。

可以使用
*support\u observate\u images=false*对*target*禁用过时图像的处理。此标志影响图像重命名和元数据更新,但是无论如何,后缀为"_observate"的图像永远不会同步。


top_


build and install
===



requirements
----


glossync设计为与图像一起运行的安装点,因为它会读取直接存储在文件系统中的图像。通常,这个
目录是/var/lib/glance/images。


或在CentOS中与Yum一起使用):

-python 2.7
-pip
-virtualenv



实际上,安装过程只与python依赖关系有关,因为python代码不需要安装。


1)创建一个virtualenv'glossyncenv'调用*virtualenv glossyncenv*
2)使用*source glossyncenv/bin/activate*
3)安装运行*pip install-r requirements.txt的需求--允许所有外部*

现在系统已准备好使用。对于以后的会话,只需要执行步骤2。


top


server configuration
=====


您应该通过执行"run.py"进程来启动服务器。您可以在
运行部分看到如何启动服务器。在本节中,我们将解释必须定义的配置
文件,以便与glossync服务一起使用。最后但并非最不重要的一点是,如果要启动同步组件的核心模块,还需要配置客户端组件。


将从环境变量或
``/etc/fiware.d```中的文件中获取值。文件名必须是"fiware glossync.cfg"和
"fiware glossync logging.cfg"。我们采用的选项如下:

1)在第一种情况下,应用程序尝试查看是否定义了变量"glossync"设置"文件"、"glossyncApp"数据库"路径",
``glossynccapp_config``和``glossync_logging_settings_file```.
此环境变量将具有配置文件的位置,您可以使用以下命令指定它们

代码:

$export glassync\u settings\u file=/users/foo/fiware glassync/app/settings/fiware glassync.cfg
$export glassync\u logging\u settings\u file=/users/foo/fiware glassync/app/settings/fiware glassync logging.cfg
$exportglossyncApp_database路径=/users/foo/glossyncEnv/lib/python2.7/站点包/
fiware_glossync.egg/fiware glancesync/
$export glossyncApp_config=/users/foo/glossyncEnv/lib/python2.7/站点包/
fiware-glassync.egg/fiware glancesync/app/config.py

2)如果"glassync设置文件"和"glassync日志设置文件"环境变量不存在,应用程序将尝试从目录`/etc/fiware.d`

previos选项完成后,服务器将启动错误消息
,如下所示:

…代码:

错误:没有定义glossyncApp_config环境变量
指向config.py路径文件
请至少更正其中一个以执行程序。

错误:没有定义glossyncApp_database_path环境变量
指向数据库路径文件
请至少更正其中一个以执行程序。

错误:既没有定义的glossync日志记录设置文件环境变量指向fiware-glossync-logging.cfg也没有/etc/fiware.d/etc/fiware glossync logging.cfg
文件。请至少更正其中一个以执行程序。

错误:没有定义指向fiware-glossync.cfg或/etc/fiware.d/etc/fiware glossync.cfg的glossync设置文件环境变量。请至少更正其中一个以执行该程序。


配置您自己的配置文件
---------------------------


glossync服务器有两个配置文件:

*fiware-glossync.cfg,这是配置服务和需要修改
*fiware-glossync-logging.cfg,此文件用于配置日志系统,不需要更改组件发布中默认定义的内容。

为了正确执行服务,必须在
中配置一些参数。显然,它们不包含在存储库中:

-**keystone_url**,fiware lab中keystone服务的服务端点(通常在组件的安装中定义)。

-**adm_user**,keystone中的管理用户。

-**adm pass**,管理员用户的密码

-**adm_tenant_id**,管理员用户的租户ID。

-**adm_tenant_name**,管理员用户的租户名称(您必须提供adm_tenant_id或adm_tenant_name)。

-**user_domain_name**,user domain name,默认情况下,对于管理员帐户,您可以使用值"default"。


top\u




client configuration
====


-——————————————————————————————————————————————————————————————————————————————在这种情况下,必须用
管理员凭据填充以下OpenStack环境变量:``OS_username``,``OS_password`,``OS_auth_url`,
``OS_tenant_name`,``OS_region_name``。"os_region_name"的值将
主区域(在fiware lab中,此区域是spain2)。

还可以使用命令行传递任何配置选项。对于
示例,下面的调用运行一个同步,从命令中获取
行参数*主*区域*在*主*部分和*元数据集合*在
默认*部分:

。代码:

./sync.py--config main.master_region=spain2 metadata_set=nid,type,sdc_aware,sdc_version

如果在*--config*参数后面指定区域列表
*则会出现此问题,因为这样区域就会被解析为*--config*参数的
部分。解决方案是传递
参数之前的区域*或使用标准分隔符*--*:

…代码:

main.master_region

the configuration file
——


glossync组件使用的配置存储在
``/etc/fiware.d/glossync.conf``文件中。但是,可以使用
环境变量*glossync_config*


如果两个区域使用相同的凭据,则它们位于相同的目标中)。
``master``部分是主区域所在的目标,也就是说,位于要与其他区域同步的图像所在的区域


如果在大多数或所有目标中都使用了相同的值,则可以在默认部分设置这些值。

它可以通过两种方式提供(在"master"的情况下,也可以使用前一节中解释的环境变量,即使可以将两种方法结合起来,例如,通过
环境变量设置密码:使用凭证选项。有四个值用逗号分隔:
第一个值是用户,第二个值是用base64编码的密码,第三个值是keystone url,第四个值是租户名称。
*使用选项*user*,*password*,*tenant*,*keystone庘url*

如果凭据存储在配置文件中,则可以方便地
使调用glassync的用户只能读取该文件。


配置文件的示例文件,所有可能的
选项都在注释中自动解释。这样的配置文件可以通过调用*fiwareglancesync/script/generated_config_file.py*

快速同步配置开始
…代码:

[main]

不存在的区域将被忽略。也会对其他区域进行同步,但首先修改
列表,然后在区域前面加上"target:"
此参数处于启用状态仅在运行不带参数
的同步时使用,或区域列表包含"目标"(例如"主"扩展为"主"中的区域,但在"忽略"区域中指定)。当通过命令行显式提供完整的区域
列表时,将使用参数的顺序。
首选顺序=Trento,Lannion,Waterford,Berlin,prague

用于执行同步的最大同时子进程数。
每个区域都使用子进程同步,因此,此
参数设置可以同时同步的区域数。
默认值max撸u children=1,意味着同步是完全
顺序的。请注意,还需要使用
--parallel参数调用同步工具。

max_children=1

主映像所在的文件夹(文件名是主区域中
映像的uuid)。默认值是
格兰仕服务器存储图像的文件夹。
图像目录=/var/lib/格兰仕/images

[默认值]

此部分中的值是其他部分的默认值。

image
参数可以是any或csv列表(或结尾带有"any"的csv列表),
校验和是目标Glance服务中的值。
replace=9046fd22131a96502cb0d85b4a406a5a

此校验和的文件将被主映像替换,
但旧图像将保留重命名(使用相同的名称,但扩展名为
.old)并设为私有。校验和是
目标概览服务中的值。
参数可以是any或csv列表(或结尾带有"any"的csv列表)
rename=any

如果replace或rename是any,不要用这些校验和更新或重命名图像。校验和是目标格兰仕服务中的值。
dontupdate=

#要评估映像是否已同步的条件。
定义了映像以及元数据集(请参阅下一个参数)。
默认条件为:
映像是公共的(而不是元数据集或元数据集。交集(映像。用户属性))

以及要同步的用户属性列表。如果未定义此变量,则同步所有用户变量。
metadata=nid,type,sdc_aware,nid_version

它同时获取租户拥有的
图像和其他租户拥有的公共图像。
如果此参数为true(默认值和建议值),则仅考虑
租户的图像。这意味着它可以在同步新图像之后存在,新图像的名称与来自其他用户的公共图像的名称相同。它可能非常混乱(实际上,当检测到警告时会打印警告),但通常不建议使用其他租户的图像。要了解更多信息,请参阅文档中的"关于uuid和映像名称"。
从主区域仅考虑租户的图像。
只有租户的图像=true

有关详细信息,请参阅文档。
support_obserated_images=true

)在过时的映像中,当"支持过时映像"为真时。
过时的同步属性=SDC感知的

默认值为30秒。
列出映像超时=30

如果此参数为真,则使用API的版本3。否则,使用版本2
use_keystone_v3=false

[master]


租户名称
os_auth_u url(甚至将此环境变量与参数user、password等混合使用)
credential=user,w91c2x5x2rpzf95b3vfdghpbmtfdghpc193yxnfdghlx3jlywxfcgfzc3dvcmq/,http://server:4730/v2.0,tenantid1

要同步的图像或当列表中包含不带区域的"目标"时(例如master:)。在这种情况下,它将使用目标中的区域列表展开,但忽略区域中包含的区域除外
ignore\u regions=spain1


[实验性]

http://server2:4730/v2.0,tenantid2
metadata_condition=image.is_public and image.user_properties.get('type',none)=‘baseimages’

……glossync配置文件定义了两个*目标:``master``和``experimental``。第一个
使用定义的属性*nid*和/或*type*同步所有公共图像。最后一个仅与"type=baseimages"同步图像


安全考虑
——


只读访问(或者使
可以获得所有这些文件的副本,或者至少可以同步的子集,在其他路径中,然后设置选项*images_dir*)

强烈建议:

*创建一个帐户以仅运行glossync
*创建一个只能由glossync帐户读取的配置文件。这是因为凭据不应公开给其他用户。


top_





client running
===


basic use
----


一旦安装了所有依赖项,有一种方法可以从命令行手动运行glassync,调用glassync
发行版中的"sync.py"工具。


密钥库服务器中注册(除了在``master``部分中的``ignore_regions``参数中指定为逗号分隔的列表
)。命令
还可以作为参数接收要同步的区域。也可以
指定目标名称和后缀*:*;这样它就扩展到该目标中的所有
区域(例如,如果有两个区域,
target*target1*中的*regiona*和*regionb*,然后*target1:*扩展为*target1:regiona target1:regionb*)

当通过命令行
选项*--parallel*时,glossync会同步
parallel中的多个区域。同时同步的数量或区域由主部分中的
参数max_children确定。默认值为1(无并行)。
当同步在并行上运行时,DI将创建模式为
*sync"year">lt;"month">lt;"hour">lt;"minute">的目录。其中,它是每个
区域的一个文件,其中包含同步过程的日志。


但不实际执行操作。

不用运行同步。


可以使用
选项*--config*覆盖配置文件的任何参数。请注意,设置多个参数的方法是用空格分隔它们(例如*--config option1=value1 option2=value2*)


最后,选项*--show status*是获取有关区域的同步状态的报告。这方面的更详细信息是
在*检查状态*部分中提供。

正如所指出的,GleesSync还可以从主区域同步到不使用同一密钥库服务器的区域。*target*是指共享凭证的区域的名称空间。"master"目标是主区域所在的目标。每个目标在
配置文件中都有一个名称为的节,用于指定凭据和可选的其他配置
(大多数参数都是每个目标本地的)。

同步到其他*目标*中的区域的方法,指定
具有prefix`<;target_name>;:``的区域。例如,要同步到region
trento和berlin2,它们都位于主区域之外的同一密钥库服务器中,
但也要同步到regionone和regiontwo,注册在target*other*中,必须调用以下命令:

代码:

./sync.py trento berlin2 other:regionone other:regiontwo


请注意,可以省略*master:*前缀。


making a backup of metadata
=--

在主区域。这对于
调试或测试是很有用的,因为glossync支持使用一个mock来读取
文件,而不是联系真正的服务器。mock
还用于测试真实场景。

每个区域都有一个文件(名称为backup lt;region>;.csv)
,文件中为每个图像都有一行。包含以下字段:

*区域名称
*图像名称
*区域中图像的Uuid
*图像的状态(正常状态为"活动")
*字节大小
*校验和
*所有者的租户ID(也称为项目ID)
*布尔值指示图像是否是公共的
*只有用户属性


的字典才能获取有关公共图像/租户拥有的图像的信息。这是glass api的一个限制:即使管理员
也无法获得其他用户的私有图像列表。


使用带有备份的mock
_模拟:

可以使用备份的结果(更改
内容后可以选择)测试不同的场景。


假设备份目录*backup_glasse_2015-11-17t12:54:26.117838*重命名为*scenario1*。调用这一行之后,不再使用
真正的服务器操作,而是使用保存在*persistent_data*文件夹中的元数据的模拟:

代码:

eval$(glossync/glossync_serverfacade_mock.py—路径持久化_data scenario1)
导出pythonpath=glossync

创建的场景是持久的,也就是说,可以voke*sync.py—显示状态*
运行同步之前和之后的状态,以检查状态是否已更改。


mock将用作租户ID(这对于比较文件的所有者很重要)
如果在配置中定义了paremeter*租户ID*,否则,*id*将作为后缀添加到租户名称中。


要使测试结果具有确定性,在模拟中创建新图像时,
uuid不是随机的。uuid的模式是*<;seq>;$<;image_name>;*其中seq是一个数字,从1开始,保证uuid的唯一性。

代码:

./sync.py—显示状态

这将打印*主*目标中所有区域的状态,即与主区域相比,位于同一密钥库服务器中的
区域的状态。如果在*主*配置部分中定义了``ignore_regions`
,指定的区域将被忽略。


当然也可以检查任意一组区域的状态,例如,调用:

。代码:

./sync.py—显示状态trento mexico gent target2:region1 target2:region2

它将显示位于*master*
目标中的trento、mexico、gent区域以及在*target2*目标中定义的region2中的region1区域的状态。

为每个
区域同步的每个图像的行。也就是说,在上一个例子中,如果15个图像同步到*master*的
区域,10个图像同步到*target2*区域,则打印15*3+10*2图像的总计


每行是csv。第一个字段是同步状态,
秒是区域名称,第三个是图像名称。这是一个
示例:

…代码:

ok,prague,base戋centos戋6
ok,prague,base戋ubuntu戋14.04
ok,prague,base戋ubuntu戋12.04
ok,prague,base戋debian戋7
ok,prague,base戋centos戋7
待上传,实验:valladolid,基本同步状态可分为三类:最终状态,
错误状态和挂起的同步状态。

最终状态
与master的校验和不同,
,但此校验和包含在参数"dontupdate"中。因此,不会更新映像
(内容或元数据)


错误状态

但是对于不同的校验和
则没有匹配的dontupdate、rename或replace指令。action
required:用*dontupdate*或*rename*或
*replace*
*error\u ami填充校验和(或使用任何校验和):映像需要不在要同步的映像的
列表中的内核或ramdisk。所需操作:确保选择条件
包括内核/ramdisk映像。

挂起同步状态
请注意,尽管glossync执行已完成,但映像可能处于
挂起状态,因为gloss
服务器响应时出错。但是,这仍然被视为挂起状态
,而不是错误状态,因为这不是用户必须由
自己解决的问题。

*挂起元数据:存在具有正确内容(校验和)的映像,但必须更新
元数据(这可能包括ramdisk id和kernel_id)
*pending_upload:映像未同步;必须上载
*pending_replace:存在映像,但校验和不同。
图像将be replaced
*pending_rename:有一个图像,但校验和不同。
映像将被替换,但在此之前,旧映像将被重命名为
*挂起:映像需要处于
*挂起上载*状态的内核或ramdisk映像,*pending_replace*或*pending_rename*

因为它读取直接存储在文件系统中的图像。

这可能会带来不便,但真正的问题是,当glash backed不使用普通文件(例如cepth backend)时,因此即使glashsync在glash服务器上运行,它也无法读取这些文件。


指向由环境指定的文件夹的指定区域
变量*glance_images*(默认为``/var/lib/glance/images``),然后
运行同步:

。代码:

!/bin/bash



/sync.py--show status$*awk-v ors=-f,\
'/^pen未决(上传重命名)/{words[$3]++}
end{for(i in words)prinsubsr(i,1,长度(i)-1)}





从@u name(){
br/>grash image show$1 awk-v ors=-f,'
end{for(i in words)prinsubsr(i,1,长度(i)-1,长度(i)-1)}'

F型\|\
'$2~/[]*id/{sub(/[]+/,",",$3;$3;打印$3}





glass-images=${glass-images:-/var/lib/glass/images}

首先,将所需图片下载到$glass-images
glass-images

do
id=$(从$name$name中获取id)

是的回显$name$id
如果[!-f$glance_images/$id];然后
glass image download--file$glass哏images/$id--progress$id
fi
done


\run synchronisation
./sync.py$*--config images哏dir=$glass哏images




命令行中的glossync服务器。您可以通过以下命令从命令行获取运行的不同选项的信息:

代码:

$python run.py

用法:run.py[-h]{gunicorn server,shell,db,runserver}…

在烧瓶应用程序上下文中运行python shell。
db执行数据库迁移
run server运行烧瓶开发服务器,即app.run()

可选参数:
-h,--帮助显示此帮助消息并退出

我们将详细介绍数据库,runserver和gunicornserver选项。

您可以获得不同操作的帮助:


…代码:

$python run.py db-h
用法:执行数据库迁移


执行数据库迁移

revision}
升级到更高版本
heads显示脚本目录中当前可用的heads
将两个修订合并在一起。创建新的迁移
文件
为"revision--autogenerate"迁移别名
用给定的修订标记"stamp"修订表;
不运行任何迁移
show显示由给定符号表示的修订。
current显示每个数据库的当前修订。
编辑编辑当前修订。
init生成新的迁移
降级还原到以前的版本
分支按时间顺序显示当前分支点
历史记录列表变更集脚本。
修订创建新的修订文件。

可选参数:
-h,--帮助显示此帮助消息并退出

这允许您保留我们正在使用的数据库的修订版。第一次使用
组件时,需要创建数据库存储库并初始化其修订版。它可以通过以下命令(按顺序)完成:

。代码:

$python run.py db init
$python run.py db migrate
$python run.py db upgrade



run basic server
----


初始化数据库后,我们可以启动应用程序,有两种可能。
我们看到了启动应用程序的简单方法,该应用程序基本上运行一个python进程。
您只需执行以下操作即可获得帮助:

…代码:

$python run.py run server-h
用法:run.py runserver[-h[-t主机][-p端口][--threaded]
[--processes进程][--passthrough错误][-d]
[-r]


app.run()

可选参数:
-h,--帮助显示此帮助消息并退出
-t主机,--主机
-p端口,--端口
--线程
--进程
--传递错误
-d,--无调试
-r,--没有reload

如何查看几乎所有参数都是可选的,主机和端口在``fiware glossync.cfg`
文件中定义。您可以执行服务器执行:

…代码::

$python run.py run server



run gunicorn server
----


gunicorn http服务器后面有可能启动服务。` gunicorn"绿色独角兽"是一个用于unix的
python wsgi http服务器。您需要先安装此http服务器才能执行glossync
服务。看看Gunicorn站点,看看如何安装它。请记住,您应该使用大于0.9.0的
版本。


在安装http服务器之后,您可以执行该组件。如果您执行以下命令
,您可以获得有关您拥有的选项的详细信息:

…代码:

$python run.py gunicorn server-h
用法:run.py gunicornserver[-h[-h主机][-p端口][-w工作线程]


在gunicorn中运行glossync服务器应用程序。

-h主机,--主机IP地址或GleesSync服务器的主机名。
-p端口,--运行GleesSync服务器的端口端口
-w工作线程,--工作线程
要启动的并发工作线程数,通常
2*core numbers+1.


默认情况下,主机、端口和工作线程在配置文件中定义,无需在此再次指定它们。所以要运行服务,只需写下以下行:

…代码:

$python run.py gunicornserver-h



logging files
——


>当前版本的GleesSync服务生成的日志文件将位于启动应用程序的应用程序的sam目录中。它是用log rotate定义的,允许控制文件。您可以在``fiware glossync logging.cfg`
文件中查看日志文件配置的详细信息。默认情况下,它将使用**glossync api.log**命名。successive rotate文件将被计算为在以前的文件名(例如glossync api.log.1)中添加一个从".1"到".3"的字符串。请查看下面的API参考文档部分。`

顶部



代码:

行为特征/--tags~@skip

查看
``test/acceptance/readme.rst```测试/验收/readme.rst``以获取有关如何
准备运行功能测试目标的环境的更多信息。


































为此:

代码:

docker build-t fiware glossync-f docker/dockerfile docker
docker build-t fiware glossync acceptance-f docker/acceptancetests/dockerfile docker/acceptancetests

我们可以使用docker compose(包括环境变量)运行验收测试。要导出,则需要:

…代码:

export os_auth_url={testbed的auth uri agains the tests are going be execute}
export os_user name={the user name}
export os_tenant_name={the tenant name}
export os_password={the password}
export os_region廑name={区域}
导出操作系统项目域名{项目域名}
导出操作系统用户域名{用户域名}
导出密钥存储IP{部署测试台的密钥存储IP}
导出区域1={测试区域1}
导出区域2={区域测试名称2}
导出区域3={测试区域名称3}
docker compose-f docker/docker-compose.yml up

Docker完成后,您可以通过
获得测试结果。代码:

docker cp docker_fiwareglancessync-acceptance:/opt/fiware/glossync/tests/acceptance/testreport.



unit tests
——
运行单元测试,您需要使用requirements.txt和test-requrirements.txt中包含的requirements
创建一个virtualenv。您只需要
在fiware glassync
代码的根目录中执行nosetests程序。请记住,执行单元测试需要python2.7或更高版本。代码:

virtualenv-p<;python v2.7的根目录>;venv
source./venv/bin/activate
pip install-r requirements.txt
pip install-r test requirements.txt
notests--exe
deactivate

8个测试被标记为跳过,因为它们是更正确的集成测试。它们在文件"test_glassync_serversfacade.py"中。测试的
模块包含所有与glance交互的代码,测试会对真正的glance服务器进行一些
检查。要激活这八个测试,请编辑文件并将testingfacadereal更改为true。它需要通常的openstack环境
变量(*os_username*,*os_password*,*os_tenant_name*,*os_region_name*,
*os_auth_url*)

它用Docker Execution进行测试,Docker可以执行Glasync单元测试。为此,首先需要创建docker映像,
并使用以下命令:

。代码:

docker build-t fiware glassync build-f docker/unittests/dockerfile docker


创建fiware glassync生成映像后,我们可以通过以下方式运行它:

。代码:

docker run--name fiware glassync build fiware glassync build

代码:

docker cp fiware glassync build:/opt/fiware/glassync/测试结果。
docker cp fiware glassync build:/opt/fiware/glassync/覆盖率。

*测试/资源*
对于方案"新方案",必须创建以下文件夹:

*新方案:在调用同步之前,每个区域都有带有元数据备份的文件。这些文件可以用*sync.py--make backup*
*new_scenario生成
。结果:调用同步后,每个区域都有备份
元数据的文件
*new_scenario。status_pre:有状态为调用同步之前的每个区域。这些文件可以使用*sync.py--show status*
*new_scenario.status_post的
输出生成:在调用
同步后,存在具有每个区域状态的文件。这些文件可以在forlder*new_scenario*中使用
输出*sync.py--show status*


生成,还可以选择包含一个*config*文件。
如果找不到该文件,则在使用测试文件"tests/unit/test_glossync.py"。

然后,必须定义扩展*testglossync_sync*的测试类,例如:

。代码:

class testglassync_ami(testglassync_sync):
"使用ami映像(kernel_id/ramdisk_id)测试环境"
def config(self):
path=os.path.abspath(os.curdir)
self.path_test=path+'/tests/unit/resources/ami'
self.regions=['master:burgos']

关于"Fiware Q&A"的问题。
在这两种情况下,请使用标签*Fiware Health*


top



license
===


(c)2015 Telefónica I+D,Apache License 2.0






图像

…|构建状态图像::https://travis-ci.org/telefonicaid/fiware-glossync.svg?branch=development
:目标:https://travis ci.org/telefonicaid/fiware glossync
:alt:build status
…| stackoverflow image::https://img.shields.io/badge/support of yellowgreen.svg
:target:https://stackoverflow.com/questions/taged/fiware-glossync
:alt:help?提问
…|工作服图片:https://coveralls.io/repos/telefonicaid/fiware-glossync/badge.svg?branch=development&service=github
:目标:https://coveralls.io/github/telefonicaid/fiware-glossync?分支=开发
:alt:单元测试覆盖率
…|许可证徽章图像::https://img.shields.io/badge/license-apache_2.0-blue.svg
:目标:许可证
:alt:apache 2.0许可证
…| Docker Badge图像::https://img.shields.io/docker/lauls/fiware/glossync.svg
:目标:https://hub.docker.com/r/fiware/glossync/
:alt:Docker拉动
…|文档徽章图片::https://readthedocs.org/projects/fiware-glossync/badge/?version=latest
:目标:http://fiware-glossync.readthedocs.org/en/latest/?徽章=最新的参考文献_固件:http://www.fiware.org
…_ GitHub问题:https://github.com/telefonicaid/fiware glossync/issues/new
…_ stackoverflow:http://stackoverflow.com/questions/ask
。_` Fiware问答:https://ask.fiware.org
…_` gunicorn`:http://gunicorn.org/

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

推荐PyPI第三方库


热门话题
有没有一种方法可以将不同的java web应用程序组合到一个web应用程序(war)中而不相互影响?   java一次屏蔽两位   java如何在多个类上初始化元素?   java在后台服务中处理通知或使用GCM(或其他推送通知服务)   java从const方法调用JNI函数   javascript如何使用函数/方法返回?   Java优化:声明类变量与使用临时变量   java字符算术基数8 vs基数10   Java流收集要存储的对象列表   swing我正在用Java中的keyListener制作一个精灵移动器   在Gradle构建脚本中使用Scala(或java)方法   java Android Mediaplayer下一步按钮不起作用   Java Sound API在播放音频文件后将其锁定   java将变量从外部类传递到内部类的最佳方法   使用play framework的博客web应用程序出现java逻辑错误   java我们可以在Spring批处理中处理大型zip文件吗?   java如何检查JTable的选定行的特定列中的值是否已经在JList中?