专栏首页JackeyGao的博客Cable : 基于Ansible运维Web管理平台

Cable : 基于Ansible运维Web管理平台

Cable : 基于Ansible运维Web管理平台

Posted December 14, 2018

#Cable

注意: 代码质量不高, 稳定性极差。 目前没有时间做此项目开源, 暂无开源计划.

Cable 在设计之初是 Ansible Tower 的替代品.基于WEB的ANSIBLE管理中心,使ANSIBLE更易于用于各种 IT 团队(需要有强烈的需求前提下, 默认避免线上操作). 可直接在 web 中使用 AD-HOC或者 PLAYBOOK 批量管理线上主机, 它支持短命令(AD-HOC)和 Playbook 的执行, 也可以对任务保存成模板供l以后方便复用。并可以对任务模板进行授权给其他任何成员, 做到最小化的能力交付(一个命令或者一个过程).

CABLE 可以分配用户属于哪个组织, 可以访问组织哪些权限。甚至共享凭证,而不需要危险的传输 SSH 凭证. Inventory 可以图形化管理或者通过规范化接口管理。CABLE 会记录用户的所有操作,并且有一个很友好的 REST API.

功能

  • 多组织

可根据不同项目或产品甚至物理空间来创建不同的组织, 用于区分。

#多组织

  • 批量AD-HOC

支持对多台主机批量执行命令

#执行一个 ADHOC

#ADHOC执行页, 实时的进度

  • 批量执行 PLAYBOOK

支持对多台主机批量执行 PLAYBOOK, 支持二次自定义主机。

#执行一个 Playbook

#执行 Playbook 确认页

#任务详情和进度页面

  • Inventory 管理

在线管理 Inventory 主机, 包括增加,修改, 更新, 删除. 变量管理

  • Group 管理

在线管理 Group 主机, 包括增加,修改, 更新, 删除. 变量管理

  • Project 管理

通过 Git 方式更新 Playbook, Template, FILE。

  • 活动审计, 任务重试, 增量执行(仅执行上次失败执行)

所有操作做历史纪录

可以查看一个任务的详细, 包括执行的成功主机列表和失败主机列表。 也可以重新执行这个任务, 或者删除这个活动.

也可以查看详细的步骤信息, 比如一个任务有多个 playbook 或者 多个模块组成, 那么可以查看单个模块的执行情况.

查看单个模块的执行详细

可以通过 JSON 查看, 也可以通过 Table 查看, 更可以下载 JSON 文件, 本地编辑器查看.

  • 结果视图, TABLE 视图, 实时进度

可视化执行结果, 支持实时展示结果.

  • 权限管理

不同用户拥有不同组织的不同权限, 可供灵活分配

  • 任务模板

可以对常用任务创建任务模板, 并支持参数.

支持执行模板的时候 可选参数, 使template更加灵活.

名词解释

  • ORGANIZATION

组织,一组资源(INVENTORY)的集合。 可根据不同产品或项目划分. 组织是 CABLE 最高级的划分, 不同组织的 INVENTORY(INSTANCE, GROUP, KEY, PROJECT, TEMPLATE)不可跨组织使用.

  • INVENTORY

资源, 资源代表了组织内(INSTANCE, GROUP, KEY, PROJECT)的统称。 他是执行 AD-HOC 和 PLAYBOOK 的引用资源。 一个组织必须有资源才能运作下来.

  • INSTANCE

主机hosts, 组织内管理的所有远程机器。

  • GROUP

组标签, ansible 支持灵活的 pattern 匹配, 加入组标签的划分可以很方便的进行 pattern 搜索.

  • KEY

密钥 KEY, 用于 SSH 连接到远程机器。 可以通过绑定到 INSTANCE 使用, 也可以绑定到 GROUP 使用。 另外一个重要的功能就是, 通过 GIT 同步 PROJECT 的时候使用。

  • PROJECT

PROJECT 用于同步PLAYBOOK 和一些执行素材。PLAYBOOK 和 GIT 结合能够最大方便的管理版本变更和回滚。 PROJECT 分为 PLAYBOOK、 TEMPLATE、 FILES 分别使用于不同场景。

    • Playbook: 执行 PLAYBOOK 的列表。
    • Template: 配置模板(AD-HOC 模块参数按需使用)
    • Files: 文件(AD-HOC 模块参数按需使用)
  • AD-HOC >

短命令,在 ansble中为临时命令, 在 ansible 中通过/usr/bin/ansible命令调起。在 CABLE 中,是一个很方便的在线编辑任务的功能 , 并可以保存为任务模板。他支持 ansible 所有模块(允许的情况)。并可以使用 ansible 所有 ad-hoc 参数和模块参数。ansible 拥有1378个模块, 如: command, shell, yum, service, copy, file, template等

  • PLAYBOOK >

PLAYBOOK 是 ansible 配置、部署和编排语言。CABLE 支持在线执行 PLAYBOOK 功能。PLAYBOOK 比 AD-HOC 具有更好的逻辑性、模块化和工程性。 它非常适合部署复杂的应用程序。

  • TEMPLATE (任务模板)

CABLE 支持把常用的 AD-HOC 或 PLAYBOOK 保存, 方便下次复用。 并至此增加 CABLE 变量, 让执行者启动任务的时候填写。 TEMPLATE默认仅管理员拥有权限,但可以通过管理员授权给{ 任务执行者 }。 可以跨域组织授权.

  • Prompt on launch

