我有一个Ansible任务,它包含了一个别人维护的相当复杂的shell脚本。此shell脚本安装了大量自定义的Web堆栈,其中许多组件都是从源代码编译的。
shell脚本经常会将各种组件更新为更新的版本。发生这种情况时,我希望管理这些服务的conf文件的Ansible模板任务失败,以便我可以手动查看更改的内容。
使用Ansible,如何检查已安装的某些版本并将其注册为可在以后的任务中使用的变量?
示例:MariaDB是从源代码编译的,因此我想创建一个等于mysql --version
输出的Ansible变量。
答案 0 :(得分:5)
一种选择是使用ansible命令并将其输出到变量
tasks:
- command: mysql --version
name: ls
register: mysql_version
- command: service mysql stop
when: mysql_version.stdout_lines == 'mysql ver 14.14'
请参阅此链接以获取更多信息http://docs.ansible.com/playbooks_variables.html#id18
答案 1 :(得分:0)
Ansible 2.9 版引入了返回 MySQL 版本的 mysql_info 模块 (official docs)。
tasks:
- name: Get MySQL version with non-default credentials
mysql_info:
login_user: mysuperuser
login_password: mysuperpass
filter: version
register: _mysql_version
_mysql_version
变量将包含如下内容:
{
"_mysql_version": {
"changed": false,
"failed": false,
"version": {
"major": 8,
"minor": 0,
"release": 23
}
}
因此该版本用 _mysql_version.version
引用,如下所示:
tasks:
- name: shutdown the server when version less than 8
- service:
name: mysql
state: stopped
when: _mysql_version.version.major < 8
注意:在 Ansible 2.9 之后,mysql_info
模块现在是 MySQL 社区集合的一部分,因此用 community.mysql.mysql_info
引用。