【问题标题】:Ansible handlers get name valueAnsible 处理程序获取名称值
【发布时间】:2021-10-19 11:28:45
【问题描述】:

我有一个角色,我想在项目的文件更改时重新启动服务,所以我尝试为处理程序创建一个变量,但是在 ansible 部署中,我得到了文件 交流

- name: Create jinja templating
  template:
    src: "/var/opt/config.json.j2"
    dest: "/var/opt/{{ item }}/config.json"
  with_list: "{{ variable }}"
  register: template_out
  notify:
    - my_handler

main/handlers.yml

- name: "Restart {{ item }}"
  shell: "service restart {{ item }}"
  with_items: "{{ template_out.results | selectattr('changed', 'equalto', true) | list }}"


(item={u'md5sum': u'e48695da5017f1a5558b66eafc1cdccf', u'uid': 0, u'dest': u'config.yml', u'owner': u'root', 'diff': [], u'size': 4272, u'src': u'/root/.ansible/tmp/ansible_mitogen_action_1073ea002b288ef0/source', 'ansible_loop_var': u'item', u'group': u'root', 'item': u'elcos', u'checksum': u'918eb1bda64b3c9cfb14fd9f6b526cb0492fbff4', u'changed': True, 'failed': False, u'state': u'file', u'gid': 0, u'mode': u'0644', u'invocation': {u'module_args': {u'directory_mode': None, u'force': True, u'remote_src': None, u'dest': u'config.yml', u'selevel': None, u'_original_basename': u'vector_conf_elcos/elcos.toml', u'delimiter': None, u'regexp': None, u'owner': None, u'follow': False, u'validate': None, u'local_follow': None, u'src': u'/root/.ansible/tmp/ansible_mitogen_action_1073ea002b288ef0/source', u'group': None, u'unsafe_writes': None, u'checksum': u'918eb1bda64b3c9cfb14fd9f6b526cb0492fbff4', u'seuser': None, u'serole': None, u'content': None, u'setype': None, u'mode': None, u'attributes': None, u'backup': False}}})

所以我怎样才能只获取名称值而不是整个输出

【问题讨论】:

  • 您真的期待几个小时后发布exact same question 会得到不同的结果(即作为重复而关闭)吗?如果您觉得这不合理,请编辑原始问题,详细说明您认为它应该得到不同答案的原因。这将使您的问题有机会通过重新开放投票机制。谢谢。
  • 原始问题,我编辑过,但总是关闭,这是为了创建一个新问题
  • 别吓到你:你是新来的,正在学习。但是您应该考虑将关于 SO 的问题和回答视为一种特权,而不是一种权利。如果您不遵守规则(阅读帮助部分以了解)或经常以低质量发布两个,则此特权实际上可以通过自动机制或管理员暂停。不让你的问题结束的最好方法是首先写出你能写的最好的。重新开放的旅程可能需要一些时间。在最坏的情况下,请注意,只要还没有答案,您就可以删除自己的问题。
  • 我删除了原来的问题
  • 如果换一种方式实际上会好很多:删除这个并等待在另一侧重新打开...

标签: ansible handler


【解决方案1】:
---
- hosts: localhost
  gather_facts: false

  vars:
    variable:
      - memcached
      - apache

  tasks:
    - name: Create jinja templating
      template:
        src: "config.json.j2"
        dest: "{{ item }}_config.json"
      with_list: "{{ variable }}"
      register: template_out
      notify: "Restart Service"

  handlers:
    - name: Restart Service
      shell: "service restart {{ item }}"
      with_items: "{{ template_out.results
                      | selectattr('changed', 'equalto', true)
                      | map(attribute='item')
                      | list }}"

我推荐使用这个处理程序来重启服务:

    - name: Restart service
      service:
        name: "{{ item }}"
        state: restarted
      loop: "{{ service_restart.results
                | selectattr('changed', 'equalto', true)
                | map(attribute='item')
                | list }}"

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多