2017-01-09 3 views
3

Я пытаюсь получить весь установленный пакет yum на машине RHEL. Я могу легко получить его с помощью команд оболочки, которые не являются идемпотентными и хотели бы использовать команду yum.Как получить установленные пакеты yum с Ansible?

команда Shell отлично работает:

- name: yum list packages 
    shell: yum list installed > build_server_info.config 

Но когда я пытаюсь использовать команду ня он просто выполняет, но не дает никаких результатов:

- name: yum_command 
    action: yum list=${pkg} list=available 

ответ

9

Я могу легко получить его за счет использования команд оболочки, которые не идемнотентные

Вы не можете говорить о идемпотентности, когда вы находитесь , запрашивая текущее состояние машины.

«Idempontent» означает, что задача будет гарантировать, что машина находится в желаемом состоянии независимо от того, сколько раз вы запускаете определенную задачу.

Когда вы запрашиваете текущее состояние, вы не описываете желаемое состояние. Независимо от того, что вы делаете, какой метод вы используете, термин «идемпотент» просто неприменим.


Что касается вашего примера, который не дает вам результаты - вы повторили дважды один и тот же аргумент list и задача должна обязательно (это не так, что выглядит как причуда анзибль).

Чтобы получить список установленных пакетов, вы должны использовать:

- name: yum_command 
    yum: 
    list=installed 
    register: yum_packages 

- debug: 
    var: yum_packages 

Это сохраняет список словарей, описывающих каждый пакет переменной yum_packages.

Вы можете использовать JSON Query Filter, чтобы получить один пакет (tar):

- debug: var=item 
    with_items: "{{yum_packages|json_query(jsonquery)}}" 
    vars: 
    jsonquery: "results[?name=='tar']" 

, чтобы получить результат, как этот:

"item": { 
    "arch": "x86_64", 
    "epoch": "2", 
    "name": "tar", 
    "nevra": "2:tar-1.26-31.el7.x86_64", 
    "release": "31.el7", 
    "repo": "installed", 
    "version": "1.26", 
    "yumstate": "installed" 
} 

Или только его версия:

- debug: var=item 
    with_items: "{{yum_packages|json_query(jsonquery)}}" 
    vars: 
    jsonquery: "results[?name=='tar'].version" 
"item": "1.26" 
+0

Спасибо @techraf. Это выглядит хорошо. –

0

Ну, official Ansible documentation for the yum module описывает список, как:

«Различные (неидемпотентные) команды для использования с/usr/bin/ansible, а не с плей-книгами».

, так что вам не повезло найти идемпотент list.

Если вы просто хотите подавить вывод changed, set the changed_when parameter to False.

(Кроме того, наличие дубликата list параметр подозрительна.)

+0

Это будет тот же подход к использованию оболочки. –

+0

Да. Пойдите с решением Techraf, у него есть дополнительное действие 'register', которое я полностью пропустил. – Kyle

Смежные вопросы