我在ansible playbook中运行了几个shell命令,可能会也可能不会修改配置文件。
剧本中的一个项目是重启服务。但是如果设置了变量,我只想这样做。
我打算在每个shell任务中注册一个结果,但我不想覆盖该变量,如果它已经设置为' restart_needed'或类似的东西。
这个想法是重启应该是最后的事情,如果任何命令设置了restart变量,它将会运行,如果它们都没有,那么服务将不会重新启动。这是我到目前为止的一个例子......
tasks:
- name: Make a backup copy of file
copy: src={{ file_path }} dest={{ file_path }}.{{ date }} remote_src=true owner=root group=root mode=644 backup=yes
- name: get list of items
shell: |
grep <file>
register: result
- name: output will be 'restart_needed'
shell: |
NUM=14"s"; if [ "${NUM}" != "s" ]; then sed -i "${NUM}/no/yes/g" {{ file_path }}; echo "restart_needed"; else echo "nothing_changed" ; fi
with_items: "{{ result.stdout_lines }}"
register: output
- name: output will be 'nothing_changed'
shell: |
NUM="s"; if [ "${NUM}" != "s" ]; then sed -i "${NUM}/no/yes/g" {{ file_path }}; echo "restart_needed"; else echo "nothing_changed" ;; fi
with_items: "{{ result.stdout_lines }}"
register: output
- name: Restart service
service: name=myservice enabled=yes state=restarted
在上面的示例中,变量输出将在第一个任务之后设置为restart_needed,但随后将更改为&#39; nothing_changed&#39;在第二个任务中。
我想将变量保持在&#39; restart_needed&#39;如果它已经存在,那么只有当变量设置为restart_needed时才启动重启服务任务。
谢谢!
答案 0 :(得分:1)
要触发重启,您有两种选择:the when statement或handlers。
语句示例时:
tasks:
- name: check if string "foo" exists in somefile
shell: grep -q foo somefile
register: result
- name: restart service
service:
name: myservice
enabled: yes
state: restarted
when: result.rc == 0
处理程序示例:
tasks:
- name: check if string "foo" exists in somefile
shell: grep -q foo somefile
register: result
changed_when: "result.rc == 0"
notify: restart service
handlers:
- name: restart service
service:
name: myservice
enabled: yes
state: restarted