我通过ansible使用python从DNS收集了一个包含7000个主机名的列表,但我希望提示用户输入一个主机名,作为回报,如果该主机名存在,则会显示该主机名。
但是否查看整个列表或只查看一个指定的主机名应该是可选的。
该脚本在xshell5中执行。
你知道我该怎么做吗?
发布于 2016-07-06 15:52:22
可以这样做的一种方法是使用input(python3) (或raw_input(python2))或将主机名指定为脚本的参数。通过不指定任何主机名,您可以从all获得输出。
假设您的主机名在python列表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),然后将其调用为python myscript.py myhostname
发布于 2016-07-07 14:52:04
通过ansible使用python
我假设这意味着您使用了dynamic inventory script。在大多数清单脚本中看到的不令人满意但常见的方法是使用环境变量来影响清单脚本的行为,因为目前不可能访问传递给ansible的任何参数。
所以,如果你像这样调用ansible:
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的启动速度。
https://stackoverflow.com/questions/38218472
复制相似问题