Оценка команд bash в качестве переменных переменной - PullRequest
0 голосов
/ 25 октября 2019

Я хочу создать ответный эквивалент команды:

apt-get install linux-headers-$(uname -r)

Требование: пакет linux-headers-$(uname -r) должен быть настроен с помощью переменной Ansible.

Во внешнем файле большой список пакетовнастроен. Теперь пакеты, имена которых оцениваются лениво, как linux-headers-$(uname -r), должны обрабатываться через задачу оболочки индивидуально.

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

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Использовать плагин pipe . Например,

- set_fact:
    linux_headers_pkg: "{{ 'linux-headers-' ~ lookup('pipe', 'uname -r') }}"
- debug:
    var: linux_headers_pkg

дает

"linux_headers_pkg": "linux-headers-5.0.0-31-generic"
0 голосов
/ 25 октября 2019

Спасибо @ Владимир Ботка за трубу. Вот решение, которое я реализовал на основе переменных pipe и replace:

Пакет описывается во внешнем файле как:

---
- packages:
    - name: Some Package Description,
      package: linux-headers-${pipe}
      pipe: uname -r

Playbook, мы получаем результатpipe и заменить на package:

- name: test pipe
  debug:
    msg: "key: {{ item.package | replace('${pipe}', lookup('pipe', item.pipe)) }}"
  when: item.pipe is defined
  with_items: "{{ packages }}"

Выход:

TASK [pipe] ********************************************************************
skipping: [default] => (item={u'packageList': [u'package1,', u'package2,', u'package3'], u'name': u'Some description 1,'}) 
ok: [default] => (item={u'pipe': u'uname -r', u'name': u'Some description 1,', u'package': u'linux-headers-${pipe}'}) => {
    "msg": "key: linux-headers-4.15.0-65-generic"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...