SaltStack 谷物错误
SaltStack grains error
我的 Saltstack minions 有一个奇怪的问题。
我在 Ubuntu 16.04 上安装了 minions,与 master 的连接工作正常。
但是当我尝试在我的 minion 上创建一个 state.apply 我得到一个 Jinja 模板错误:
jenkins01-prod:
Data failed to compile:
----------
Rendering SLS 'base:salt.minion' failed: Jinja error: coercing to Unicode: need string or buffer, int found
/var/cache/salt/minion/files/base/salt/map.jinja(43):
---
[...]
{##
Setup variable using grains['os_family'] based logic, only add
key:values here
that differ from whats in defaults.yaml
##}
{% set osrelease = salt['grains.get']('osrelease') %}
{% set os_family_map = salt['grains.filter_by']({ <======================
'Debian': {
'pkgrepo': 'deb http://repo.saltstack.com/apt/' +
salt['grains.get']('os')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease) + '/amd64/latest ' + salt['grains.get']('oscodename') + ' main',
'key_url': 'https://repo.saltstack.com/apt/' + salt['grains.get']('os')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease) + '/amd64/latest/SALTSTACK-GPG-KEY.pub',
'libgit2': 'libgit2-22',
[...]
---
Traceback (most recent call last):
self._body_stream = list(template.root_render_func(context))
File "/var/cache/salt/minion/files/base/salt/map.jinja", line 43, in top-level template code
{% set os_family_map = salt['grains.filter_by']({
TypeError: coercing to Unicode: need string or buffer, int found
我查看了小兵身上的谷物物品:
os:
Ubuntu
os_family:
Debian
osarch:
amd64
oscodename:
xenial
osfinger:
Ubuntu-16.04
osfullname:
Ubuntu
osmajorrelease:
16
osrelease:
16.04
osrelease_info:
- 16
- 4
主机是 EC2 实例,在具有相同设置的另一台主机上工作正常。
附件中有 salt --versions-report:
盐版本:
Salt: 2017.5.0-191-gb43b89c
Dependency Versions:
cffi: Not Installed
cherrypy: Not Installed
dateutil: 2.4.2
docker-py: Not Installed
gitdb: Not Installed
gitpython: Not Installed
ioflo: Not Installed
Jinja2: 2.8
libgit2: Not Installed
libnacl: Not Installed
M2Crypto: Not Installed
Mako: 1.0.3
msgpack-pure: Not Installed
msgpack-python: 0.4.6
mysql-python: Not Installed
pycparser: Not Installed
pycrypto: 2.6.1
pycryptodome: Not Installed
pygit2: Not Installed
Python: 2.7.12 (default, Nov 19 2016, 06:48:10)
python-gnupg: Not Installed
PyYAML: 3.11
PyZMQ: 15.2.0
RAET: Not Installed
smmap: Not Installed
timelib: Not Installed
Tornado: 4.2.1
ZMQ: 4.1.4
System Versions:
dist: Ubuntu 16.04 xenial
machine: x86_64
release: 4.4.0-78-generic
system: Linux
version: Ubuntu 16.04 xenial
在最近的 Salt 版本中 osmajorrelease
grain 从字符串转换为整数 (https://github.com/saltstack/salt/issues/35972)。你得到的错误是说你的 Jinja 模板需要字符串但得到整数而不是 ( TypeError: coercing to Unicode: need string or buffer, int found
).
我不确定状态内部到底做了什么,但解决这个问题的一种方法是在 .jinja
文件中将整数转换为字符串。例如像这样:
{% set osrelease = salt['grains.get']('osrelease')|string %}
希望对您有所帮助!
我的 Saltstack minions 有一个奇怪的问题。 我在 Ubuntu 16.04 上安装了 minions,与 master 的连接工作正常。 但是当我尝试在我的 minion 上创建一个 state.apply 我得到一个 Jinja 模板错误:
jenkins01-prod:
Data failed to compile:
----------
Rendering SLS 'base:salt.minion' failed: Jinja error: coercing to Unicode: need string or buffer, int found
/var/cache/salt/minion/files/base/salt/map.jinja(43):
---
[...]
{##
Setup variable using grains['os_family'] based logic, only add
key:values here
that differ from whats in defaults.yaml
##}
{% set osrelease = salt['grains.get']('osrelease') %}
{% set os_family_map = salt['grains.filter_by']({ <======================
'Debian': {
'pkgrepo': 'deb http://repo.saltstack.com/apt/' +
salt['grains.get']('os')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease) + '/amd64/latest ' + salt['grains.get']('oscodename') + ' main',
'key_url': 'https://repo.saltstack.com/apt/' + salt['grains.get']('os')|lower + '/' + salt['grains.get']('osmajorrelease', osrelease) + '/amd64/latest/SALTSTACK-GPG-KEY.pub',
'libgit2': 'libgit2-22',
[...]
---
Traceback (most recent call last):
self._body_stream = list(template.root_render_func(context))
File "/var/cache/salt/minion/files/base/salt/map.jinja", line 43, in top-level template code
{% set os_family_map = salt['grains.filter_by']({
TypeError: coercing to Unicode: need string or buffer, int found
我查看了小兵身上的谷物物品:
os:
Ubuntu
os_family:
Debian
osarch:
amd64
oscodename:
xenial
osfinger:
Ubuntu-16.04
osfullname:
Ubuntu
osmajorrelease:
16
osrelease:
16.04
osrelease_info:
- 16
- 4
主机是 EC2 实例,在具有相同设置的另一台主机上工作正常。 附件中有 salt --versions-report: 盐版本:
Salt: 2017.5.0-191-gb43b89c
Dependency Versions:
cffi: Not Installed
cherrypy: Not Installed
dateutil: 2.4.2
docker-py: Not Installed
gitdb: Not Installed
gitpython: Not Installed
ioflo: Not Installed
Jinja2: 2.8
libgit2: Not Installed
libnacl: Not Installed
M2Crypto: Not Installed
Mako: 1.0.3
msgpack-pure: Not Installed
msgpack-python: 0.4.6
mysql-python: Not Installed
pycparser: Not Installed
pycrypto: 2.6.1
pycryptodome: Not Installed
pygit2: Not Installed
Python: 2.7.12 (default, Nov 19 2016, 06:48:10)
python-gnupg: Not Installed
PyYAML: 3.11
PyZMQ: 15.2.0
RAET: Not Installed
smmap: Not Installed
timelib: Not Installed
Tornado: 4.2.1
ZMQ: 4.1.4
System Versions:
dist: Ubuntu 16.04 xenial
machine: x86_64
release: 4.4.0-78-generic
system: Linux
version: Ubuntu 16.04 xenial
在最近的 Salt 版本中 osmajorrelease
grain 从字符串转换为整数 (https://github.com/saltstack/salt/issues/35972)。你得到的错误是说你的 Jinja 模板需要字符串但得到整数而不是 ( TypeError: coercing to Unicode: need string or buffer, int found
).
我不确定状态内部到底做了什么,但解决这个问题的一种方法是在 .jinja
文件中将整数转换为字符串。例如像这样:
{% set osrelease = salt['grains.get']('osrelease')|string %}
希望对您有所帮助!