使用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 %>
我想建立一个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 %>