通过 ansible 使用 python,我从 DNS 收集了 7000 个主机名的列表,但我想提示用户输入主机名,作为回报,主机名将出现(如果存在)。
但是,查看整个列表还是只查看一个指定的主机名应该是可选的。
该脚本在 xshell 5 中执行。
知道我该如何继续吗?
通过ansible使用python
我假设这意味着您使用动态库存脚本。在大多数清单脚本中看到的不令人满意但常见的方法是使用环境变量影响清单脚本的行为,因为目前无法访问传递给 ansible 的任何参数。
所以,如果你这样调用 ansible:
LIMIT_PATTERN="some-host[0-9]*" ansible-playbook -i your-script.py
您可以访问模式os.environ.get('LIMIT_PATTERN')
并使用它来限制您的结果集。
不建议将所有 7000 台主机都推送到 Ansible,然后将结果限制在 ansible中,例如使用vars_prompt或pause 模块,因为它会大大减慢 Ansible 的启动速度。
您可以这样做的一种方法是使用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