从 1.3 版开始,Ansible 支持角色依赖以鼓励角色定义的重用。为了审计和维护更大的编排,最好有一些方法可以轻松生成哪些角色依赖哪些其他角色的依赖关系图。
依赖项定义的一个例子可能是 roles/app_node/meta/main.yml
:
---
dependencies:
- { role: common, some_parameter: 3 }
- { role: apache, port: 80 }
- { role: postgres_client,
dbname: blarg,
other_parameter: 12 }
哪里
roles/postgres_client/meta/main.yml
可能包括类似的东西---
dependencies:
- { role: postgres_common }
- { role: stunnel,
client: yes,
local_port: 5432
remote_host: db_host
remote_port: 15432
}
当编排中的角色数量增加时,这种嵌套的依赖关系可能会变得难以维护。因此,我想知道是否有人找到了一种简单的方法来生成这种依赖关系图,无论是图形化的(点还是neato?)还是缩进的文本图?这样的工具可以帮助降低维护复杂性。
最佳答案
以下 python 脚本对我有用:
#!/usr/bin/env python
import sys
import gv
from glob import glob
import yaml
g = gv.digraph('roles')
role_nodes = {}
def add_role(role):
if role not in role_nodes:
role_nodes[role] = gv.node(g, role)
def link_roles(dependent, depended):
gv.edge(
role_nodes[dependent_role],
role_nodes[depended_role]
)
for path in glob('roles/*/meta/main.yml'):
dependent_role = path.split('/')[1]
add_role(dependent_role)
with open(path, 'r') as f:
for dependency in yaml.load(f.read())['dependencies']:
depended_role = dependency['role']
add_role(depended_role)
link_roles(dependent_role, depended_role)
gv.layout(g, 'dot')
gv.render(g, 'png', 'doc/ansible-roles.png')
关于scalability - 有没有一种简单的方法来生成 Ansible 角色依赖关系图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721942/