Как упоминать подстановочный знак в недоступных командах
Я выполняю команды оболочки через 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