无法将模块重写设置为启用:模块重写已启用

时间:2017-10-01 16:41:11

标签: ansible ansible-2.x

尝试在Ubuntu 16.04上启用已启用的Apache2模块时出现以下错误:

Failed to set module rewrite to enabled: Module rewrite already enabled

我的任务

- name: Enable mod_rewrite
  apache2_module:
    state: present
    name: rewrite
    force: true
    ignore_configcheck: true

Ansible中的错误

TASK [apache : Enable mod_rewrite] ****************************************************************************
fatal: [vps]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to set module rewrite to enabled: Module rewrite already enabled\n", "rc": 0, "stderr": "", "stderr_lines": [], "stdout": "Module rewrite already enabled\n", "stdout_lines": ["Module rewrite already enabled"]}
        to retry, use: --limit @/home/me/ansible_ubuntu/ansible/playbook.retry

我在Ansible 2.4.0

我尝试使用force参数,然后使用ignore_configcheck,这些参数都给出相同的结果。

客户端Python:2.7.6 服务器Python:2.7.12

更新#1

它不应该只是继续声明它已经安装而不是停止吗?

更新#2

a2dismod

的输出
me@server:/etc/apache2/sites-available$ a2dismod
Your choices are: access_compat alias auth_basic authn_core authn_file authz_core authz_host authz_user autoindex deflate dir env fastcgi filter headers mime mpm_event negotiation proxy proxy_fcgi rewrite setenvif status
Which module(s) do you want to disable (wildcards ok)?

更新#3

我更改了每条评论的任务,以反映模块的全名:

- name: Enable mod_rewrite
  apache2_module:
    state: present
    name: mod_rewrite
    force: true
    ignore_configcheck: true

得到了其他错误:

TASK [apache : Enable mod_rewrite] ****************************************************************************
fatal: [vps]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to set module mod_rewrite to enabled: ", "rc": 1, "stderr": "ERROR: Module mod_rewrite does not exist!\n", "stderr_lines": ["ERROR: Module mod_rewrite does not exist!"], "stdout": "", "stdout_lines": []}
        to retry, use: --limit @/home/me/ansible_ubuntu/ansible/playbook.retry

更新#4

解决方案

task.yml

  • name:启用mod_rewrite apache2_module: 州:现在 名称:重写 force:true ignore_configcheck:true

ansible/modules/web_infrastructure/apache2_modules.py

# a2enmod name replacement to apache2ctl -M names
text_workarounds = [
    ('shib2', 'mod_shib'),
    ('evasive', 'evasive20_module'),
    ('rewrite', 'rewrite_module'),
    ('headers', 'headers_module'),
]

2 个答案:

答案 0 :(得分:2)

你在Ubuntu上遇到了Apache 2的well-known problem

有些软件包在apache2ctl -M的输出中有不同的名称,rewrite的情况也是如此。该命令将其列为rewrite_module,这会混淆Ansible。

Ansible通过提供workaround with hard-coded pair of names来解决此问题。您可以通过添加('rewrite', 'rewrite_module')

直接修改模块
text_workarounds = [
    ('shib2', 'mod_shib'),
    ('evasive', 'evasive20_module'),
    ('rewrite', 'rewrite_module'),
]

答案 1 :(得分:0)

从 ansible 2.5 开始,您可以使用 identifier

<块引用>

apache2ctl -M 列出的模块标识符。这是可选的 并且通常由共同约定自动确定 将 _module 附加到名称以及流行的自定义异常 模块。