2014-07-25 1 views
3

내 환경의 서비스를 검색하는 데 consul을 사용하고 있습니다. 영사의 DNS 서비스는 비표준 DNS 포트에서 실행됩니다. 나의 현재 솔루션은 주위에 더 많은 작업을 내가이 일을 더 파이썬 방법을 찾고 싶습니다영사관에서 파이썬으로 DNS 서비스 레코드를 조회하려면 어떻게해야합니까?

digcmd='dig @127.0.0.1 -p 8600 chef.service.consul +short' # lookup the local chef server via consul 
proc=subprocess.Popen(shlex.split(digcmd),stdout=subprocess.PIPE) 
out, err=proc.communicate() 
chef_server = "https://"+out.strip('\n') 
+0

'dig'는이를 수행하는 강력한 방법 인 것으로 보입니다. 때로는 unixy가 pythonic보다 낫지 않을까요? –

+0

그 가능성에 대해 열려 있습니다 :-). – wjimenez5271

답변

7

당신은 파이썬을 사용하여 쿼리를 만들기 위해 dnspython 라이브러리를 사용할 수 있습니다.

from dns import resolver 

consul_resolver = resolver.Resolver() 
consul_resolver.port = 8600 
consul_resolver.nameservers = ["127.0.0.1"] 

answer = consul_resolver.query("chef.service.consul", 'A') 
for answer_ip in answer: 
    print(answer_ip) 

dnspython과 같은 라이브러리를 사용하면 프로세스 생성시 메모리 및 성능 효과가 있기 때문에 하위 프로세스에서 dig를 호출하는 것보다 훨씬 강력합니다.

1

urllib.request으로 HTTP API를 호출하는 것이 매우 쉽습니다 :는 HTTP API의

import urllib.request 

answer = urllib.request.urlopen("http://localhost:8500/v1/catalog/service/chef").read() 

기본 사항은 Services Guide에 설명되어 있습니다.

관련 문제