我正在为Anable编写一个定制的操作插件,我在我的 playbook 中使用它,我正在try 设置一个变量,该变量将在下一个任务中使用,在 playbook 中,通过(自定义)模块.

实际上,与我试图模仿的 playbook 等同的是一个设置事实的任务,如下所示:

- name: set_fact task
  set_fact: 
    ansible_python_interpreter: /path/to/python

在我的定制操作插件中,我以前使用过self._execute_module来执行插件代码中的其他模块(比如slurp).然而,对于set_fact模块,它似乎没有像预期的那样更新ansible_python_interpreter变量.

我try 了以下几种方法:

self._execute_module(module_name='ansible.builtin.set_fact',
                     module_args=dict(ansible_python_interpreter=/path/to/python),
                     task_vars=task_vars)

我还try 了module_args的不同版本:

module_args=dict(key_value={ansible_python_interpreter=/path/to/python})
module_args=dict(key_value='ansible_python_interpreter:/path/to/python')

然而,我的ansible_python_interpreter似乎并没有改变.

有什么需要帮忙的吗?

推荐答案

我能得到的最接近的结果是返回一个dict,其中包含我想要为 playbook 设置的Ansible事实,只需遵循Ansible docs上的Action Plugins的开发指南.

因此,当我在我的插件中返回_execute_model()调用时,我的插件中的run()函数将如下所示:

def run(self, tmp=None, task_vars=None):
    # Plugin code here

    facts = dict()
    facts['ansible_python_interpreter'] = '/path/to/python'

    return dict(self._execute_module(module_name='my_custom_module',
                                     module_args=module_args,
                                     task_vars=task_vars),
                ansible_facts=dict(facts))

然而,不幸的是,这引发了另一个警告/错误:

[WARNING]: Removed restricted key from module data: ansible_python_interpreter

这似乎是由于safety mechanism for overriding connection details,所以我走了一条不同的路由为我的插件.

在另一个用例中,我相信,如果不是我试图覆盖的连接变量,则返回dict(ansible_facts=dict(facts))(就像在文档中一样)是可行的.

Python相关问答推荐

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

pandas DataFrame GroupBy.diff函数的意外输出

TARete错误:类型对象任务没有属性模型'

Django mysql图标不适用于小 case

重新匹配{ }中包含的文本,其中文本可能包含{{var}

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

如何使用html从excel中提取条件格式规则列表?

海运图:调整行和列标签

通过Selenium从页面获取所有H2元素

如何访问所有文件,例如环境变量

OR—Tools CP SAT条件约束

计算天数

如何合并两个列表,并获得每个索引值最高的列表名称?

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

* 动态地 * 修饰Python中的递归函数

用两个字符串构建回文

如何反转一个框架中列的值?

没有内置pip模块的Python3.11--S在做什么?

如何在Python中自动创建数字文件夹和正在进行的文件夹?