努力在python脚本中传递ansible变量

时间:2019-07-03 06:51:32

标签: python ansible ansible-2.x

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

.yml
var:
server_name: ml-apitest-t1

然后将变量server_name导入到我在python中的变量中,因此看起来像这样:

self.server_name = .yml server_name

2 个答案:

答案 0 :(得分:0)

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

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

然后您应该使用PyYaml,试试看

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)

在我的示例中,它将输出

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

要从我的测试server_name文件中获取.yml,我需要这样做,但是我的情况看起来会有所不同,因为您的.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

这也是PyYaml documentation

答案 1 :(得分:0)

您可以使用ansible任务将这些变量分配为环境变量,然后通过python访问它。
要在ansible中设置环境变量:

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

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

import os
self.server_name = os.environ['SERVER_NAME']

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