1

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

我有一个 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 ~ $

如何将返回的 IP 列表传递prod-ips给 tmuxinator 项目,以便它为每行输出打开 1 个窗口?

谢谢!

4

2 回答 2

1

由于项目文件首先作为 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 %>
于 2015-11-02T16:05:24.673 回答
0

感谢@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 start 命令可以工作:

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 %>
于 2015-11-15T09:53:55.553 回答