使用tmuxinator开启动态数windows

Using tmuxinator to open a dynamic number of windows

我想建立一个tmuxinator项目来打开一个动态数量的tmux windows。在我的场景中,我希望 AWS Auto Scale 组中每个实例一个 window。

我有一个 bash 函数来列出我要连接的每个服务器的私有 IP。例如:

$ prod-ips
10.X.X.1
10.X.X.2
10.X.X.3
10.X.X.4

我有一个 bash 函数可以隧道连接到这些 IP 中的任何一个:

$tunnel_to 10.X.X.1
....
works
ec2-user@10.x.x.1 ~ $

如何将 prod-ips 返回的 IP 列表传递到 tmuxinator 项目中,以便它会为每行输出打开 1 window?

谢谢!

由于项目文件是 first processed as ERB,您可以执行如下操作:

# ~/.tmuxinator/dyn.yml

name: dyn
root: ~/
windows:
  # just using `echo` as a POC; this is where you'd make your function call
  <%- `echo "111,222,333"`.split(',').each do |ip| %>
  - tunnel-to-<%= ip.chomp %>: echo tunnel_to <%= ip %>
  <%- end %>

感谢@pdoherty926,ERB 语法正是我要找的。

看起来我的 bash_profile 中定义的函数将无法运行,但如果我将这些函数写在 tmuxinator conf 中,那么一切都可以运行:

有效(回显是将 prod-ips 的输出合并为一行):

windows:
  <%- `echo 10.250.XX.X1,10.250.XX.X2,10.250.XX.X3`.split(',').each do |ip| %>
    - ip-<%= ip.chomp %>: tunnel_to <%= ip %>
  <%- end %>

但是这个命令不起作用:

windows:
  <%- `prod-ips`.split("\n").each do |ip| %>
    - ip-<%= ip.chomp %>: tunnel_to <%= ip %>
  <%- end %>

但是如果我在文件中定义了 prod-ips 长手 tmuxinator 启动命令工作:

windows:  
  <%- `aws ec2 describe-instances | jq '.Reservations[].Instances[] | select(has("SecurityGroups")) | select(.SecurityGroups | length > 0) | select(.SecurityGroups[0].GroupName | test("<SECURITYGROUPFILTER>")) | .PrivateIpAddress' | sed -e 's/"//g'`.split("\n").each do |ip| %>    
    - ip-<%= ip.chomp %>: tunnel_to <%= ip %>
  <%- end %>