#ansible #cd #ansible-tower
#ansible
Вопрос:
- 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
Любая помощь приветствуется.
Комментарии:
1. Что именно вы пытаетесь сделать с изменением active dir?
2. также chdir является атрибутом command . Вы можете выполнить command, а также объявить chdir
command: ls chdir=/path/to/directory
3. Это не имеет никакого отношения к ActiveDirectory от Microsoft, не так ли?
Ответ №1:
В Ansible нет понятия текущего каталога. Вы можете указать текущий каталог для конкретной задачи, как вы делали в своем playbook. Единственной недостающей частью была фактическая команда для выполнения. Попробуйте это:
- name: Go to the folder and execute command
command: chdir=/opt/tools/temp ls
Комментарии:
1. Хорошо иметь возможность запускать все playbook в определенном каталоге
2.
"There's no concept of current directory in Ansible"
Я не думаю, что это больше верно, МНОГИЕ задачи теперь используют относительные пути, такие какnpm
composer
bower
etc3. Похоже, что pwd находится в месте расположения playbook, независимо от того, по какому пути вы выполняете
ansible-playbook
команду?
Ответ №2:
Этот вопрос был в результатах, когда я пытался выяснить, почему «оболочка» не уважала мои 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
Просто хотел поделиться.
Ответ №3:
Если вам нужна консоль входа (например, для bundler), то вы должны выполнить команду следующим образом.
command: bash -lc "cd /path/to/folder amp;amp; bundle install"
Комментарии:
1. Это также команда для использования с composer (если модуль composer не доставит вас туда):
command: bash -lc "cd /var/www/ amp;amp; /usr/local/bin/composer install"
2. Теперь пользователь может
working_dir
указать путь композитора относительно
Ответ №4:
Вы можете перейти в каталог перед выполнением команды с помощью ansible chdir
.
Вот пример, который я только что настроил:
- name: Run a pipenv install
environment:
LANG: "en_GB.UTF-8"
command: "pipenv install --dev"
args:
chdir: "{{ dir }}/proj"