我在表格中简单搜索值的输出时遇到问题。这是我的nova命令的输出:
+------------+-----------+----------+----------+
| Ip | Server Id | Fixed Ip | Pool |
+------------+-----------+----------+----------+
| 10.10.10.1 | | - | floating |
| 10.10.10.2 | | - | floating |
| 10.10.10.3 | | - | floating |
| 10.10.10.4 | | - | floating |
| 10.10.10.5 | | - | floating |
+------------+-----------+----------+----------+
让我们说我在寻找10.10.10.4。我需要运行这个nova命令来输出这个表,然后在表中搜索10.10.10.4。对于每个非10.10.10.4的IP,我需要运行:
nova floating-ip-delete <ip>
命令。一旦它最终找到正确的IP,脚本就会停止。
本质上,我们一次捕获一大块浮动IP(此表/示例中为5),查看是否捕获了特定IP,如果没有,则将IP释放回池中。然后冲洗并重复,直到我们最终获得正确的IP。
非常感谢任何帮助!
*更新*
这是我到目前为止所处的位置。请忽略带有tenantid部分的第一部分。这只是一些内部安全检查:
#!/bin/bash
# Capture floating IP
################# CONFIG ##################
FLOAT="blah"
TENANTID="blah"
###########################################
# Start
if ! [ "$TENANTID" = "$OS_TENANT_ID" ]; then
echo "ERROR"
else
for ((i=1;i<=10;i++));
do
echo $i
nova floating-ip-create floating
done
nova floating-ip-list > BLOCK
while read garbage1 IP garbage2;
do
if [ "$IP" != "FLOAT" ]; then
nova floating-ip-delete "$IP"
else
exit 0
fi
done < <(tail -n +4 /tmp/BLOCK)
fi
答案 0 :(得分:1)
你可以从这样的事情开始:
while read garbage1 ip garbage2; do
if [ "$ip" != '10.10.10.4' ]; then
nova floating-ip-delete "$ip"
else
exit 0
fi
done < <(tail -n +4 /path/to/file | head -n -1)
阅读:
答案 1 :(得分:0)
您可以尝试以下方式:
#!/bin/bash
while [[ $(novaCommand | grep '10.10.10.4') = "" ]] ; do
for i in $(novaCommand | grep -Eo '10\.10\..*') ; do
nova floating-ip delete ${i}
done
done
exit