最近我开始查找Ansible来自动进行服务器配置,但是我似乎无法将yml文件中的特定变量导入到我的.py脚本中以供使用。我正在寻找的示例:
.yml
var:
server_name: ml-apitest-t1
然后将变量server_name
导入到我在python中的变量中,因此看起来像这样:
self.server_name = .yml server_name
答案 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脚本。