Условие if в шаблоне jinja2 Ansible

Вопрос или проблема

Ищите ключевое слово в переменной “host_fqdn”. Если значение содержит ключевое слово “lab.com”, оно должно быть снова сохранено в переменной “host_fqdn”, в противном случае следует добавить ключевое слово “lab.com” к значению и сохранить его в переменной “host_fqdn”.

vars:
    host_fqdn:  server
    host_fqdn: |
    {%  если  'lab.com' в {{  host_fqdn }} %}
        {%  host_fqdn = "{{ host_fqdn }}" %}
    {% иначе %}
        {%  host_fqdn = "{{ host_fqdn }}.lab.com" %}
    {%  endif %}

Это нельзя сделать с помощью vars, но это можно сделать через set_fact, как показано ниже

  - set_fact:
          host_fqdn:  "{{ host_fqdn if 'lab.com' in host_fqdn else host_fqdn  ~'.lab.com' }}"

Ответ или решение

Для решения задачи, связанной с изменением значения переменной host_fqdn в зависимости от наличия подстроки "lab.com", действительно, лучше использовать set_fact в Ansible.

Использование vars в данном случае не подходит, поскольку оно статично и не позволяет выполнять логику условий во время выполнения плейбука.

Вот как можно корректно реализовать это с помощью модуля set_fact:

- hosts: localhost
  gather_facts: no
  vars:
    host_fqdn: server

  tasks:
    - set_fact:
        host_fqdn: "{{ host_fqdn if 'lab.com' in host_fqdn else host_fqdn ~ '.lab.com' }}"

    - debug:
        msg: "Updated host_fqdn: {{ host_fqdn }}"

Объяснение кода:

  1. vars: Изначально определяется переменная host_fqdn, которая принимает значение server.

  2. set_fact: Здесь мы используем выражение с условием:

    • host_fqdn if 'lab.com' in host_fqdn — если в host_fqdn уже содержится "lab.com", то значение переменной остаётся прежним.
    • else host_fqdn ~ '.lab.com' — если подстроки "lab.com" нет в host_fqdn, то к оригинальному значению добавляется ".lab.com".
  3. debug: Используется для вывода обновленного значения переменной host_fqdn на экран. Это позволяет убедиться, что логика сработала правильно.

Таким образом, данное решение элегантно и эффективно решает поставленную задачу, позволяя динамически изменять значение переменной в зависимости от условий.

Оцените материал
Добавить комментарий

Капча загружается...