2016-07-06 2 views
0

난 쓸모없는 것을 통해 파이썬을 사용하여 DNS에서 7000 개의 호스트 이름 목록을 수집했지만 사용자에게 호스트 이름을 입력하라는 메시지를 표시하고 호스트 이름 있는 경우 나타납니다.큰 목록에서 호스트 이름을 수집하는 호스트 이름을 묻는 방법

그러나 전체 목록을 보거나 하나의 지정된 호스트 이름을 볼지 여부는 선택 사항이어야합니다.

스크립트는 xshell 5

내가 진행하는 방법에 어떤 아이디어를 실행?

답변

0

당신이 할 수있는 한 가지 방법은 input (python3) (또는 raw_input (python2))을 사용하거나 스크립트의 인수로 hostname을 지정하는 것입니다. 호스트 이름을 지정하지 않으면 모두에서 출력을 얻을 수 있습니다.

input :

가정 당신의 호스트 이름은 파이썬 목록 dnshostnames

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

0
로 호출 할 것이다

ansible

을 통해 파이썬을 사용하여 나는 이것이 당신이 dynamic inventory script를 사용하는 것을 의미 가정합니다. 대부분의 인벤토리 스크립트에서 볼 수있는 만족스럽지 않지만 공통적 인 접근 방법은 현재 인벤토리 스크립트의 동작에 영향을주는 환경 변수를 사용하는 것입니다. 현재는 해당 매개 변수에 액세스 할 수 없습니다.

그래서, 당신은 다음과 같이 ansible 호출하는 경우 :

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

당신은 os.environ.get('LIMIT_PATTERN')로 패턴에 액세스 할 수 및 결과 집합을 제한하는 데 사용합니다.

이 Ansible 모든 7000 개 호스트를 밀어하고 상당히 아래로 Ansible 시작을 느리게하기 때문에 나중에하는 vars_prompt 또는 pause module와 예를 들어 ansible에 결과 을 제한하는 것이 좋습니다 아니다.

관련 문제