You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Ansible AWX中使用community.mysql.mysql_user模块遇语法错误

问题

本地Ansible环境中运行正常的MariaDB用户创建Playbook,在Ansible AWX执行时出现语法错误,报错信息如下:

"module_stdout": "Traceback (most recent call last):\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1685691063.0199862-220-69171919718447/AnsiballZ_mysql_user.py\", line 107, in \r\n    _ansiballz_main()\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1685691063.0199862-220-69171919718447/AnsiballZ_mysql_user.py\", line 99, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1685691063.0199862-220-69171919718447/AnsiballZ_mysql_user.py\", line 48, in invoke_module\r\n    run_name='__main__', alter_sys=True)\r\n  File \"/usr/lib/python3.5/runpy.py\", line 205, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/lib/python3.5/runpy.py\", line 96, in _run_module_code\r\n    mod_name, mod_spec, pkg_name, script_name)\r\n  File \"/usr/lib/python3.5/runpy.py\", line 85, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_community.mysql.mysql_user_payload_r3e02o87/ansible_community.mysql.mysql_user_payload.zip/ansible_collections/community/mysql/plugins/modules/mysql_user.py\", line 352, in \r\n  File \"\", line 969, in _find_and_load\r\n  File \"\", line 958, in _find_and_load_unlocked\r\n  File \"\", line 664, in _load_unlocked\r\n  File \"\", line 634, in _load_backward_compatible\r\n  File \"/tmp/ansible_community.mysql.mysql_user_payload_r3e02o87/ansible_community.mysql.mysql_user_payload.zip/ansible_collections/community/mysql/plugins/module_utils/mysql.py\", line 22, in \r\n  File \"/usr/local/lib/python3.5/dist-packages/pymysql/__init__.py\", line 59, in \r\n    from . import connections  # noqa: E402\r\n  File \"/usr/local/lib/python3.5/dist-packages/pymysql/connections.py\", line 206\r\n    ):\r\n    ^\r\nSyntaxError: invalid syntax\r\n"

对应的Playbook任务代码:

- name : Create mariadb user
  community.mysql.mysql_user:
    login_user: root
    login_password: \"{{ root_password }}\"
    name: user
    password: \"{{ mariadb_user_pw }}\"
    priv: \"*.*:PROCESS,SELECT,CREATE,CREATE TABLESPACE,INSERT\"
    state: present
解决方案

错误原因分析

报错指向pymysql/connections.py的语法错误,结合执行环境的Python版本(Python3.5),核心原因是新版本pymysql已不再支持Python3.5,而AWX执行节点安装的pymysql版本超出了Python3.5的兼容范围,导致语法解析失败。

具体解决步骤

  1. 降级pymysql到兼容版本
    安装支持Python3.5的pymysql版本,比如pymysql<1.1.0(1.1.0及以上版本放弃了对Python3.5的支持)。可以通过以下方式实现:

    • 在AWX的执行环境中预安装指定版本:通过自定义执行环境镜像,在Dockerfile中添加pip install pymysql==1.0.2
    • 在Playbook开头添加任务,先安装兼容版本:
      - name: Install compatible pymysql version
        pip:
          name: pymysql<1.1.0
          state: present
      
  2. 升级执行节点Python版本(可选)
    如果AWX执行节点允许升级Python,将其升级到3.6及以上版本,即可兼容最新版pymysql,从根源解决版本兼容问题。

  3. 规范Playbook语法(优化项)
    原任务代码中变量的转义引号\"属于冗余写法,YAML中可以直接使用双引号包裹变量,或者省略引号,修正后的代码如下:

    - name : Create mariadb user
      community.mysql.mysql_user:
        login_user: root
        login_password: "{{ root_password }}"
        name: user
        password: "{{ mariadb_user_pw }}"
        priv: "*.*:PROCESS,SELECT,CREATE,CREATE TABLESPACE,INSERT"
        state: present
    

    该优化虽不直接解决当前报错,但能避免后续潜在的语法问题。

内容的提问来源于stack exchange,提问作者Ror

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:15:04