有没有办法让 Satellite 5.3 列出每个系统上安装的软件包?

有没有办法让 Satellite 5.3 列出每个系统上安装的软件包?

我正在尝试生成每个服务器安装的所有软件包的列表,而不必逐个使用rpm。我认为 Satellite 应该能够以一种合适的(希望易于解析的)格式提供此信息。

答案1

这是最后一个脚本,它扩展了约翰答案提供完整的解决方案。

#!/usr/bin/python
import xmlrpclib

SAT_URL = "https://<SATELLITE_IP>/rpc/api"
SAT_USER = "<USERNAME>"
SAT_PASS = "<PASSWORD>"

client = xmlrpclib.Server(SAT_URL, verbose=0)
key = client.auth.login(SAT_USER, SAT_PASS)

syslist = client.system.listSystems(key)
systems = {}
for system in syslist:
    systems[system['name']] = client.system.listPackages(key, system['id'])

# Print out list in a Markdown-like format.
for system in sorted(systems.keys()):
    print '%s' % system
    print '=' * len(system)
    for package in systems[system]:
        print '- %s %s' % (package['name'], package['version'])
    print

答案2

简短的回答:是的。

更长的答案:您需要查看 Satellite API。Satellite 提供的文档对于非常基本的查询来说很不错,但您很快就会遇到(在我看来)文档不太完善的查询。从高层次上讲,您最终要做的是向 Satellite 查询所有已注册系统的列表,然后使用该列表对每个系统上安装的所有软件包发出查询。最终,这仅在每个系统上次更新 Satellite 上的软件包配置文件时有效,但它比通过 RPM 查询搜索每个单独的系统更为重要。

下面是我使用的代码(当然是经过清理的),列出注册到我的 Satellite 的系统:

/usr/bin/python 的 #!
导入 xmlrpclib

SAT_URL = "https://<卫星主机名>/rpc/api"
SAT_USER = "<卫星用户名>"
SAT_PASS = "<上述登录 ID 的密码>"

客户端 = xmlrpclib.服务器(SAT_URL,详细=0)
密钥 = 客户端.auth.登录(SAT_USER,SAT_PASS)

syslist = 客户端.系统.listSystems(键)

syslist变量是系统对象的简单 Python 列表 - 我尚不需要对其进行进一步解压缩:

对于 syslist 中的 sys:
  打印“%s已在Satellite上注册”%(sys ['name'],)

答案3

相关内容