Назад | Перейти на главную страницу

Как установить переменную Ansible, значение которой будет известно только после запуска списка воспроизведения?

Я работаю над сценарием Ansible для настройки нового агента сборки TeamCity, и есть одна часть процесса, которую я не знаю, как автоматизировать. После установки агента сборки TeamCity он должен быть авторизован администратором, который входит на сервер сборки и нажимает кнопку «Авторизовать» рядом с агентом сборки. Это создает токен авторизации, который затем сохраняется в папке агента. buildAgent.properties файл. Что я хотел бы сделать, так это извлечь этот токен и сохранить его в переменных хоста для этого агента сборки, чтобы, если я повторно запустил сценарий Ansible, правильный токен авторизации будет скопирован, и агенту не потребуется повторно авторизован.

Я мог легко сделать это вручную: после того, как администратор войдет в систему и авторизует агент, я смогу скопировать ключ авторизации из buildAgent.properties файл, поместите его в host_vars/(agent name)/buildagent.yml, и готово. Но есть ли способ сделать это автоматически? Любой ручной шаг - это шаг, который должен быть задокументирован и который кто-то может забыть сделать - поэтому мы в первую очередь используем Ansible.

Я нашел set_fact модуль поначалу это выглядело многообещающе, но в нем говорится: «Эти переменные сохранятся между воспроизведениями во время запуска Ansible, но не будет сохраняться при выполнении даже если вы используете кеш фактов ". (выделено мной). Кеширование фактов и зарегистрированные переменные тоже не совсем то, что я ищу.

Может быть, у меня могла бы быть задача Ansible, которая переписывает host_vars/(agent name)/buildagent.yml на хост-машине Ansible - я полагаю, это может сработать. Но это кажется довольно глупым. Есть ли «официальный» способ установить переменные хоста для будущих запусков playbook, которого я просто не нашел? Или мне просто придется принять один ручной шаг в моем процессе здесь?

Вы всегда можете просто прочитать токен авторизации из файла жить, и терпит неудачу, если он не установлен.

- name: Read authorization token
  command: "grep authorizationToken .../buildAgent.properties | cut -f 2 -d ="
  register: result
  failed_when: result.stdout == ""

- name: Set authorization token fact
  set_fact: authorization_token="{{result.stdout}}"