Skip to main content

实验室环境系统 (ADLES) 的自动部署

项目描述

PyPI 上的最新版本 Travis CI 构建状态 文档 DOI 参考

概述

实验室环境系统 (ADLES) 的自动部署

ADLES 自动确定性地创建用于网络安全和信息技术 (IT) 教育的虚拟化环境。

该系统使教育工作者能够轻松地为其课程构建确定性和可移植的环境,从而节省大量时间和精力,并减轻拥有高级 IT 知识的要求。

完整的文档可以在ReadTheDocs找到。

描述系统的出版物。

入门

# Install
pip3 install adles

# Usage
adles -h

# Specification syntax
adles --print-spec exercise
adles --print-spec infra

# Examples
adles --list-examples
adles --print-example competition

用法

使用 ADLES 创建环境:

  • 阅读练习和基础设施规范以及它们的示例。
  • 为您的平台编写基础架构规范。(目前,VMware vSphere 是唯一支持的平台)
  • 使用您想要创建的环境编写练习规范。
  • 检查其语法,运行掌握阶段,进行更改,然后运行部署阶段。
# Validate spec
adles validate my-competition.yaml

# Create Master images
adles masters my-competition.yaml

# Deploy the exercise
adles deploy my-competition.yaml

# Cleanup the environment
adles cleanup my-competition.yaml

详细用法

usage: adles [-h] [--version] [-v] [--syslog SERVER] [--no-color]
             [--list-examples] [--print-spec NAME] [--print-example NAME]
             [-i INFRA]
             {validate,deploy,masters,package,cleanup} ...

Examples:
    adles --list-examples
    adles --print-example competition | adles validate -
    adles validate examples/pentest-tutorial.yaml
    adles masters examples/experiment.yaml
    adles -v deploy examples/experiment.yaml
    adles cleanup -t masters --cleanup-nets examples/competition.yaml
    adles validate -t infra examples/infra.yaml

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -v, --verbose         Emit debugging logs to terminal
  --syslog SERVER       Send logs to a Syslog server on port 514
  --no-color            Do not color terminal output
  -i INFRA, --infra INFRA
                        Override the infrastructure specification to be used

Print examples and specs:
  --list-examples       Prints the list of available example scenarios
  --print-spec NAME     Prints the named specification
  --print-example NAME  Prints the named example

ADLES Subcommands:
  {validate,deploy,masters,package,cleanup}
    validate            Validate the syntax of your specification
    deploy              Environment deployment phase of specification
    masters             Master creation phase of specification
    package             Create a package
    cleanup             Cleanup and remove existing environments

vSphere 实用程序脚本

有许多实用程序脚本可以使某些 vSphere 任务变得可以承受。

# Basic usage
vsphere --help
vsphere <script> --help
vsphere <script --version

# Running as a Python module
python -m adles.vsphere --help

详细用法

usage: vsphere [-h] {cleanup,clone,power,info,snapshot} ...

Single-purpose CLI scripts for interacting with vSphere

optional arguments:
  -h, --help            show this help message and exit

vSphere scripts:
  {cleanup,clone,power,info,snapshot}
    cleanup             Cleanup and Destroy Virtual Machines (VMs) and VM
                        Folders in a vSphere environment.
    clone               Clone multiple Virtual Machines in vSphere.
    power               Power operations for Virtual Machines in vSphere.
    info                Query information about a vSphere environment and
                        objects within it.
    snapshot            Perform Snapshot operations on Virtual Machines in a
                        vSphere environment.

系统要求

蟒蛇:3.6+

ADLES 将在 Python 支持的任何平台上运行。它已经过测试:

  • Windows 10(周年纪念和创作者)
  • Ubuntu 14.04 和 16.04(包括 Windows 上的 Ubuntu 上的 Bash)
  • CentOS 7

Python 包

setup.py具体版本见

  • pyyaml
  • 颜色日志
  • 人性化
  • tqdm
  • pyvmomi(如果您使用的是 VMware vSphere)
  • setuptools(如果您是手动安装或开发)

平台

VMware vSphere

  • vCenter 服务器:6.0+
  • ESXi:6.0+

报告问题并获得帮助

如果 ADLES 中存在错误或者您在使其正常工作时遇到问题,请在 GitHub 上打开一个问题。我很乐意提供帮助,但我可能需要几天到一周的时间才能回复。如果它对时间敏感(我很了解这种感觉),请随时直接与我联系(见下文)。

如果您有一般性问题,需要帮助您的项目或学生使用 ADLES,或者只是想讨论该项目,请通过电子邮件 ( adles/__about__.py)、Twitter (@GhostOfGoes) 或 Discord (@KnownError) 给我留言。Python Discord 服务器是提问或讨论项目的好地方。

贡献

贡献者非常受欢迎!请参阅贡献指南以开始使用,并查看TODO 列表GitHub 问题以获取任务和错误的完整列表。

