系统环境
------
- CENTOS7.6-1810
- virtualenv
- python 3.8.0
- ansible 2.8.7
- eclipse 201909 + PyDEV 7.4
以前自定义options:
from collections import namedtuple
from optparse import Values
options = {'verbosity': 0, 'connection': 'smart', 'timeout': 15,..........}
ops = Values(options)
现在改为如下, 异常消失:
from ansible import context
from ansible.module_utils.common.collections import ImmutableDict
方法1.
context._init_global_context(ops)
方法2.
context.CLIARGS = ImmutableDict(
connection='smart', module_path=None, verbosity=5,
forks=10, become=None, become_method=None,
become_user=None, check=False, diff=False)
#如果报键值异常:
Traceback (most recent call last):
if context.CLIARGS['syntax']:
File "/mydev/.envs/ansible287/lib/python3.8/site-packages/ansible/module_utils/common/collections.py", line 20, in __getitem__
return self._store[key]
KeyError: 'syntax'
则追加相应Options参数,如syntax=None,start_at_task=None。。。。。。
ansible==2.9.12 方法二好使;根本原因是ansible/utils/context_objects.py 中声明全局变量CLIArgs,比如在 ansible/executor/task_queue_manager.py 中使用,也就是说需要提前需要设置CLIArgs的内容

这篇博客探讨了在Ansible中如何处理CLI参数,从旧的`optparse`库转换到新的`ansible.context`模块。介绍了两种方法初始化全局上下文:方法1使用`_init_global_context`,方法2直接设置`CLIARGS`为`ImmutableDict`。当出现键值异常时,需要确保添加所有必需的选项参数,例如'syntax'。在Ansible 2.9.12中,方法二是可行的解决方案,因为全局变量`CLIARGS`在多个模块中被使用。
3944

被折叠的 条评论
为什么被折叠?



