-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Open
Labels
Grainsbugbroken, incorrect, or confusing behaviorbroken, incorrect, or confusing behaviorseverity-high2nd top severity, seen by most users, causes major problems2nd top severity, seen by most users, causes major problems
Milestone
Description
Description of Issue
With metadata_server_grains: true, minion fails to fetch metadata when instance user-data is binary or gzip data.
Call to salt.utils.http.query fails to decode body as unicode:
[CRITICAL] Failed to load grains defined in grain file metadata.metadata in function <function metadata at 0x7ff527139730>, error:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/loader.py", line 853, in grains
ret = funcs[key](**kwargs)
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 89, in metadata
return _search()
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 66, in _search
ret[line] = _search(prefix=os.path.join(prefix, line + "/"))
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 50, in _search
linedata = http.query(os.path.join(HOST, prefix), headers=True)
File "/usr/lib/python3.6/site-packages/salt/utils/http.py", line 659, in query
result_text = result_text.decode("utf-8")
A possible fix could catch the UnicodeDecodeError and return. eg.
def _search(prefix="latest/"):
"""
Recursively look up all grains in the metadata server
"""
ret = {}
try:
linedata = http.query(os.path.join(HOST, prefix), headers=True)
except UnicodeDecodeError:
return ret
excerpt of DEBUG log:
# salt-call -ldebug grains.get meta-data
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Including configuration from '/etc/salt/minion.d/_schedule.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/_schedule.conf
[DEBUG ] Including configuration from '/etc/salt/minion.d/metadata_server.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/metadata_server.conf
[DEBUG ] Using cached minion ID from /etc/salt/minion_id: minion
[DEBUG ] Configuration file path: /etc/salt/minion
[WARNING ] Insecure logging configuration detected! Sensitive data may be logged.
[DEBUG ] Grains refresh requested. Refreshing grains.
{...}
[DEBUG ] Requesting URL http://169.254.169.254/latest/meta-data/services/ using GET method
[DEBUG ] Using backend: tornado
[DEBUG ] Response Status Code: 200
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Including configuration from '/etc/salt/minion.d/_schedule.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/_schedule.conf
[DEBUG ] Including configuration from '/etc/salt/minion.d/metadata_server.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/metadata_server.conf
[DEBUG ] Using cached minion ID from /etc/salt/minion_id: minion
[DEBUG ] Requesting URL http://169.254.169.254/latest/meta-data/services/domain using GET method
[DEBUG ] Using backend: tornado
[DEBUG ] Response Status Code: 200
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Including configuration from '/etc/salt/minion.d/_schedule.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/_schedule.conf
[DEBUG ] Including configuration from '/etc/salt/minion.d/metadata_server.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/metadata_server.conf
[DEBUG ] Using cached minion ID from /etc/salt/minion_id: minion
[DEBUG ] Requesting URL http://169.254.169.254/latest/meta-data/services/partition using GET method
[DEBUG ] Using backend: tornado
[DEBUG ] Response Status Code: 200
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Including configuration from '/etc/salt/minion.d/_schedule.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/_schedule.conf
[DEBUG ] Including configuration from '/etc/salt/minion.d/metadata_server.conf'
[DEBUG ] Reading configuration from /etc/salt/minion.d/metadata_server.conf
[DEBUG ] Using cached minion ID from /etc/salt/minion_id: minion
[DEBUG ] Requesting URL http://169.254.169.254/latest/user-data/ using GET method
[DEBUG ] Using backend: tornado
[CRITICAL] Failed to load grains defined in grain file metadata.metadata in function <function metadata at 0x7f27c527d730>, error:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/loader.py", line 853, in grains
ret = funcs[key](**kwargs)
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 89, in metadata
return _search()
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 66, in _search
ret[line] = _search(prefix=os.path.join(prefix, line + "/"))
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 50, in _search
linedata = http.query(os.path.join(HOST, prefix), headers=True)
File "/usr/lib/python3.6/site-packages/salt/utils/http.py", line 659, in query
result_text = result_text.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
[DEBUG ] LazyLoaded zfs.is_supported
Setup
- launch ec2 with binary / gzip user-data
- install salt-minion
- enable
metadata_server_grains: truein/etc/salt/minion
Steps to Reproduce Issue
salt-call grains.get meta-data
also reproducible from shell:
# python3 -c 'from salt.grains.metadata import metadata; metadata();'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 89, in metadata
return _search()
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 66, in _search
ret[line] = _search(prefix=os.path.join(prefix, line + "/"))
File "/usr/lib/python3.6/site-packages/salt/grains/metadata.py", line 50, in _search
linedata = http.query(os.path.join(HOST, prefix), headers=True)
File "/usr/lib/python3.6/site-packages/salt/utils/http.py", line 659, in query
result_text = result_text.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
Versions Report
Salt Version:
Salt: 3002.2
Dependency Versions:
cffi: 1.14.3
cherrypy: Not Installed
dateutil: Not Installed
docker-py: 2.6.1
gitdb: Not Installed
gitpython: Not Installed
Jinja2: 2.11.1
libgit2: Not Installed
M2Crypto: 0.35.2
Mako: Not Installed
msgpack: 0.6.2
msgpack-pure: Not Installed
mysql-python: Not Installed
pycparser: 2.20
pycrypto: Not Installed
pycryptodome: Not Installed
pygit2: Not Installed
Python: 3.6.8 (default, Apr 2 2020, 13:34:55)
python-gnupg: Not Installed
PyYAML: 5.3.1
PyZMQ: 17.0.0
smmap: Not Installed
timelib: Not Installed
Tornado: 4.5.3
ZMQ: 4.1.4
System Versions:
dist: centos 7 Core
locale: ANSI_X3.4-1968
machine: x86_64
release: 3.10.0-1127.19.1.el7.x86_64
system: Linux
version: CentOS Linux 7 Core
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Grainsbugbroken, incorrect, or confusing behaviorbroken, incorrect, or confusing behaviorseverity-high2nd top severity, seen by most users, causes major problems2nd top severity, seen by most users, causes major problems