贡献者

  • 克里斯托弗去(@GhostOfGoes)
  • 丹尼尔孔戴德莱昂 (dcontedeleon)

目标和 TODO

ADLES 的总体目标是创建一个易于使用且坚如磐石的系统,允许教师和学生使用虚拟环境进行教学以自动化他们的工作负载。

从长远来看,我希望看到一个开源存储库的创建,类似于 Hashicorp 的 Atlas 和 Docker 的 Hub,教育工作者可以在其中共享软件包并为改善全球网络教育做出贡献。

完整的 TODO 列表documentation/TODO.md和 GitHub 问题。

执照

该项目根据 Apache 许可证 2.0 版获得许可。有关完整的许可文本,请参阅 LICENSE,有关此项目使用代码的外部项目的归属信息,请参阅 NOTICES。

项目历史

该系统最初是我 2016 年秋季在爱达荷大学的硕士论文研究的概念验证实施。它最初设计用于在 RADICL 实验室上运行。

变更日志

此项目的所有显着更改都将记录在此文件中。

格式基于Keep a Changelog 并且该项目遵循Semantic Versioning

[1.4.0] - 2019-09-04

显着变化

  • 新的 CLI 命令语法,运行adles --help以获取详细信息或查看自述文件中的用法部分
  • 将 vSphere 帮助程序脚本(例如vm-power)合并到一个命令中,vsphere. 要使用,请运行vsphere --help.
  • ADLES 现在需要 Python 3.6+。它包含或可轻松安装在任何现代 Linux 发行版、Windows 和 OSX 上。

添加

  • 现在可以调用 CLI 一个 Python 模块(例如python -m adlespython -m adles.vsphere
  • 为所有规范类型添加了两个新规范字段:spec-typespec-version
  • 新论点:--syslog. 配置将日志输出保存到指定的 Syslog 服务器。
  • 为克隆、电源和快照 vSphere 帮助程序命令添加了进度条
  • 支持NO_COLOR环境变量(根据no-color.org
  • 新依赖:tqdmhumanfriendly
  • Debian 软件包(参见GitHub 发布页面

改变了

  • 未能导入可选依赖项现在将记录错误,而不是引发异常并终止执行。
  • 默认情况下,日志将不再发送到 syslog 服务器。系统日志服务器现在将仅在设置参数时使用。
  • 在后台对命令行参数解析进行了更改,这将使添加未来的功能更容易,并允许使用其他使用argparse.
  • 大量的代码清理和格式化
  • 碰撞的依赖版本
  • 其他各种细微更改,请参阅 Git pull request diff 了解所有更改

已移除

  • 放弃对 Python < 3.6 的支持
  • 删除LibvirtHyperV接口
  • 移除依赖:netaddr

开发

  • 为测试运行和 linting 添加了 Tox
  • 添加.editorconfig
  • 添加.gitattributes
  • 重新组织了一些文档
  • 删除了 CodeClimate
  • 将项目根目录中的剩余示例移至examples/
  • 向 Travis CI 添加了单元测试

[1.3.6] - 2017-12-19

固定的

  • 修复了任何命令行脚本的问题,即仅在命令行上输入脚本名称(例如“adles”)会出错,而不是像用户期望的那样打印帮助。
  • 修复了 vm_snapshots 脚本输出到错误日志文件的问题。

改变了

  • 对解析参数和处理键盘中断的方式进行了底层改进。

[1.3.5] - 2017-12-13

改变了

  • 将包依赖项从 requirements.txt 移至 setup.py。

[1.3.4] - 2017-12-13

添加

  • Linux 系统上的手册页!

[1.3.3] - 2017-11-25

添加

  • 将 VM 重新定位到新主机和/或数据存储到 VM 类的能力。
  • 将 VM HDD 的模式更改为 VM 类的能力。

改变了

  • 清理了 vm.py 中的文档字符串。

[1.3.2] - 2017-11-25

添加

  • 将 HDD 大小调整为 VM 类的能力。

[1.3.1] - 2017-11-24

固定的

  • 修复了接口(及其依赖项)将被导入的错误,即使它们没有被使用。这导致了“pip install docker”错误。

改变了

  • 日志记录的小改进。

[1.3.0] - 2017-07-02

添加

  • libvirt 的接口 (LibvirtInterface)。
  • 由 LibvirtInterface 和 CloudInterface 继承的 LibcloudInterface。
  • Libvirt 到基础设施规范。
  • libvirt 到可选要求。

改变了

  • 阶级层次结构的重大变化。现在所有接口都继承自 Interface 并将其 init 方法归类。有一个单独的 PlatformInterface 具有 Interface 所做的大部分功能,这就是现在从 main() 调用的内容。
  • 调整了接口中的一些样板代码。
  • 更新了解析器。
  • 格式调整。
  • 将 apache-libcloud 移至要求。

[1.2.0] - 2017-07-02

使用 Apache libcloud(很快被 1.3.0 取代,所以忽略这个版本)在云接口上的初始测试。