首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >create是否有可能创建一个ansible处理程序的模板?

create是否有可能创建一个ansible处理程序的模板?
EN

Stack Overflow用户
提问于 2020-04-10 16:27:34
回答 1查看 174关注 0票数 1

我面临的问题是,我需要在ansible中定义一组仅在名称上不同的类似处理程序。

让我举一个例子。下面是一些任务

代码语言:javascript
复制
# tasks/main.yml
- name: Install config of OpenVPN instance 1
  notify: restart openvpn-1
  ...
- name: Install config of OpenVPN instance 2
  notify: restart openvpn-2
  ...
# Multiple more of that pattern.

您可能会认为每个实例的配置略有不同,可以在这里处理。

好的。使用处理程序

代码语言:javascript
复制
# handlers/main.yml
- name: restart openvpn-1
  systemd:
    name: openvpn-server@instance1
    state: restarted
- name: restart openvpn-2
  systemd:
    name: openvpn-server@instance2
    state: restarted
# ...

您看,这是相当多的重复代码(不太好)。

我想做这样的事情:

代码语言:javascript
复制
# Handler template or so
- name: restart-openvpn-{{ item }}
  systemd:
    name: openvpn-server@instance{{ item }}
    state: restarted
  loop:
    - "1"
    - "2"
    # ...

这没用,我试过了。

我找到了这个职位,但是这里的工作方式并不像假设任务在loop中运行那样理想。相反,我有一组单独的任务,它们触发处理程序的单个实例。而且,这已经是一个角色。

因此,简短的问题是:如何创建处理程序模板以避免代码冗余?

EN

回答 1

Stack Overflow用户

发布于 2020-04-10 17:03:20

你的代码有效。

例如,我使用了两个服务,并告诉他们使用您的方法重新启动:

代码语言:javascript
复制
- hosts: localhost
  connection: local
  become: true

  tasks:
    - name: restart-{{ item }}
      systemd:
        name: "{{ item }}.service"
        state: restarted
      loop:
        - "whoopsie"
        - "wpa_supplicant"

O/P为:

代码语言:javascript
复制
PLAY RECAP **********
localhost                  : ok=2 

与代码的主要区别是:添加引号。

根据关于使用变量的不可信文件

YAML语法要求如果您使用{{ foo }}启动一个值,则需要引用整行代码,因为它希望确保您没有尝试启动YAML字典。这将在YAML语法文档中进行讨论。 这是行不通的:

  • 主机: app_servers vars: app_path:{ base_path }/22 这样做,你会没事的:
  • 主机: app_servers vars: app_path:"{{ base_path }}/22“
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61144484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档