scalability - 有没有一种简单的方法来生成 Ansible 角色依赖关系图?

标签 scalability administration ansible orchestration

从 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/

相关文章:

Java 堆栈 - ORM 与数据库可伸缩性

windows - 用于在 Windows 中递归删除具有指定名称的文件夹的命令行工具?

linux - 如何在不按回车键的情况下执行一系列终端(Ubuntu)命令

tfs - TFS:将团队项目从一台服务器移到另一台服务器?

ansible - 根据组中的机器名称运行 ansible 任务

ansible - 如何按标签顺序运行 Ansible playbook 任务

linux - TIME_WAIT 连接太多,得到 "Cannot assign requested address"

database - 像 RabbitMQ 这样的消息队列用于对 SQL 数据库进行大量写入?

mongodb - MongoDB 中数十亿小文档的快速搜索策略

Ansible concat 默认变量和文字字符串