BASH搜索多个IP';她在桌子上
这是我几周前得到帮助的脚本的延续。我让一切正常,不幸的是,场景已经改变了一点,我有点压力让它启动并运行,所以我希望这里的人能帮助我快速修改这个脚本 这里是基本的。脚本的目的是重新捕获特定的浮动IP。由于系统的限制,目前唯一的办法就是玩彩票。。。该脚本请求一个浮动IP池,并将其放入如下表中:BASH搜索多个IP';她在桌子上,bash,search,while-loop,Bash,Search,While Loop,这是我几周前得到帮助的脚本的延续。我让一切正常,不幸的是,场景已经改变了一点,我有点压力让它启动并运行,所以我希望这里的人能帮助我快速修改这个脚本 这里是基本的。脚本的目的是重新捕获特定的浮动IP。由于系统的限制,目前唯一的办法就是玩彩票。。。该脚本请求一个浮动IP池,并将其放入如下表中: +------------+-----------+----------+---------------+ | Ip | Server Id | Fixed Ip | Pool
+------------+-----------+----------+---------------+
| Ip | Server Id | Fixed Ip | Pool |
+------------+-----------+----------+---------------+
| 10.10.10.1 | | - | floating-pool |
| 10.10.10.2 | | - | floating-pool |
| 10.10.10.3 | | - | floating-pool |
| 10.10.10.4 | | - | floating-pool |
| 10.10.10.5 | | - | floating-pool |
+------------+-----------+----------+---------------+
然后脚本检查我们正在寻找的浮动IP是否在该表中,即是否已捕获。如果没有,脚本会将所有IP返回到池中,然后重试。如果我们正在寻找的地址已被捕获,那么脚本将删除所有其他IP并终止
此脚本的当前版本非常适合捕获单个IP,但现在我们需要它来捕获多个IP。以下是旧的单一IP版本:
#!/bin/bash
# Floating IP Reclaimer
################# CONFIG ##################
float="10.10.10.3"
tenantid="blah"
###########################################
# Start
clear
loop=true
if ! [ "$tenantid" = "$OS_TENANT_ID" ]; then
echo "ERROR - Be sure you have sourced the proper tenant ID!"
else
l=1
while $loop; do
printf "Floating IP Reclaimer\n\n"
printf "Requesting address block...\n"
for ((i=1;i<=5;i++));
do
nova floating-ip-create floating-pool > /dev/null 2>&1
done
printf "Checking for matches...\n"
nova floating-ip-list > /tmp/block
while read garbage1 ip garbage2;
do
if [ "$ip" != "$float" ]; then
printf "Releasing $ip\n"
nova floating-ip-delete "$ip" > /dev/null 2>&1
else
loop=false
fi
done < <(tail -n +4 /tmp/block | head -n -1)
printf "\nFloating IP blocks searched: "$l
l=$((l+1))
clear
done
printf "\nFloating IP reclaimed!\n\n"
fi
#/bin/bash
#浮动IP回收机
#################配置##################
float=“10.10.10.3”
tenantid=“诸如此类”
###########################################
#开始
清楚的
循环=真
如果![“$tenantid”=“$OS_TENANT_ID”];然后
echo“错误-确保您已获取正确的租户ID!”
其他的
l=1
而$loop;做
printf“浮动IP回收器\n\n”
printf“正在请求地址块…\n”
对于((i=1;i/dev/null 2>&1)
完成
printf“检查匹配项…\n”
nova浮动ip列表>/tmp/block
读垃圾1 ip垃圾2时;
做
如果[“$ip”!=“$float”];则
printf“释放$ip\n”
nova浮动ip删除“$ip”>/dev/null 2>&1
其他的
循环=错误
fi
完成<试一下这个尺寸(它还没有经过测试)。我知道它不是bash,但它应该可以完成任务
#!/usr/bin/python
import os,time
import novaclient.client as nvclient
class FloatingIpManager():
def __init__(self,desired_addresses=[],sleep=5):
self.ips = desired_addresses
self.nova = get_nova_client()
self.sleep = sleep
def get_nova_client(self,env=os.environ):
d = {}
d['username'] = env['username']
d['api_key'] = env['password']
d['auth_url'] = env['auth_url']
d['project_id'] = env['tenant_name']
return nvclient.Client('2',**d)
def get_float(self,address=None,pool=None):
while True:
try:
flip = self.nova.floating_ips.create(pool)
if flip.ip in self.ips or address == None:
return True
else:
self.release_float(flip)
except Exception as e:
print e
time.sleep(self.sleep)
def release_float(self,flip):
return self.nova.floating_ips.delete(flip)
def reclaim_all(self,addresses=None):
if addresses == None:
addresses = self.ips
for i in self.ips:
get_float(i)
if __name__ == '__main__':
nova = get_nova_client()
reclaimer = FloatingIpManager(['192.168.100.1'])
reclaimer.reclaim_all()
你的bash答案。用你想要的IP作为参数调用它,比如“Receiver 192.168.1.1 192.168.1.2 192.168.1.3”
!/bin/bash
#浮动IP回收机
#################配置##################
#float=“10.10.10.3”
tenantid=“诸如此类”
###########################################
#开始
清楚的
循环=真
让计数=$#-1
如果![“$tenantid”=“$OS_TENANT_ID”];那么
echo“错误-确保您已获取正确的租户ID!”
其他的
l=1
当$loop;做
printf“浮动IP回收器\n\n”
printf“正在请求地址块…\n”
对于((i=1;i/dev/null 2>&1)
完成
printf“检查匹配项…\n”
nova浮动ip列表>/tmp/block
读垃圾1 ip垃圾2时;
做
对于$@;do中的浮动
如果[“$ip”!=“$float”];则
printf“释放$ip\n”
发现=错误
其他的
设i=i+1
继续2
fi
完成
nova浮动ip删除“$ip”>/dev/null 2>&1
完成<删除loop=false
会不会让你有很长的路要走?祝你好运。需要进行检查以识别和保留所需的IP并删除其余的IP。此外,必须有一种方法在收集到所需的地址后终止脚本。还有谁能帮忙吗?我喜欢这个想法,我正在尝试调试y我们的代码可以让它工作。我认为有一些bash语法错误,而且我看不到用户启动脚本时从哪里引入参数。通常在bash中,它的$1$2等等可以使用变量,但我看不到它在scrip中如何应用的逻辑。此外,我也看不到它如何支持大型输入列表(即多个IP)此时。输入应该是浮动的。tooAh中缺少一些$,我想我现在看到了。一个基本数组正在将每个都拉出。我把它全部收回。哈哈。看起来它正在运行。需要做更多的测试。现在它正在尝试多次删除IP。例如,如果你输入五个IP,它将尝试删除所有五个,每个五次。或者全部六个,每六次。我做了一次编辑,应该可以修复它,即使它没有,除了进行一些额外的api调用之外,它不应该损害任何东西。你可能应该加入“睡眠10”,以尽量减少你对整个平台的影响。
#!/bin/bash
# Floating IP Reclaimer
################# CONFIG ##################
#float="10.10.10.3"
tenantid="blah"
###########################################
# Start
clear
loop=true
let count=$#-1
if ! [ "$tenantid" = "$OS_TENANT_ID" ]; then
echo "ERROR - Be sure you have sourced the proper tenant ID!"
else
l=1
while $loop; do
printf "Floating IP Reclaimer\n\n"
printf "Requesting address block...\n"
for ((i=1;i<=5;i++));
do
nova floating-ip-create floating-pool > /dev/null 2>&1
done
printf "Checking for matches...\n"
nova floating-ip-list > /tmp/block
while read garbage1 ip garbage2;
do
for float in $@; do
if [ "$ip" != "$float" ]; then
printf "Releasing $ip\n"
found=false
else
let i=i+1
continue 2
fi
done
nova floating-ip-delete "$ip" > /dev/null 2>&1
done < <(tail -n +4 /tmp/block | head -n -1)
printf "\nFloating IP blocks searched: "$l
l=$((l+1))
clear
if [ i -eq count ]; then
loop=false
fi
done
printf "\nFloating IP reclaimed!\n\n"
fi