【发布时间】:2019-07-23 20:06:01
【问题描述】:
您好,我一直在尝试使用 Salt 设置 Docker Swarm,但我有点卡住了...
申请时出现以下错误:
Data failed to compile:
----------
Rendering SLS 'base:docker.manager.first' failed: Jinja variable list object has no element 0
这是我的第一个.sls:
{% set manager_ip = salt['mine.get']('*', 'manager_ip').items()[0][1][0] %}
include:
- docker.base
init new swarm cluster:
cmd.run:
- name: 'docker swarm init --advertise-addr {{ manager_ip }}'
- require:
- pkg: docker-ce
这是我提供 mine_functions 的 /srv/pillar/swarm.sls:
mine_functions:
network.ip_addrs: [ens32]
manager_token:
- mine_function: cmd.run
- "docker swarm join-token manager -q"
manager_ip:
- mine_function: network.ip_addrs
- ens32
worker_token:
- mine_function: cmd.run
- "docker swarm join-token worker -q"
运行 salt '*'pillar.items 时:
----------
mine_functions:
----------
manager_ip:
|_
----------
mine_function:
network.ip_addrs
- ens32
manager_token:
|_
----------
mine_function:
cmd.run
- docker swarm join-token manager -q
network.ip_addrs:
- ens32
worker_token:
|_
----------
mine_function:
cmd.run
- docker swarm join-token worker -q
我该如何解决这个问题,或者是否有任何已知的方法可以使用 Salt 设置 Docker Swarm?
【问题讨论】:
-
也许可以尝试使用
{% salt.log_message(manager_ip) %}记录manager_ip(并删除[0][1][0]以查看它真正包含的内容。 -
@match 我按照你说的做了,得到了以下错误:[ERROR] {u'ret': {u'master.maf.cloud': [u"Rendering SLS 'base:docker. manager.first' failed: Jinja syntax error: Encountered unknown tag 'salt'.; line 1\n\n---\n{% salt.log_message(manager_ip) %} ', 'manager_ip').items()[0][1][ 0] %}\n{% set manager_ip = salt['mine.get']('', 'manager_ip').items() %}\n{% salt.log_message(manager_ip) %}\ ninclude:\n - docker.base\n[...]\n---"]}, u'out': u'highstate'} 还有其他调试方法吗?
-
我的错 - 我的意思是
{%- do salt.log.error(manager_ip) -%}(假设您使用的是 salt >= 2017.7.0 docs.saltstack.com/en/latest/topics/jinja/index.html#logs -
还有其他地方可以获取我的日志吗?这(部分)打印到我的控制台(在记录 /var/log/salt/master 文件中,我得到了大量可读性不强的日志,日志中没有使用新行?):master.maf.cloud_master :gist.github.com/MaartenMol/5843d3b47892c1a25cd45d9d360267d0
-
我认为日志受到来自
docker swarm init的错误的污染,不理解manager_ip的修改内容。您能否将您的状态文件更改为仅包含{% set manager_ip = ...%}和{%- do salt.log.error(manager_ip) -%}日志记录行,并注释掉其余部分(include和cmd.run并查看日志包含的内容?跨度>
标签: docker jinja2 docker-swarm salt-stack