TiDB 2.0 Ansible check model 问题

现象

部署TiDB之前,希望先通过添加--check参数来检查环境是否满足部署条件,比如在滚动升级TiDB之前,通过如下命令做部署前检查

ansible-playbook rolling_update.yml --tags=tidb --check

但是当运行至NTP服务检查时,报错了。

Ansible FAILED! => playbook: rolling_update.yml; TASK: check_config_dynamic : Preflight check - NTP service; message: {"msg": "The conditional check 'ntp_st.stdout|int != 1' failed. The error was: error while evaluating conditional (ntp_st.stdout|int != 1): 'dict object' has no attribute 'stdout'\n\nThe error appears to have been in '/tidb-ansible/roles/check_config_dynamic/tasks/main.yml': line 19, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Preflight check - NTP service\n ^ here\n"}_

这里实际是通过SSH在目的主机运行shell命令并根据输出结果来判断是否通过的,但上面错误信息可以看出shell命令没有得到执行。

分析

需要搞清楚ntp_st的输出到底是什么,ansible中可以通过如下方式添加调试信息。

tidb-ansible/roles/check_config_dynamic/tasks/main.yml

- name: Preflight check - Set NTP service status
  shell: ntpstat | grep -w synchronised | wc -l
  register: ntp_st
  changed_when: false
  when: enable_ntpd
- debug: msg=" value is  {{ ntp_st }} "

输出结果为

ok: [10.x.x.x] => {
    "msg": " value is  {u'msg': u'remote module (command) does not support check mode', 'failed': False, u'skipped': True, 'changed': False} "
}

可以看出在check mode下,远程命令并不能执行。。

解决

ansible 2.2之后可以通过修改配置的方式来强制check mode执行shell命令

- name: Preflight check - Set NTP service status
  shell: ntpstat | grep -w synchronised | wc -l
  register: ntp_st
  changed_when: false
  when: enable_ntpd
  check_mode: no

添加check_mode: no之后,就可以顺利继续执行了。

你可能感兴趣的:(TiDB 2.0 Ansible check model 问题)