在Ansible中,如何检查是否安装了特定版本的MySQL?

时间:2015-04-17 20:00:17

标签: ansible

我有一个Ansible任务,它包含了一个别人维护的相当复杂的shell脚本。此shell脚本安装了大量自定义的Web堆栈,其中许多组件都是从源代码编译的。

shell脚本经常会将各种组件更新为更新的版本。发生这种情况时,我希望管理这些服务的conf文件的Ansible模板任务失败,以便我可以手动查看更改的内容。

使用Ansible,如何检查已安装的某些版本并将其注册为可在以后的任务中使用的变量?

示例:MariaDB是从源代码编译的,因此我想创建一个等于mysql --version输出的Ansible变量。

2 个答案:

答案 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+ 的更新

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 引用。