Ко второму Винни -
Роли.Роли, роли, роли.
Структура ролей по умолчанию включает в себя каталог defaults
, в котором можно определить значения по умолчанию в defaults/main.yml
.Это самый низкий приоритет, который вы можете использовать, поэтому он мне больше нравится, чем vars/main.yml
, для установки разумных значений, которые можно легко переопределить во время выполнения, но если вы выбираете согласованную структуру, то вы хороши.
Мне лично не нравится идея «общей» роли только для переменных, которые все используют, но если ваш дизайн хорошо с этим работает, вы должны быть уверены, что перед всеми именами переменных стоит префикс «виртуальное пространство имен»строки.например, не называйте это repo
, называйте это common_git_repo
или common_artifactory
, или что-то более конкретное, если можете.
Как только вы включите эту роль в книгу игр, убедитесь, что файл по умолчаниюстатически загружается перед вызовом значений, но если это так, вам не нужно сильно беспокоиться об этом.Просто используйте {{ common_git_repo }}
там, где вам это нужно.Это будет там ... именно поэтому вы хотите использовать виртуальное пространство имен, чтобы избежать коллизий с эффективно глобальными именами.
Когда вам нужно переопределить значения, вы можете настроить их соответствующим образом.Мы записываем специфичные для playbook переопределения значений по умолчанию для ролей в разделе vars:
playbook, а затем динамически записываем переопределения в последнюю минуту в файл Custom.yml
, который загружается в раздел vars_files:
.Следите за своей безопасностью, но она очень гибкая.
Мы также записываем переменные прямо в инвентарь.Если вы используете динамический инвентарь , вы можете встраивать туда переменные, специфичные для хоста и / или группы.Это работает очень хорошо.Для записи, вы можете использовать вывод YAML вместо JSON.Вот упрощенный шаблон - мы иногда используем сценарий оболочки, который запускает ansible в качестве инвентаря:
case $# in
0) # execute the playbook
ansible-playbook -i Jenkins.sh -vv site.yml
;;
*) case $1 in
# ansible-playbook will call the script with --list for hosts
--list)
printf "%s\n\n" ---
for group in someGroup otherGroup admin managed each all
do printf "\n$group:\n hosts:\n"
for s in $Servers
do printf " - $s\n"
done
printf " vars:\n"
printf " ansible_ssh_user: \"$USER\"\n"
printf " ansible_ssh_pass: \"$PSWD\"\n\n"
done
;;
esac
;;
esac
Вы также можете использовать --extra-vars
в качестве переопределения с наивысшим приоритетом в последнюю минуту.