美文网首页
TiDB 2.0 Ansible check model 问题

TiDB 2.0 Ansible check model 问题

作者: luckriver | 来源:发表于2019-05-09 14:56 被阅读0次

    现象

    部署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 问题

          本文链接:https://www.haomeiwen.com/subject/asmwoqtx.html