Вопрос или проблема
Ищите ключевое слово в переменной “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 }}"
Объяснение кода:
-
vars: Изначально определяется переменная
host_fqdn
, которая принимает значениеserver
. -
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".
-
debug: Используется для вывода обновленного значения переменной
host_fqdn
на экран. Это позволяет убедиться, что логика сработала правильно.
Таким образом, данное решение элегантно и эффективно решает поставленную задачу, позволяя динамически изменять значение переменной в зависимости от условий.