Ansible服务重启失败
Ansible Service Restart Failed
我在使用 Ansible 重启 SSH 守护进程时遇到了一些问题。
我使用的是截至 2015 年 5 月 11 日的最新软件(Ansible 1.9.1 / Vagrant 1.7.2 / VirtualBox 4.3.26 / Host:OS X 10.10.1 / Guest:ubuntu/trusty64)
tl;dr:我调用服务语法的方式似乎有问题。
原始用例(处理程序)有问题
剧本
- hosts: all
- remote_user: vagrant
- tasks:
...
- name: Forbid SSH root login
sudo: yes
lineinfile: dest=/etc/ssh/sshd_config regexp="^PermitRootLogin" line="permitRootLogin no" state=present
notify:
- restart ssh
...
- handlers:
- name: restart ssh
sudo: yes
service: name=ssh state=restarted
输出
NOTIFIED: [restart ssh]
failed: [default] => {"failed": true}
FATAL: all hosts have already failed -- aborting
nginx 处理程序使用几乎相同的语法成功完成。
任务也失败了
剧本
- name: Restart SSH server
sudo: yes
service: name=ssh state=restarted
与处理程序用例相同的输出。
临时命令也失败
Shell
> ansible all -i ansible_inventory -u vagrant -k -m service -a "name=ssh state=restarted"
库存
127.0.0.1:8022
输出
127.0.0.1 | FAILED >> {
"failed": true,
"msg": ""
}
Shell 框中的命令有效
当我通过 SSH 登录并 运行 通常的命令时,一切正常。
> vagrant ssh
> sudo service ssh restart
ssh stop/waiting
ssh start/running, process 7899
> echo $?
0
命令任务也有效
输出
TASK: [Restart SSH server] ****************************************************
changed: [default] => {"changed": true, "cmd": ["service", "ssh", "restart"], "delta": "0:00:00.060220", "end": "2015-05-11 07:59:25.310183", "rc": 0, "start": "2015-05-11 07:59:25.249963", "stderr": "", "stdout": "ssh stop/waiting\nssh start/running, process 8553", "warnings": ["Consider using service module rather than running service"]}
正如我们在警告中看到的那样,我们应该使用服务模块,但我仍然不确定障碍在哪里。
正如上面的评论所述,这是一个 Ansible 问题,显然将在 2.0 版本中修复。
我刚刚更改了我的处理程序以使用 command
模块并继续:
- name: restart sshd
command: service ssh restart
我在使用 Ansible 重启 SSH 守护进程时遇到了一些问题。
我使用的是截至 2015 年 5 月 11 日的最新软件(Ansible 1.9.1 / Vagrant 1.7.2 / VirtualBox 4.3.26 / Host:OS X 10.10.1 / Guest:ubuntu/trusty64)
tl;dr:我调用服务语法的方式似乎有问题。
原始用例(处理程序)有问题
剧本
- hosts: all
- remote_user: vagrant
- tasks:
...
- name: Forbid SSH root login
sudo: yes
lineinfile: dest=/etc/ssh/sshd_config regexp="^PermitRootLogin" line="permitRootLogin no" state=present
notify:
- restart ssh
...
- handlers:
- name: restart ssh
sudo: yes
service: name=ssh state=restarted
输出
NOTIFIED: [restart ssh]
failed: [default] => {"failed": true}
FATAL: all hosts have already failed -- aborting
nginx 处理程序使用几乎相同的语法成功完成。
任务也失败了
剧本
- name: Restart SSH server
sudo: yes
service: name=ssh state=restarted
与处理程序用例相同的输出。
临时命令也失败
Shell
> ansible all -i ansible_inventory -u vagrant -k -m service -a "name=ssh state=restarted"
库存
127.0.0.1:8022
输出
127.0.0.1 | FAILED >> {
"failed": true,
"msg": ""
}
Shell 框中的命令有效
当我通过 SSH 登录并 运行 通常的命令时,一切正常。
> vagrant ssh
> sudo service ssh restart
ssh stop/waiting
ssh start/running, process 7899
> echo $?
0
命令任务也有效
输出
TASK: [Restart SSH server] ****************************************************
changed: [default] => {"changed": true, "cmd": ["service", "ssh", "restart"], "delta": "0:00:00.060220", "end": "2015-05-11 07:59:25.310183", "rc": 0, "start": "2015-05-11 07:59:25.249963", "stderr": "", "stdout": "ssh stop/waiting\nssh start/running, process 8553", "warnings": ["Consider using service module rather than running service"]}
正如我们在警告中看到的那样,我们应该使用服务模块,但我仍然不确定障碍在哪里。
正如上面的评论所述,这是一个 Ansible 问题,显然将在 2.0 版本中修复。
我刚刚更改了我的处理程序以使用 command
模块并继续:
- name: restart sshd
command: service ssh restart