python - 尽管通过 InventoryManager 获取正确的库存,Ansible 在本地运行所有任务
问题描述
我正在使用 ansible python sdk 从源字典运行播放。我已将其指向一个清单主机文件,如下所示:
[k8]
K8master ansible_port=22 ansible_host=172.20.100.22
但是当我运行 python 任务时,它会在 localhost 上执行所有操作。我尝试将 connection='local' 更改为 connection='ssh' 但是模块失败了。我也尝试过直接在 playbook dict 的主机中传递 IP。我错过了什么?
这是python文件。
def ansible_workflow(request):
data = request.data
context.CLIARGS = ImmutableDict(connection='local', module_path=['/to/mymodules'], forks=10, become=None,
become_method=None, become_user=None, check=False, diff=False)
loader = DataLoader() # Takes care of finding and reading yaml, json and ini files
passwords = dict(vault_pass='secret')
results_callback = ResultCallback()
inventory = InventoryManager(loader=loader, sources="path/to/hosts")
variable_manager = VariableManager(loader=loader, inventory=inventory)
roles = get_roles(item)
vars_list = [
{'vars_that_i_use_in_roles': somevar},
]
play_source = dict(
name = "Ansible Play",
hosts = 'k8',
gather_facts = 'yes',
vars = vars_list,
roles = roles
)
play = Play().load(play_source, variable_manager=variable_manager, loader=loader)
# play._tqm._stdout_callback = ResultCallback()
# execute_playbook(play_source, extra_vars_dict={})
tqm = None
try:
tqm = TaskQueueManager(
inventory=inventory,
variable_manager=variable_manager,
loader=loader,
passwords=passwords,
stdout_callback=results_callback,
)
result = tqm.run(play)
finally:
if tqm is not None:
tqm.cleanup()
# Remove ansible tmpdir
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
解决方案
刚刚发现我错过了什么。对于所有像我这样的盲人,我会在这里留下答案:
我曾提到本地连接,应该是 ssh。并且 ssh 插件在没有冗长的情况下失败
context.CLIARGS = ImmutableDict(connection='ssh', module_path=['/to/mymodules'], forks=10, become=None,
become_method=None, become_user=None, check=False, diff=False, verbosity=2)
推荐阅读
- c++ - 使用标准 c++ printf() 函数作为自定义库的接口以打印到字符显示的正确方法
- angular - Angular 2`无法读取未定义的属性'dataService'
- python - 从另一列 pandas df 分配值的有效方法
- mysql - 使用 MySQL,为什么这个日期查询显示不正确的结果?
- hibernate - 在另一个事务正在进行时阻止应用程序线程读取数据库
- jquery - 如何在 fullcalendar 中删除对象事件源?
- javascript - 本地主机:3000 版本显示与 Heroku 部署版本不同 - Node.js
- javascript - 向没有 id 的 div 添加一个 id
- amazon-web-services - 我们可以使用 AWS IAM 角色通过 REST 上传文件吗
- c# - 在 C# 中引发错误的语法是什么?