首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提示用户输入一个主机名,然后从一个大列表中收集它

问如何提示用户输入一个主机名,然后从一个大列表中收集它
EN

Stack Overflow用户
提问于 2016-07-06 15:31:46
回答 2查看 310关注 0票数 0

我通过ansible使用python从DNS收集了一个包含7000个主机名的列表,但我希望提示用户输入一个主机名,作为回报,如果该主机名存在,则会显示该主机名。

但是否查看整个列表或只查看一个指定的主机名应该是可选的。

该脚本在xshell5中执行。

你知道我该怎么做吗?

EN

回答 2

Stack Overflow用户

发布于 2016-07-06 15:52:22

可以这样做的一种方法是使用input(python3) (或raw_input(python2))或将主机名指定为脚本的参数。通过不指定任何主机名,您可以从all获得输出。

假设您的主机名在python列表dnshostnames中

input

代码语言:javascript
复制
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)

或者作为脚本的参数:

代码语言:javascript
复制
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)

,然后将其调用为python myscript.py myhostname

票数 0
EN

Stack Overflow用户

发布于 2016-07-07 14:52:04

通过ansible使用python

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

所以,如果你像这样调用ansible:

代码语言:javascript
复制
LIMIT_PATTERN="some-host[0-9]*" ansible-playbook -i your-script.py

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

将所有7000个主机都推到Ansible,然后再用vars_prompt或pause module限制 ansible的结果是不可取的,因为这会大大减慢Ansible的启动速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38218472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档