无法将模块重写设置为启用:模块重写已启用
Failed to set module rewrite to enabled: Module rewrite already enabled
尝试在 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: Enable mod_rewrite
apache2_module:
state: present
name: rewrite
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'),
]
您 运行 在 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'),
]
从 ansible 2.5 开始,您可以使用 identifier:
Identifier of the module as listed by apache2ctl -M. This is optional
and usually determined automatically by the common convention of
appending _module to name as well as custom exception for popular
modules.
尝试在 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: Enable mod_rewrite
apache2_module:
state: present
name: rewrite
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'),
]
您 运行 在 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'),
]
从 ansible 2.5 开始,您可以使用 identifier:
Identifier of the module as listed by apache2ctl -M. This is optional and usually determined automatically by the common convention of appending _module to name as well as custom exception for popular modules.