Отрисовка SLS 'base: docker.manager.first' завершилась неудачно: у объекта списка переменных Jinja нет элемента 0 - PullRequest
0 голосов
/ 01 марта 2019

Здравствуйте. Я пытался настроить Docker Swarm с помощью Salt, но я застрял ...

При применении я получаю следующую ошибку:

Data failed to compile:
              ----------
                  Rendering SLS 'base:docker.manager.first' failed: Jinja variable list object has no element 0

Этоmy first.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

Это мой /srv/pillar/swarm.sls, который предоставляет mine_functions:

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"

При запуске соли '*' 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

Как это исправить или есть какой-нибудь известный способ настроить Docker Swarm с помощью Salt?

1 Ответ

0 голосов
/ 03 марта 2019

Изменено имя переменной:

СТАРЫЙ:

{% 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

НОВЫЙ:

{% set join_ip = salt['mine.get']('*', 'manager_ip').items()[0][1][0] %}

include:
 - docker.base

init cluster:
  cmd.run:
    - name: 'docker swarm init --advertise-addr {{ join_ip }}'
    - require:
      - pkg: docker-ce
...