尝试通过远程api调用运行ansible playbook

时间:2018-05-29 15:53:34

标签: python ansible

我有一个我构建的API,它将系统配置参数作为playbook变量并动态构建playbooks并尝试运行它们。我可以点击我的API,但Ansible在通过

调用时会抛出以下错误
Options = namedtuple('Options', ['connection', 'module_path', 'forks', 'become', 'become_method', 'become_user', 'check', 'diff', 'listhosts', 'listtasks', 'listtags', 'syntax'])
loader = DataLoader()
options = Options(connection='local', module_path='%s/' % (ROOT_DIR), forks=100, become=None, become_method=None, become_user=None, check=False,
                diff=False, listhosts=False, listtasks=False, listtags=False, syntax=False)
passwords = dict(vault_pass='secret')

inventory = InventoryManager(loader=loader, sources=[inventory_path])
variable_manager = VariableManager(loader=loader, inventory=inventory)
executor = PlaybookExecutor(  
            playbooks=[playbook_path], inventory=inventory, variable_manager=variable_manager, loader=loader,  
            options=options, passwords=passwords)  
results = executor.run()  

这是错误:

  

致命:[localhost]:无法访问! => {“changed”:false,“msg”:“身份验证或权限失败。在某些情况下,您可能已经能够对目标目录进行身份验证并且没有权限。请考虑将ansible.cfg中的远程tmp路径更改为以“/ tmp”为根的路径。失败的命令是:(umask 77& mkdir -p \“echo /tmp/ansible/ansible-tmp-1527184628.45-99532072739462 \”&& echo ansible-tmp-1527184628.45-99532072739462 = \“{{ 1}} \“),退出结果127”,“无法访问”:true}

playbook在localhost上运行,我的连接参数也设置为local,所以我不确定是什么问题。

2 个答案:

答案 0 :(得分:2)

检查/tmp/ansible下的权限。最佳选择是将ansible.cfg配置为指向:

remote_tmp     = /tmp/.ansible-${USER}/tmp
  

来自davesnigier.comgithub

答案 1 :(得分:1)

这是Ubuntu 20.04的问题。

这是一种解决方法

mv / usr / bin / sleep /usr/bin/sleep.dist

ln -s / bin / true / usr / bin / sleep

这将禁用ubuntu上的睡眠,并将其替换为符号链接“ true”。这使它始终可以返回。遇到此问题时,找到该链接的链接如下。

https://community.spiceworks.com/topic/2275812-ubuntu-wsl-ansible-permission-error-when-running-localhost-playbook