web-dev-qa-db-ja.com

Ansibleサービスの再起動に失敗しました

Ansibleを使用してSSHデーモンを再起動するのに苦労しています。

2015年5月11日現在の最新ソフトウェアを使用しています(Ansible 1.9.1/Vagrant 1.7.2/VirtualBox 4.3.26/Host:OS X 10.10.1/Guest: buntu/trusty64

tl; dr:サービス構文の呼び出し方法に何か問題があるようです。

元の使用例の問題(ハンドラー)

Playbook

- 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ハンドラーはほぼ同じ構文で正常に完了しました。

タスクも失敗する

Playbook

- name: Restart SSH server
  Sudo: yes
  service: name=ssh state=restarted

ハンドラーの使用例と同じ出力。

アドホックコマンドも失敗する

シェル

> 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": ""
}

ボックス内のシェルコマンドが機能する

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"]}

警告でわかるように、サービスモジュールを使用することになっていますが、まだ問題がどこにあるのかわかりません。

22
Steven Liao

上記のコメントが述べているように、これはAnsibleの問題であり、明らかに2.0リリースで修正される予定です。

ハンドラーをcommandモジュールを使用するように変更し、先に進みました。

- name: restart sshd
  command: service ssh restart
27
Asfand Qazi