Ansible: как изменить active Directory в Ansible Playbook?

#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 etc

3. Похоже, что 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"