LINUX.ORG.RU
ФорумAdmin

как добавить глобальные переменные в ansible репозиторий

 


1

2

Здравствуйте, подскажите пожалуйста

У меня сейчас ansible репозиторий имеет следующую структуру:

inventory
  - DEV
      group_vars\all.yml
      hosts.yml
  - ST
      group_vars\all.yml
      hosts.yml
  - PROD
      group_vars\all.yml
      hosts.yml

playbooks
  playbook1.yml
  playbook2.yml
  ...

roles
  roles1
  roles2
  ...

Я хочу доработать структуру ansible - нужно сделать возможность задавать глобальные переменные (например, адрес vault), которые будут срабатывать по умолчанию для всех ролей, но чтобы при необходимости их можно было переопределить в group_vars/all.yml нужного окружения. Я добавил group_vars/all.yml в каталог inventory, добавил туда переменную vault_url. Затем я вызываю эту переменную в роли в tasks/main.yml.

- name: check
  debug: 
    msg: "{{ vault_url }} 

При выполнении таски получаю ошибку undefined variable. Почему так происходит? Почему не используется глобальная переменная из файла inventory/group_vars/all.yml?

А у тебя вообще про эти group_vars внутри inventory/env playbook’и и роли откуда знают? Они прописаны в ansible.cfg?

adn ★★★★★
()

а как вы все это стартуете? у вас должно там быть что то типа :

hosts: all

invenory это переменные по ящикам.

anonymous
()

если разметка кривая или ошибки в тексте, кавычки не те, ансибл ругается на переменные и прочее.. обратись к gemini – он быстро поможет

powerguy ★★★
()

inventory

  • DEV

    group_vars\all.yml

    hosts.yml

  • ST

    group_vars\all.yml

    hosts.yml

  • PROD

    group_vars\all.yml

    hosts.yml

Вот это все ради чего? Сколько миллиардов машин в хозяйстве?

thesis ★★★★★
()
Ответ на: комментарий от thesis

Вот это все ради чего? Сколько миллиардов машин в хозяйстве?

Так у него три окружения: для разработчиков, для тестеров и сам продакшен. Стандартная схема уже лет 15.

adn ★★★★★
()
Ответ на: комментарий от egzakharovich

Допустимо хоть аппендицит самому себе вырезать или зубы пролечить.

Вопроса «зачем» это не отменяет, вроде бы.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от thesis

Ну ээээ НЕ распихивая inventory по каталогам, наверное?

Все в одном файле для всех хостов трех групп? Там же переменные лежат, часто даже зашифрованные логины/пароли для доступов к ресурсам (которые тоже разные - базы данных например). Это как код в проекте. Да, ты можешь в одной портянке все писать, но это сложно потом поддерживать.

adn ★★★★★
()
Ответ на: комментарий от adn

Да, ты можешь в одной портянке все писать

Это буквально запрос ТСа. Единая портянка переменных для all.

сложно потом поддерживать

Хз, пока я вижу сложность в дробленом на каталоги inventory. Такую, которая при едином не возникла бы.

thesis ★★★★★
()

Вообще-то выглядит корректно

И документация не возражает https://docs.ansible.com/projects/ansible/latest/inventory_guide/intro_inventory.html#splitting-out-vars

Скорее всего, ты накосячил либо с синтаксисом yaml (google yaml linter), либо с конфигом (и ансибл ничего не знает про твою inventory

router ★★★★★
()
Ответ на: комментарий от router

И да, я проверил

TASK [test] ********************************************************************
ok: [ubuntu2204-i1] => {
    "test_test_test": "testtesttest"
}
router ★★★★★
()
Ответ на: комментарий от thesis

Вот это все ради чего? Сколько миллиардов машин в хозяйстве?

Вполне адекватный конфиг. Хотя чаще переменные передают через ansible.builtin.include_vars. или вообще разные задачи в tower / awx

router ★★★★★
()
Ответ на: комментарий от anonymous

Глупость. vault на какой фиг тогда сделали?

Какой из? Если ansible-vault, то как раз им и шифруют. Если harhicorp vault, то это вообще другая история и за рамками этого обсуждения.

adn ★★★★★
()
Ответ на: комментарий от thesis

Это буквально запрос ТСа. Единая портянка переменных для all.

Нет же. Он просто хочет вынести туда дублирующие переменные, которые во всех окружениях с одним и тем же значением.

пока я вижу сложность в дробленом на каталоги inventory. Такую, которая при едином не возникла бы.

И в чем эта сложность? Наоборот не сломаешь вообще всё, правя раздробленные файлы. Плюс не придется постоянно конфликты разруливать при merge (это git репозиторий же).

adn ★★★★★
()
Ответ на: комментарий от adn

Нет же. Он просто хочет вынести туда дублирующие переменные

…чтобы получить единую портянку переменных относящихся к all, ну. «Нет же, но да, именно так»

И в чем эта сложность?

ТЫ СЕЙЧАС В ТОПИКЕ, ГДЕ ЗАДАН ВОПРОС, НА КОТОРЫЙ АВТОР НЕ СМОГ НАЙТИ ОТВЕТ.

Я хз, может мне начать с эмодзями писать?

thesis ★★★★★
()
Ответ на: комментарий от thesis

чтобы получить единую портянку переменных относящихся к all

Смешно. Общие переменные в одном файле - это совсем не «один файл на все хосты».

ТЫ СЕЙЧАС В ТОПИКЕ, ГДЕ ЗАДАН ВОПРОС, НА КОТОРЫЙ АВТОР НЕ СМОГ НАЙТИ ОТВЕТ.

Да. И вопрос про общий файл. А так то очень странная у тебя аргументация. И сам себе противоречишь.

Я хз, может мне начать с эмодзями писать?

Тебе да.

adn ★★★★★
()
Ответ на: комментарий от adn

Общие переменные в одном файле - это совсем не «один файл на все хосты».

«Файл с общими переменными для всех хостов это не один файл с общими переменными для всех хостов».

Я хз, ну совсем, ты может голову проверь что ли.

Да. И вопрос про общий файл.

Ты же строкой ранее: «это совсем не один файл».

Проверь голову, серьезно тебе говорю.

Тебе да

🏃‍➡️➡️☎️➡️🚑➡️🏥➡️🤕➡️💊➡️🙂

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария