Ansible: как изменить активный каталог в Ansible Playbook?

- name: Go to the folder
  command: chdir=/opt/tools/temp

Когда я запускаю свой playbook, я получаю:

TASK: [Go to the folder] ***************************** 
failed: [host] => {"failed": true, "rc": 256}
msg: no command given

Любая помощь горячо приветствуется.


person indolent    schedule 14.10.2013    source источник
comment
Что именно вы пытаетесь сделать с изменением активного каталога?   -  person Mxx    schedule 15.10.2013
comment
также chdir является атрибутом команды. Вы можете выполнить команду, а также объявить chdir command: ls chdir=/path/to/directory   -  person Robert    schedule 30.10.2014
comment
Это не имеет ничего общего с ActiveDirectory от Microsoft, не так ли?   -  person ThorSummoner    schedule 10.03.2015


Ответы (4)


В Ansible нет понятия текущего каталога. Вы можете указать текущий каталог для конкретной задачи, как вы это делали в своей книге. Единственной отсутствующей частью была фактическая команда, которую нужно было выполнить. Попробуй это:

- name: Go to the folder and execute command
  command: chdir=/opt/tools/temp ls
person Marcin Płonka    schedule 15.10.2013
comment
Хорошо иметь возможность запускать все пьесы в определенном каталоге - person podarok; 15.01.2015
comment
"There's no concept of current directory in Ansible" Я больше не думаю, что это правда, МНОГО задач теперь принимают относительные пути, например npm composer bower и т. Д. - person Jonathan; 11.06.2019

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

я имел

- name: task name
  shell:
    cmd: touch foobar
    creates: foobar
    chdir: /usr/lib/foobar

Он работал с Ansible> 2, но для 1.9 мне пришлось изменить его на.

- name: task name
  shell: touch foobar
  args:
    creates: foobar
    chdir: /usr/lib/foobar

Просто хотел поделиться.

person Josh Beauregard    schedule 28.04.2016

Если вам нужна консоль входа в систему (например, для сборщика), вы должны выполнить такую ​​команду.

command: bash -lc "cd /path/to/folder && bundle install"

person Kevin Carmody    schedule 02.06.2014
comment
Эту команду также следует использовать с композитором (если модуль композитора не позволяет вам туда добраться): command: bash -lc "cd /var/www/ && /usr/local/bin/composer install" - person deviavir; 26.06.2014
comment
Теперь вы можете пользователю working_dir указать относительный путь композитора - person Jonathan; 11.06.2019

Вы можете перейти в каталог перед запуском команды с помощью ansible с помощью _ 1_.

Вот пример, который я только что настроил:

- name: Run a pipenv install
  environment:
    LANG: "en_GB.UTF-8"
  command: "pipenv install --dev"
  args:
    chdir: "{{ dir }}/proj"
person Alper    schedule 20.01.2021