Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH搜索多个IP';她在桌子上_Bash_Search_While Loop - Fatal编程技术网

BASH搜索多个IP';她在桌子上

BASH搜索多个IP';她在桌子上,bash,search,while-loop,Bash,Search,While Loop,这是我几周前得到帮助的脚本的延续。我让一切正常,不幸的是,场景已经改变了一点,我有点压力让它启动并运行,所以我希望这里的人能帮助我快速修改这个脚本 这里是基本的。脚本的目的是重新捕获特定的浮动IP。由于系统的限制,目前唯一的办法就是玩彩票。。。该脚本请求一个浮动IP池,并将其放入如下表中: +------------+-----------+----------+---------------+ | Ip | Server Id | Fixed Ip | Pool

这是我几周前得到帮助的脚本的延续。我让一切正常,不幸的是,场景已经改变了一点,我有点压力让它启动并运行,所以我希望这里的人能帮助我快速修改这个脚本

这里是基本的。脚本的目的是重新捕获特定的浮动IP。由于系统的限制,目前唯一的办法就是玩彩票。。。该脚本请求一个浮动IP池,并将其放入如下表中:

+------------+-----------+----------+---------------+
| 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