Python 使用Ansible启用Apache站点

Python 使用Ansible启用Apache站点,python,apache,ansible,vhosts,ansible-runner,Python,Apache,Ansible,Vhosts,Ansible Runner,我正在运行一个python脚本的剧本。我在跟踪 下面的命令非常有效 ansible -i path/to/inventory.yml host_name -m command -a"a2ensite site_name" 但是当我试图通过从python脚本执行剧本来实现同样的目的时。它说这个网站不存在。下面是剧本 playbook = dict( name = "Enable Site", hosts = ['token_server'], ga

我正在运行一个python脚本的剧本。我在跟踪

下面的命令非常有效

ansible -i path/to/inventory.yml host_name -m command -a"a2ensite site_name"
但是当我试图通过从python脚本执行剧本来实现同样的目的时。它说这个网站不存在。下面是剧本

playbook = dict(
        name = "Enable Site",
        hosts = ['token_server'],
        gather_facts = 'no',
        tasks = [
            dict(action=dict(module='command', args="a2ensite " + site_name), register='shell_out'),
            dict(action=dict(module='service', args="name='apache2' state='reloaded'"), register='shell_out'),
        ]
    )
它给出了以下错误

致命:[令牌\服务器]:失败!=>{“ansible_facts”:“{”discovered_解释器_python”:“/usr/bin/python”},“changed”:true,“cmd”:“a2ensite令牌_server”,“delta”:“0:00:00.054682”,“end”:“2019-12-11 01:03:10.546478”,“msg”:“非零返回代码”,“rc”:1,“start”:“2019-12-11 01:03:10.491796”,“stderr”:“错误:站点令牌_服务器不存在!”,“stderr行”:[“错误:站点令牌\u服务器不存在!”],“标准输出”:“,“标准输出行”:[]”

更新 我尝试运行此playbook。此playbook显示“/etc/apache2/sites available”目录的内容

playbook = dict(
        name = "Enable Site",
        hosts = ['token_server'],
        gather_facts = 'yes',
        tasks = [
            dict(action=dict(module='shell', args='ls /etc/apache2/sites-available'), register='shell_out'),
        dict(action=dict(module='debug', args=dict(msg='{{shell_out.stdout}}')))
        ]
    )
它显示了我的本地计算机上/etc/apache2/sites可用目录的内容。 这意味着命令实际上是在本地服务器上执行的,而不是在远程服务器上执行的

这是我的“主机清单文件”


最有可能的解释是,您对示例的遵循有点过于严格。文档提供的示例有以下行:

context.CLIARGS = ImmutableDict(connection='local', 
    module_path=['/to/mymodules'], 
    forks=10, become=None, become_method=None, become_user=None, 
    check=False, diff=False)

该行包含
connection='local'
,指示ansible始终连接到本地主机,而不考虑指定的主机。尝试从您的CLIARGS中删除该连接,您的连接就会正常工作。祝您好运!

您在每个站点中使用了不同的站点名称(一个是
site\u name
,另一个是
token\u server
)。您可以在您的特别命令中使用
-a“a2ensite令牌\u服务器”
args=“a2ensite站点\u名称”进行测试吗“
在python代码中?@MattP特殊命令工作正常。但是我使用python脚本中的playbook运行的所有命令,它们只是在我的Local上执行,可能需要更多地了解python脚本。您在Ansible Docs中使用的示例代码使用
connection:local
连接到localhost。这将需要在您的情况下进行修改,以管理远程hosts@MattP我已经更新了代码,还发布了清单文件的内容。@AmarjitSingh:what
context.CLIARGS
我应该在连接中设置什么?我已经在playbook中设置了主机,当我将脚本与windows target一起使用时,它可以工作。谢谢,它与connection='ssh'一起工作。python脚本还有一个问题。
context.CLIARGS = ImmutableDict(connection='local', 
    module_path=['/to/mymodules'], 
    forks=10, become=None, become_method=None, become_user=None, 
    check=False, diff=False)