【问题标题】:Importing Ansible module utils导入 Ansible 模块工具
【发布时间】:2015-01-05 19:22:30
【问题描述】:

Ansible module development documentation 声明:

[编写 Ansible 模块的关键部分] 包括始终以以下方式结束模块文件:

from ansible.module_utils.basic import *
main()

这与在文件顶部对导入进行分组的通常做法相矛盾。使用 import * 也会阻止 lint 工具(例如 flake8)有效工作,并且是 generally regarded as bad practice

是否有任何理由以这种方式导入,还是 Ansible 只是在这里提出自己的风格推荐?

【问题讨论】:

  • Ansible 只是在进行过程中进行弥补。忽略它们并正确执行。

标签: python coding-style python-import ansible


【解决方案1】:

注意:以下答案不再适用于 Ansible 2.1+。来自 cmets:

我意识到这是一篇旧帖子,但如果有人仍然感兴趣,值得注意的是,自从 ansible 2.1 以来,这不再是真的了。取自 here:在 Ansible-2.1.0 之前,仅从 ansible.module_utils.basic 导入您使用的内容不起作用。您需要使用通配符导入 - bouletta

原答案

Ansible (prior to version 2.1) will refuse to run 如果您不从事 import * 业务。我不是 100% 确定 什么 魔术正在做,但我知道 some 是。

Replacer 用于将代码块插入到模块之前 转移。而不是进行经典的 python 导入,这允许更多 通过不移动额外文件,在无引导方案中进行有效传输 通过网络传输,并且还负责将参数嵌入到传输的 模块。

这个版本是这样完成的,本地导入仍然可以 在模块代码中使用,因此 IDE 不必知道发生了什么。

例子:

from ansible.module_utils.basic import * 

... 将导致将 basic.py 插入到模块中 来自源代码树中的 module_utils/ 目录。

所有模块都必须至少导入基本模块,但也需要导入 是其他的sn-ps。

【讨论】:

  • @augurar 我意识到这是一篇旧帖子,但如果有人仍然感兴趣,值得注意的是,自从 ansible 2.1 以来,这不再是真的了。取自 here :在 Ansible-2.1.0 之前,仅从 ansible.module_utils.basic 导入您使用的内容不起作用。您需要使用通配符导入
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
相关资源
最近更新 更多