问题
我有一个简单的 Ansible 剧本,它创建了一个会话列表tmux
,然后在每个会话内运行一个脚本。我试图tmux
在我的vars.yml
文件中为会话命名。
我的问题是我想在tmux
我创建的所有会话中运行相同的命令。这是我的简单剧本。
剧本
显然,目前的剧本已经不完整了。我很难弄清楚如何:
- 导航到每个唯一会话的正确目录
tmux
(与会话同名的目录) - 在导航到的文件夹中启动脚本(在所有会话中共享相同的名称)
。
---
- 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 }}"
。