【问题标题】:Ansible playbook handlers not starting the service through notify statementAnsible playbook 处理程序未通过通知语句启动服务
【发布时间】:2014-08-29 07:34:26
【问题描述】:

我不明白或看不出我做错了什么,但似乎我无法让我的 ansible playbook 在 ubuntu 服务器上启动 rng-tools 服务。

environment:
    remote server (configured): Ubuntu 14.04.1 LTS
    server with playbook: Debian GNU/Linux 7.6 (wheezy)
    > apt-cache policy ansible
    ansible:
      Installed: 1.7-0.git201406241728~unstable
      Candidate: 1.7-0.git201406241728~unstable
      Version table:
      *** 1.7-0.git201406241728~unstable 0
            100 /var/lib/dpkg/status

我的文件夹结构如下:

tasks/main.yml
tasks/packages.yml that is included from the main.yml file
handlers/main.yml
files/rng-tools    

我正在使用我的剧本安装包 rng-tools,并在执行后安装。

- name: install common packages
  apt: name={{ item }}  state=present
  with_items:
    - gnupg
    - rng-tools
    - reprepro
    - dpkg-sig
    - nginx

是的,我正在安装多个软件包,但它们都安装正确。

安装后,我复制 /etc/default/rng-tools 文件,使用:

- name: copy urandom default conf file
  copy: src="rng-tools" dest="/etc/default/rng-tools"
  notify: start rng-tools 

您可以注意到我在那里写了notify: restart rng-tools 来启动服务。

我的 handlers/main.yml 文件如下所示:

---
# Handler for rng-tools
- name: start rng-tools
  service: name=rng-tools state=started

- name: restart rng-tools
  service: name=rng-tools state=restarted

- name: stop rng-tools
  service: name=rng-tools state=stopped

- name: reload rng-tools
  service: name=rng-tools state=reloaded

正在运行的剧本的日志产生以下内容:

TASK: [debian-repository | install common packages] ***************************
ok: [debian.home.dr] => (item=gnupg,rng-tools,reprepro,dpkg-sig,nginx) => {"changed": false, "item": "gnupg,rng-tools,reprepro,dpkg-sig,nginx"}

TASK: [debian-repository | copy urandom default conf file] ********************
ok: [debian.home.dr] => {"changed": false, "dest": "/etc/default/rng-tools", "gid": 0, "group": "root", "md5sum": "45ed1b1ee174494442296fdd262f3b09", "mode": "0644", "owner": "root", "path": "/etc/default/rng-tools", "size": 815, "state": "file", "uid": 0}

PLAY RECAP ********************************************************************
debian.home.dr             : ok=12   changed=2    unreachable=0    failed=0

问题是该服务从未启动,我用

进行检查
sudo ps aux | grep rng
root 29392  0.0  0.0  11740   884 pts/1    S+   22:45   0:00 grep rng

当我执行sudo service rng-tools start 时,它会启动,而且我可以看到进程运行良好。

~:sudo service rng-tools start
Starting Hardware RNG entropy gatherer daemon: rngd.
~:sudo ps aux | grep rng
root     29431  0.0  0.0   8964   336 ?        Ss   22:47   0:00 /usr/sbin/rngd -r /dev/urandom
root 29433  0.0  0.0  11740   880 pts/1    S+   22:47   0:00 grep rng

我尝试了很多事情,比如评论除一个之外的所有处理程序。如果我在复制文件之后输入命令类型并且命令启动服务运行的服务,那么它似乎不是权限问题,但不知何故我无法弄清楚。 加上使用 handlers/main.yml 在best practice guide 中,所以我相信我做对了。

你知道为什么我不能使用 playbook 开始吗?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    changed:false 是解开这个谜团的关键:

    TASK: [debian-repository | copy urandom default conf file] ********************
    ok: [debian.home.dr] => {"changed": false, "dest": "/etc/default/rng-tools", "gid": 0, "group": "root", "md5sum": "45ed1b1ee174494442296fdd262f3b09", "mode": "0644", "owner": "root", "path": "/etc/default/rng-tools", "size": 815, "state": "file", "uid": 0}
    

    只有在文件复制发生时才会调用“notify:started”。

    【讨论】:

    • 它成功了,谢谢,我确实删除了/etc/default/rng-tools 文件并重新运行了剧本,现在它已经启动了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2016-06-29
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多