Ansible 只有在需要升级时才停止服务的一种简单方法

Ansible 只有在需要升级时才停止服务的一种简单方法,ansible,mariadb,centos7,Ansible,Mariadb,Centos7,在ansible playbook中,如果需要升级,我想停止MariaDB(在我的情况下,从RPM包重新启动并不总是有效)。我对ansible很陌生 我想到了这个: - name: "Check if MariaDB needs to be upgraded" shell: "yum check-update MariaDB-server|grep MariaDB|wc -l" register: needs_update - name: "Stop mysql service"

在ansible playbook中,如果需要升级,我想停止MariaDB(在我的情况下,从RPM包重新启动并不总是有效)。我对ansible很陌生

我想到了这个:

- name: "Check if MariaDB needs to be upgraded"
  shell: "yum check-update MariaDB-server|grep MariaDB|wc -l"
  register: needs_update

- name: "Stop mysql service"
  service:
  name: mysql
  state: stopped
when: needs_update.stdout == "1"
有没有更好的方法来执行shell命令呢?运行时,我会收到警告:

TASK [mariadb_galera : Check if MariaDB needs to be upgraded]    ******************
changed: [139.162.220.42] => {"changed": true, "cmd": "yum check-update MariaDB-server|grep MariaDB|wc -l", "delta": "0:00:00.540862", "end": "2017-03-01 13:03:34.415272", "rc": 0, "start": "2017-03-01 13:03:33.874410", "stderr": "", "stdout": "0", "stdout_lines": ["0"], "warnings": ["Consider using yum module rather than running yum"]}
 [WARNING]: Consider using yum module rather than running yum

谢谢大家!

您可以使用以下选项隐藏警告:

- name: "Check if MariaDB needs to be upgraded"
  shell: "yum check-update MariaDB-server|grep MariaDB|wc -l"
  args:
    warn: false
  register: needs_update
或者,您可以诱使Ansible在
check\u模式下执行
yum
任务:

- name: "Check if MariaDB needs to be upgraded (CHECK MODE!)"
  yum:
    name: MariaDB-server
    state: latest
  check_mode: yes
  register: needs_update_check

- name: "Stop mysql service"
  service:
    name: mysql
    state: stopped
  when: needs_update_check | changed

请在使用前测试此代码。

处理此问题的最佳方法是使用“处理程序” 类似于

tasks:
  - name: Update db
    yum: name=MariaDB-server state=latest
    notify:
      - stop db

handlers:
  -  name: stop db  
     service: name=MariaDB-server state=stopped
如果需要执行多项操作,可以指定多个处理程序,但如果只想重新启动数据库,请使用restarted而不是stopped


不幸的是,这不起作用。check_mode comamnd不显示为已更改,而旧命令显示为已更改。当我执行旧命令时,它确实显示为可升级:[root@li1383-42 my.cnf.d]#yum-check-update-MariaDB-server | grep-MariaDB | wc-l 1某些角落案例?刚刚用vagrant box
bento/centos-6.7(virtualbox,2.2.7)
curl
软件包检查了它,效果如预期。我使用的是ansible 2.2.1.0(以防万一),我运行的是CentOS Linux 7.3.1611版(Core),我也运行ansible 2.2.1.0。我很高兴在某个地方报告这个错误,但我不知道从哪里开始。别忘了刷新处理程序,否则你会在playbook的末尾停止服务器。这不是OP要求的。他要求停止服务,如果它需要升级。这个答案会在升级后停止服务,可能是在自动重启后。True@Konstantin Suvorov,但可能只是通信错误,因为没有人提到处理程序,所以值得在其中添加处理程序。