【问题标题】:SaltStack grains errorSaltStack 颗粒错误
【发布时间】:2017-06-01 00:18:12
【问题描述】:

我的 Saltstack 仆从有一个奇怪的问题。 我在 Ubuntu 16.04 上安装了 minions,并且与 master 的连接工作正常。 但是,一旦我尝试在我的奴才上设置 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

【问题讨论】:

  • 不确定这是否重要,但如果我比较来自所有主机的颗粒,它们是相同的,从 osmajorrelease 预期工作的爪牙有绿色 16,损坏的爪牙有 16 个黄色

标签: python ubuntu salt-stack


【解决方案1】:

在最近的 Salt 版本中,osmajorreleasegrain 从字符串转换为整数 (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 %}

希望这会有所帮助!

【讨论】:

  • 感谢您的回复。似乎这就是问题所在。我不确定我必须适应哪个 jinja 文件?
  • 我假设您在主服务器上的 Salt 状态树中有一个 salt/map.jinja 文件。这是导致您粘贴的消息出现问题的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2020-04-07
相关资源
最近更新 更多