【问题标题】:Ansible custom module inside of a role角色内的 Ansible 自定义模块
【发布时间】:2018-10-24 18:20:54
【问题描述】:

我想了解是否有共享自定义模块的标准。角色似乎是共享代码的方式,听起来我可以在角色中包含一个自定义模块。但是,这似乎使人们最终使用该模块的方式变得复杂,因为他们需要通过角色进行交互:

即调用模块:

---
- hosts: all
  tasks:
    - my_module:
        say_something: 'Hi'

即在角色中调用模块:

---
- hosts: all
  tasks:
  - include_role:
       name: my_role
    vars:
      say_something: 'Hi'

如果我们确实在角色中包含模块,似乎我们必须将角色编写为接口,这更加复杂,甚至重复代码来接受变量。

所以我在这方面是正确的,还是我遗漏了什么?如果我是正确的,是否有任何文章或最佳实践?

【问题讨论】:

标签: ansible


【解决方案1】:

创建您的playbook 所在的library 目录,并将您的自定义模块.py 文件放在library 目录中,然后您可以在您的剧本中使用它。

目录结构如下:

playbook.yml
[library]
  |_ your_custom_moudle_1.py
  |_ your_custom_moudle_2.py

【讨论】:

  • 感谢您的回复,但我想我的问题更多的是关于传递给模块的变量。如果模块被拉入角色,这是我试图了解的部分。就像我的示例所示,将变量传递给模块非常简单且易于理解,但是当您将其包装成一个角色时,我就迷失了;我觉得这种情况下的角色需要开发为模块的接口,在某种意义上,这对我来说是重复的代码,可以将变量从角色传递给模块。
【解决方案2】:

所以从你的例子

- 主持人:所有 任务: - 包括角色: 名称:my_role 变量: say_something: '嗨' 现在在您的角色中,您可以将上面的 var 用作 - 主持人:所有 任务: - 我的模块: say_something: "{{ say_something }}"

变量也可以有不同的名字

- 主持人:所有 任务: - 包括角色: 名称:my_role 变量: say_something_1: '嗨'
- 主持人:所有 任务: - 我的模块: say_something: "{{ say_something_1 }}"

现在为了分享东西,你可以看看收藏 https://docs.ansible.com/ansible/latest/user_guide/collections_using.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2022-11-07
    • 1970-01-01
    相关资源
    最近更新 更多