问题

问题

问题

我有一个简单的 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

关于如何智能地引用 shell 命令中执行的当前变量(例如cd ~/{{ current_variable }}/scripts/ && ./start.sh),有什么技巧吗?谢谢!

答案1

您需要迭代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 }}"

相关内容