mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
Merge pull request #9172 from s0undt3ch/hotfix/no-need-for-requests
The `stdlib` is good enough. Check additional IP information providers
This commit is contained in:
commit
ea69592e76
@ -1,20 +1,47 @@
|
||||
try:
|
||||
import requests
|
||||
HAS_REQUESTS = True
|
||||
except ImportError:
|
||||
HAS_REQUESTS = False
|
||||
# -*- coding: utf-8 -*-
|
||||
'''
|
||||
:codeauthor: Jeff Frost
|
||||
:copyright: © 2013 by the SaltStack Team, see AUTHORS for more details.
|
||||
:license: Apache 2.0, see LICENSE for more details.
|
||||
|
||||
|
||||
salt.grains.external_ip
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Return the external IP address reported by one of the following providers:
|
||||
|
||||
* ipecho.net
|
||||
* externalip.net
|
||||
* ident.me
|
||||
|
||||
Which ever reports a valid IP first
|
||||
'''
|
||||
|
||||
# Import Python Libs
|
||||
import urllib2
|
||||
import contextlib
|
||||
|
||||
# Import salt libs
|
||||
from salt.utils.validate.net import ipv4_addr as _ipv4_addr
|
||||
|
||||
|
||||
def external_ip():
|
||||
'''
|
||||
Return the external IP address reported by ipecho.net
|
||||
Return the external IP address
|
||||
'''
|
||||
check_ips = ('http://ipecho.net/plain',
|
||||
'http://api.externalip.net/ip',
|
||||
'http://v4.ident.me')
|
||||
|
||||
if not HAS_REQUESTS:
|
||||
return {}
|
||||
for url in check_ips:
|
||||
try:
|
||||
with contextlib.closing(urllib2.urlopen(url, timeout=3)) as req:
|
||||
ip_ = req.read().strip()
|
||||
if not _ipv4_addr(ip_):
|
||||
continue
|
||||
return {'external_ip': ip_}
|
||||
except urllib2.HTTPError:
|
||||
continue
|
||||
|
||||
try:
|
||||
r = requests.get('http://ipecho.net/plain')
|
||||
ip = r.content
|
||||
except Exception:
|
||||
ip = []
|
||||
return {'external_ip': ip}
|
||||
# Return an empty value as a last resort
|
||||
return {'external_ip': []}
|
||||
|
Loading…
Reference in New Issue
Block a user