Как упоминать подстановочный знак в недоступных командах

Я выполняю команды оболочки через Ansible.

Иногда у меня нет полного имени папки. Предположим, что у меня есть dirname solr4.7.0.

В оболочке я могу напечатать cd solr*.

Но в недоступном я не могу:

chdir=/var/solr*

Есть ли способ обхода?

Ответ 1

Нет. Параметр chdir=, например, для command модуля, не поддерживает подстановочные знаки.

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

- shell: ls -d solr*
  register: dir_name
- command: some_command
  args:
    chdir: "{{ dir_name.stdout }}"

Но это, честно говоря, некрасивое решение. Вам лучше просто использовать фактическое имя каталога. Если он отличается на разных хостах, вы можете использовать переменные хоста, чтобы установить его соответствующим образом.

Ответ 2

Как писал Ларкс, ключ должен использовать register, но код не работал над моей текущей версией. Итак, здесь исправлено:

- shell: ls -d solr*
  register: dir_name

- command: chdir={{ item }} some_command
  with_items: dir_name.stdout_lines

Ответ 3

Это довольно странно, но я обнаружил, что если вы помещаете команды, которые используют подстановочный знак, в сценарий, а затем используете команду ansible 'script' для запуска этого сценария, подстановочные знаки хороши.

- name: "some command that needs to use a wildcard"
  script: /script_containing_wildcard_commands.sh