【问题标题】:How to prompt user to enter a hostname which then gathers it from a large list如何提示用户输入一个主机名,然后从一个大列表中收集它
【发布时间】:2016-11-08 04:16:55
【问题描述】:

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

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

脚本在 xshell 5 中执行。

知道如何继续吗?

【问题讨论】:

    标签: python linux dns ansible xshell


    【解决方案1】:

    您可以这样做的一种方法是使用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

    【讨论】:

      【解决方案2】:

      通过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,然后将结果限制在 in ansible,例如使用 vars_promptpause module,因为这会大大减慢 Ansible 的启动速度。 p>

      【讨论】:

        猜你喜欢
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 1970-01-01
        相关资源
        最近更新 更多