Zenoss ZenPack开发的典型工作流程是什么?

2 投票
2 回答
1340 浏览
提问于 2025-04-15 15:05

ZenPack的开发似乎涉及到创建各种持久状态。这里有一些模型类,它们明确表示持久状态。还有一些皮肤,它们与模型对象相关联。此外,还有一些组织者和持久类的实例(比如数据源、图表等)。

在开发过程中,很多事情在做对之前都是做错的。而且,如果加载一个做错事情的ZenPack,它会对加载它的Zenoss实例产生持久的影响,这些影响很难撤销。那么,开发ZenPack时通常采用什么样的方法呢?

2 个回答

2

我这周正在处理一个和Zenoss 3.1有关的问题。

注意事项- 如果你做了一个不好的zenpack——不,应该说你做了一个不好的zenpack,它可能会卡在Zope的数据库里,按照我所知道的,没有办法把它弄出来。所以-

首先,使用图形界面(GUI)备份一个干净的Zenoss网站。

稍后你需要用zenrestore来恢复,以清理这个麻烦。

我觉得有两个解决方案:

1) 如果是一个portlet-

portlet只能通过一个叫“egg”的文件来安装。通常Zenoss的文档建议你通过图形界面创建egg,但这样会让开发过程变得非常繁琐。不过,文档中也有其他方法的说明。如果你的代码是针对portlet的,可能是从一个大家都熟悉的社区portlet开始,比如Show Graph或Google Maps,那么:

  • 你需要把代码的顶层目录命名为标准的zenpack格式,并包含版本信息。

  • 进入那个目录,然后运行

python setup.py bdist_egg

这会创建dist和build两个目录。

  • egg文件会在dist目录里。

  • 使用图形界面安装这个egg。

  • 注意它没有完全安装... 真让人生气。

  • 重启服务 - zopectl restart ; zenhub restart

  • 测试一下。

  • 用图形界面删除这个portlet。重复这个过程。

注意事项: - 你必须在顶层目录里有setup.py,可能还需要一个或多个文件,比如INSTALL.txt、MANIFEST.in、README.txt。

  • setup.py的名字必须和你的目录名一致。

  • 如果你使用的是旧的或者复制的init.py文件及其init.pyc版本,你可能需要删除这些pyc文件,以强制Python脚本重新创建它们。

  • 我喜欢这样运行脚本,以确保万无一失: rm -f ./dist ./build ; python setup.py bdist_egg

2) 如果是一个普通的zenpack

文档会告诉你怎么做。

  • 从任何来源安装你的zenpack;通常你会从图形界面创建的空白zenpack开始。

  • 把文件从/usr/local/zenoss/zenoss/Zenpacks/yourzenpack复制到你的代码开发区域。

  • 用图形界面卸载这个zenpack。

  • 在命令行中,以zenoss用户身份运行zpack install --link命令(查一下语法),来安装实际上在你代码区域里的zenpack。

  • 测试一下。

  • 更新你的代码。

  • 在命令行中,以zenoss身份运行zopectl restart ; zenhub restart

  • 测试。

  • 重复这个过程。开心就好。

2

我对Zenoss具体的情况不太了解,但这种情况在任何有持久配置的系统中都很常见,比如Zope和Plone。

这个工作流程是这样的:你会创建一个可以删除和复制的测试环境,可以是部分的也可以是整体的。以一个典型的Plone网站为例,你会使用一个叫buildout的工具,这个工具可以帮助你复制开发环境,包括所有的依赖项。然后在你开发的扩展模块中,会有一个脚本或函数,让你可以按照自己的需求设置持久配置。

这样一来,你就能轻松地重建一个想要的状态。

你还会有不同的工作流程“阶段”。开发阶段通常是在每个开发者的本地机器上进行。接下来是预发布/测试阶段,这个阶段是在测试服务器上进行的。这个过程是通过将生产机器的持久状态复制到测试机器上,然后运行任何设置或升级的脚本,确保一切正常。最后,你会升级生产服务器。

撰写回答