Назад | Перейти на главную страницу

Анализируйте список переменных Ansible и обращайтесь к себе во время выполнения задачи.

Проблема

У меня есть простая инструкция по использованию Ansible, которая создает список tmux сеансов, а затем запускает сценарий внутри каждого сеанса. Я пытаюсь дать tmux имена сессий в моем vars.yml файл.

Моя проблема в том, что я хочу запустить одну и ту же команду во всех tmux сеансы создаю. Вот простой учебник, который у меня есть.

Пособие

Очевидно, что в нынешнем виде сценарий не работает. Мне сложно понять, как:

  1. Перейдите в правильный каталог для каждого уникального tmux сеанс (в каталог с тем же именем, что и сеанс)
  2. Запустите сценарий (одно и то же имя используется во всех сеансах) в папке, к которой был выполнен переход.

.

---
- hosts: all

  vars_file:
    - vars.yml

  tasks:
    - name: "Create tmux sessions for each server."
      command: tmux new -d -s {{ servers }}

    - name: "Start each server in its tmux session."
      shell: >
        tmux send-keys -t {{ servers }} "./start.sh" Enter

Переменные

---
# Name of all tmux sessions running on server
servers:
  - creative
  - development
  - lobby
  - proxy
  - survival
  - workflow

Любые советы о том, как я мог бы разумно ссылаться на текущую переменную, выполняемую в команде оболочки (например, cd ~/{{ current_variable }}/scripts/ && ./start.sh)? Спасибо!

Вам нужно перебрать servers переменная в вашей пьесе:

В ansible 1.x это будет сделано:

---
- hosts: all

  vars_file:
    - vars.yml

  tasks:
    - name: "Create tmux sessions for each server."
      command: tmux new -d -s {{ item }}
      with_items: servers

    - name: "Start each server in its tmux session."
      shell: >
        tmux send-keys -t {{ item }} "./start.sh" Enter
      with_items: servers

В ansible 2.x вам нужно указать переменную, используемую with_items директива: "{{ servers }}".