尝试在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
:
在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'),
]
答案 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 附加到名称以及流行的自定义异常 模块。