系统环境 ------ - 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的内容