如何提示用户输入主机名,然后从大型列表中收集主机名

时间:2016-07-06 07:31:46

标签: python linux dns ansible xshell

通过ansible使用python我从DNS收集了7000个主机名的列表,但是我想提示用户输入主机名,作为回报,主机名将出现。

但是,无论是查看整个列表还是仅查看一个指定的主机名,都应该是可选的。

该脚本在xshell 5中执行。

知道如何继续吗?

2 个答案:

答案 0 :(得分:0)

你可以这样做的一种方法是使用git push(python3)(或input(python2))或指定hostname作为脚本的参数。您可以通过不指定任何主机名来获取所有输出。

假设您的主机名位于python列表中raw_input

dnshostnames

input

或作为脚本的参数:

hostname = input("specify hostname (blank for all)").strip()
if hostname:
    if hostname in dnshostnames:
        print("{} in host name list".format(hostname))
else:
    print("Hostnames:\n\n","\n".join(dnshostnames)

然后将被称为import sys if len(sys.argv<1): #assuming hostname has no whitespace in name if sys.argv[1] in dnshostnames: print("{} in host name list".format(hostname)) else: print("Hostnames:\n\n","\n".join(dnshostnames)

答案 1 :(得分:0)

  

使用 python通过ansible

我认为这意味着您使用dynamic inventory script。在大多数库存脚本中看到的不令人满意但常见的方法是使用环境变量影响库存脚本的行为,因为目前无法访问传递给ansible的任何参数。

所以,如果你这样称呼ansible:

LIMIT_PATTERN="some-host[0-9]*" ansible-playbook -i your-script.py

您可以将模式作为os.environ.get('LIMIT_PATTERN')访问,并使用它来限制结果集。

不建议将所有7000个主机推送到Ansible,然后将结果限制在 ansible中,例如使用vars_promptpause module,因为它会大大减慢Ansible的启动速度下来。