难以在python脚本中传递ansible变量

2024-06-16 09:51:24 发布

您现在位置:Python中文网/ 问答频道 /正文

最近,我开始查找Ansible来自动化服务器配置,但我似乎无法将yml文件中的特定变量导入到.py脚本中以供使用。我要找的示例:

.yml
var:
server_name: ml-apitest-t1

然后将该变量server_name导入到python中的变量中,这样它看起来像这样:

^{pr2}$

Tags: 文件namepy服务器脚本示例servervar
2条回答

您可以使用ansible task将这些变量指定为环境变量,然后通过python访问它。
在ansible中设置环境变量:

- hosts: dev
  tasks:
    - name: Set server_name
      environment:
        SERVER_NAME: server_name

要在python中访问环境变量,请使用以下命令:

^{pr2}$

请记住,上面的ENV在play级别只是临时的,因此必须在同一play中调用python脚本。在

如果您的.yml.文件看起来像这样:

- server:
    var:
    server_name: ml-apitest-t1

那么你应该使用PyYaml,试试这个

^{pr2}$

在我的示例中,它将输出

[{'server': {'var': None, 'server_name': 'ml-apitest-t1'}}]

为了从我的测试.yml文件中得到server_name,我需要这样做,但是对于你的情况,它看起来会不同,因为你的.yml文件结构是不同的

import yaml
try:
    from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
    from yaml import Loader, Dumper

with open('test.yml', 'r') as f:
    cont = yaml.load(f.read(), Loader=Loader)

print (cont[0]['server']['server_name'])

输出就是这个

ml-apitest-t1

这里还有PyYamldocumentation

相关问题 更多 >