CABLE 支持 CABLE 级别参数(非 ansible 变量), 当任务启动的时候再指定这个变量的值。使任务更灵活. 可以设置描述和一组可选值列表.

技术依赖

平台

  • Python 2.7
  • MySQL
  • Redis
  • Docker

Raw

incremental==17.5.0
ansible==2.3.1.0
asgi-redis==1.4.2
asgiref==1.1.2
asn1crypto==0.22.0
attrs==17.2.0
autobahn==17.7.1
Automat==0.6.0
bcrypt==3.1.3
certifi==2017.7.27.1
cffi==1.10.0
channels==1.1.6
chardet==3.0.4
constantly==15.1.0
coreapi==2.3.1
coreschema==0.0.4
cryptography==2.0.2
daphne==1.3.0
Django==1.11.4
django-cors-headers==2.1.0
django-filter==1.0.4
django-rest-swagger==2.1.2
djangorestframework==3.6.3
djangorestframework-jwt==1.11.0
enum34==1.1.6
giturlparse.py==0.0.5
hyperlink==17.3.0
idna==2.5
ipaddress==1.0.18
itypes==1.1.0
Jinja2==2.9.6
jinja2schema==0.1.4
jsonfield==2.0.2
MarkupSafe==1.0
msgpack-python==0.4.8
openapi-codec==1.3.2
paramiko==2.2.1
pyasn1==0.3.1
pycparser==2.18
pycrypto==2.6.1
PyJWT==1.5.2
PyNaCl==1.1.2
pytz==2017.2
PyYAML==3.12
redis==2.10.6
requests==2.18.2
simplejson==3.11.1
six==1.10.0
Twisted==17.5.0
txaio==2.8.1
uritemplate==3.0.0
urllib3==1.22
zope.interface==4.4.2
MySQL-python==1.2.5

架构图

#架构图

任务执行逻辑

#任务执行逻辑图

安全考虑

KEY 安全考虑

为了管理方便, CABLE推荐使用KEY认证连接方式,KEY 在系统生成的时候,仅当前 CABLE 运行用户对私有 KEY有访问权限。 所以需要保护好 CABLE 运行账户.

KEY文件权限600 后续加入passphrase.

SHELL 注入

避免使用shell模块, 必须要用的话, 可以在使用变量时加入单引号或quote过滤器。当不得不使用 SHELL 模块,并且需要配合变量在 free_from中使用时,创建者必须严格使用下列方法.

Bash

Bad

echo {{ var }}

Bash

Good

echo {{ var | quote }}

Ansible 官方建议: To sanitize any variables passed to the shell module, you should use “{{ var | quote }}” instead of just “{{ var }}” to make sure they don’t include evil things like semicolons.)

rm命令屏蔽

CABLE 简单的对rm命令进行屏蔽, 但仅检测free_form参数.

权限

  • 超级用户(管理者在组织之上, 管理所有组织)
    • 增加组织
    • 删除组织
    • 查看所有用户的执行记录
    • { 组织管理者 }
  • 组织管理者 (组织内管理权限.)
    • 管理组织内资产
    • 加入移除组织成员
    • 授权组织内template
    • 同步 PROJECT
    • 查看当前组织的所有用户的执行记录
    • { 组织成员 }
  • 组织成员 (组织之下的成员, 可属于多个组织)
    • 创建和执行组织内 AD-Hoc
    • 创建和执行组织内 Playbook
    • 创建修改删除组织内 Template
    • { 任务执行者 }
  • 任务执行者 (拥有Template 执行权限的成员)
    • 执行已授权的 template
    • 查看自己的 Activity
    • 查看自己的 任务结果

API

#Cable Swagger

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用PyQt5把网页打印成PDF

    最近制作诗词日历的 PDF 版本, 准备打印一下做成实体日历。之前我写过一篇优化 print 样式的文章,在 Google 上搜索page to pdf, 大多...

    用户1416054
  • Django小技巧13: 使用F()表达式

    在 Django QuerySets API 中, F() 用于直接在数据库中引用模型的值。假设你有一个带有price的 Product 模型, 你希望为所有的...

    用户1416054
  • 当一个舔狗

    用户1416054
  • Node.Js执行原理图引发的思考

    蛋未明
  • 破解神经网络、攻击GPU,AI黑客教程来了,已登GitHub热榜

    随着深度学习的发展,各行各业都在考虑将相关新技术引入业务场景中,网络安全领域也不例外。近一段时间以来,很多网络安全公司都尝试用神经网络去检测病毒、发现程序后门等...

    AI算法与图像处理
  • 系统部署和优化

    菲宇
  • [译] 不用祖传秘方 - 写好代码的几个小技巧

    原文:【The Non-Secret Formula for Writing Better Code】https://hackernoon.com/the-no...

    江米小枣
  • javascript事件循环机制–event loop

    JS最初被设计用在浏览器中是单线程,因为如果浏览器中的JS是多线程的,会出现下面这个矛盾点:

    无邪Z
  • 程序员的大本营被黑客攻击了!10天内不交赎金,就公开用户私有代码

    就在五一假期的最后一天,一些程序员查看自己托管到GitHub上的代码时发现,他们的源代码和Repo都已消失不见,取而代之的是黑客留下的一封勒索信!

    iOSSir
  • 快捷键整理

    Eclipse 跳转到指定行:ctrl+l 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/) 快速修正:Ctrl+1 单词补...

    用户1154259

扫码关注云+社区

领取腾讯云代金券