Я работаю над сценарием 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}}"