Проверка первого ди git в номере в ansible playbook - PullRequest
1 голос
/ 09 января 2020

У меня есть ansible playbook, который читает в файле vars_file, содержащем имена пользователей и идентификаторы

users:
  - name: josh
    uid: 1201
  - name: peter
    uid: 1202
  - name: paul
    uid: 2101
  - name: ryan
    uid: 2102

У меня есть две группы хостов в моем файле инвентаризации: db и web. Я хочу, чтобы пользователи создавались в db, если их uid начинается с 1, и web, если он начинается с 2.

Моя плейбук до сих пор выглядит следующим образом

---
- name: users playbook
  hosts: all
  become: yes

  vars_files:
    - vars/user_list.yml

  tasks:

  - name: test debug
    debug:
      msg: "{{ item.username }}, {{ item.uid }}"
    loop: "{{ users }}"
    when: '{{ item.uid[0] }} == 1'

Но мой, когда условно выдает ошибку. Ошибка была: ошибка при вычислении условия ({{item.uid [0]}} == 1)

Есть ли лучший способ сделать это для обоих условий?

1 Ответ

1 голос
/ 09 января 2020

Несколько проблем.

Во-первых, вы ничего не сравниваете. В выражении '{{ item.uid[0] }} == 1' последняя часть (т. Е. == 1) будет буквально рассматриваться как строка и записываться как вывод. При использовании в полном выражении jinja2 сравнение должно проводиться внутри маркеров: {{ item.uid[0] == 1 }}

Во-вторых, предложения when не должны содержать маркеров jinja2 для раскрытия переменных. Это также относится к failed_when и changed_when. См. Условия do c

Наконец, получение символа с индексом будет работать только в том случае, если ввод является строкой, а не int. Так что сначала вам нужно убедиться в этом, правильно применив фильтр string . Символ, который вы получите, сам по себе будет верёвкой. Сравнение с целым числом всегда возвращает false. Таким образом, вы должны либо записать значение сравнения в виде строки (то есть '1'), либо привести извлеченную машину к целому числу с помощью фильтра int .

. исправить вашу задачу:

  - name: test debug
    debug:
      msg: "{{ item.username }}, {{ item.uid }}"
    loop: "{{ users }}"
    when: (item.uid | string)[0] | int == 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...