Назад | Перейти на главную страницу

Есть ли способ получить в Satellite 5.3 список пакетов, установленных в каждой системе?

Я пытаюсь создать список всех пакетов, установленных на сервере, без необходимости проходить каждый, используя rpm. Я думаю, что Satellite сможет предоставить это в приличном (надеюсь, легко анализируемом) формате.

Вот последний сценарий, расширяющий Джона ответ, чтобы предоставить полное решение.

#!/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

Короткий ответ: да.

Более длинный ответ: вам нужно заглянуть в Satellite API. Документация, доступная со Satellite, хороша для очень простых запросов, но вы быстро получите ответы на запросы, которые (IMHO) не так хорошо документированы. На высоком уровне вы в конечном итоге запросите у Satellite список всех зарегистрированных систем, а затем используете этот список для выполнения запросов для всех установленных пакетов в каждой системе. В конечном счете, это будет действительным только на момент последнего обновления каждой системой своего профиля пакета на Satellite, но это будет более центральным, чем троллинг каждой отдельной системы с помощью запроса RPM.

Вот код, который я использую (очищенный, конечно), чтобы перечислить системы, зарегистрированные на моем Satellite:

#!/usr/bin/python
import xmlrpclib

SAT_URL = "https://<satellite hostname>/rpc/api"
SAT_USER = "<satellite user name>"
SAT_PASS = "<password for above login id>"

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

syslist = client.system.listSystems(key)

В syslist переменная - это простой список системных объектов Python - мне еще не нужно было распаковывать его дальше, чем:

for sys in syslist:
  print "%s registered with Satellite" % (sys['name'],)

Не знаю о версии 5.3, но в отчете о команде 5.6 содержится много информации из командной строки: См .: https://access.redhat.com/documentation/en-US/Red_Hat_S