跳转到主要内容

基于多云使用的多主机异步供应程序,用于开发过程中的CI和测试

项目描述

mrack

pypi_badge readthedocs_badge badge

支持多个供应程序(OpenStack、AWS、libvirt、podman容器、Beaker)的CI和本地多主机测试供应库。

但与多云库相比,目标是从应用程序的角度描述主机。例如。

network: IPv4
hosts:
- name: master.testdomain.test
  role: master
  group: ipaserver
  os: fedora-31
- name: client.testdomain.test
  role: client
  group: ipaclient
  os: fedora-30

然后将其与供应配置相结合,其中每个供应程序都为rolegroupos参数定义了具有特定含义的配置,例如转换为flavor、image等。

provider: openstack  # default provider
openstack:
  images:
    fedora-30: Fedora-Cloud-Base-30-compose-latest
    fedora-31: Fedora-Cloud-Base-31
  flavors:
    ipaserver: ci.m1.medium
    ipaclient: ci.m1.micro
  networks:
    IPv4: net_ci_4
    IPv6: net_ipv6_only
    dual: net_cci_4_6
  keypair: ipa_key
beaker:
  distros:
    fedora-30: FEDORA-30%
    fodora-31: FEDORA-31%

因此,用户只需更改供应程序名称即可快速更改供应位置,无需重新定义供应程序/云的具体信息。这对于大量共享相同应用程序特定供应程序配置的工作非常有用。

provider: beaker

或者每个主机可以使用不同的供应程序

hosts:
- name: master.testdomain.test
  role: master
  group: ipaserver
  os: fedora-31
  provider: openstack
  network: dual
- name: client.testdomain.test
  role: client
  group: ipaclient
  os: fedora-30
  provider: beaker

输出是正确的Ansible清单,具有正确的组映射和信息,允许SSH到机器。

all:
  children:
    ipaserver:
      hosts:
        f30-1.mrack.test: {}
        f33-2.mrack.test: {}
  hosts:
    f30-1.mrack.test:
      ansible_host: 10.0.154.21
      ansible_python_interpreter: /usr/bin/python3
      ansible_ssh_private_key_file: config/id_rsa
      ansible_user: fedora
      meta_dc_record: DC=mrack,DC=test
      meta_domain: mrack.test
      meta_fqdn: f30-1.mrack.test
      meta_ip: 10.0.154.21
      meta_os: fedora-30
      meta_provider_id: 7c3c28f9-4674-4f7f-b413-00bc0b00d711
      meta_restraint_id: 9
      meta_role: master
    f33-2.mrack.test:
      ansible_host: ec2-13-15-16-1.eu-central-1.compute.amazonaws.com
      ansible_python_interpreter: /usr/bin/python3
      ansible_ssh_private_key_file: config/id_rsa
      ansible_user: fedora
      meta_dc_record: DC=mrack,DC=test
      meta_domain: mrack.test
      meta_fqdn: f33-2.mrack.test
      meta_ip: 13.15.16.1
      meta_os: fedora-33
      meta_provider_id: i-08c0d4a86c4b7f7ef
      meta_restraint_id: 1
      meta_role: master

安装

mrack可以通过pip安装,从PyPI

pip install mrack

它还可在Fedora 32+上通过COPR获得

# enable the copr at your system
sudo dnf copr enable @freeipa/neoave

# install mrack package with all supported providers and cli
sudo dnf install mrack

# install mrack command and e.g. AWS provider
sudo dnf install mrack-cli python3-mrack-aws

# install mrack library to be later used as an import with support of OpenStack provider:
sudo dnf install python3-mrack-openstack


注意

上述命令将安装 mrack 包,它依赖于(包含)以下包

  • mrack-cli
  • python3-mracklib
  • python3-mrack-aws
  • python3-mrack-beaker
  • python3-mrack-openstack
  • python3-mrack-podman
  • python3-mrack-virt

python3-mracklib 是强制安装的,因为它包含 mrack 的核心库。如果您只想安装 mrack 的一些提供者,应安装 python3-mrack-{provider_name}。要安装 mrack 命令,需要 mrack-cli 包。


运行 mrack

为了使用 mrack 工具,需要一个 mrack.conf 文件(例如,从存储库(repo/blob/main/src/mrack/data/mrack.conf)中的 [mrack.conf])。

mrack 按以下顺序查找配置文件

  • ./ 当前目录
  • ~/.mrack/ 主目录
  • /etc/mrack/ 系统目录

可以使用 mrack 工具的选项 --mrack-config--provisioning-config--db 来覆盖配置文件中的值(更多内容请参阅 mrack --help)。

Usage: mrack [OPTIONS] COMMAND [ARGS]...

  Multihost human friendly provisioner.

Options:
  -c, --mrack-config PATH
  -p, --provisioning-config PATH
  -d, --db PATH
  --debug
  --help                          Show this message and exit.

Commands:
  destroy  Destroy provisioned hosts.
  list     List host tracked by.
  output   Create outputs - such as Ansible inventory.
  ssh      SSH to host.
  up       Provision hosts.

使用 mrack 进行配置

要从 metadata.yaml 文件配置系统,可以执行以下操作

mrack up

或者使用 up 命令的选项 --metadata/-m 来覆盖元数据文件的路径。

mrack up --metadata other-metadata.yaml

要使用 mrack 返回资源,可以运行

mrack destroy

或者使用 destroy 命令的选项 --metadata/-m 来覆盖元数据文件的路径。

mrack destroy --metadata other-metadata.yaml

作为 Python 库的 mrack

# first set up authentication for each provider
# $ export AWS_CONFIG_FILE=`readlink -f ./aws.key`
from mrack.providers import providers
# import all supported providers:
from mrack.providers.aws import PROVISIONER_KEY as AWS
from mrack.providers.aws import AWSProvider
from mrack.providers.beaker import PROVISIONER_KEY as BEAKER
from mrack.providers.beaker import BeakerProvider
from mrack.providers.openstack import PROVISIONER_KEY as OPENSTACK
from mrack.providers.openstack import OpenStackProvider
from mrack.providers.podman import PROVISIONER_KEY as PODMAN
from mrack.providers.podman import PodmanProvider
from mrack.providers.static import PROVISIONER_KEY as STATIC
from mrack.providers.static import StaticProvider
from mrack.providers.virt import PROVISIONER_KEY as VIRT
from mrack.providers.virt import VirtProvider

# register all supported providers:
providers.register(AWS, AWSProvider)
providers.register(OPENSTACK, OpenStackProvider)
providers.register(BEAKER, BeakerProvider)
providers.register(PODMAN, PodmanProvider)
providers.register(STATIC, StaticProvider)
providers.register(VIRT, VirtProvider)


# use global context class
import mrack
global_context = mrack.context.global_context

# init global context with paths to files
mrack_config = "mrack.conf"
provisioning_config = "provisioning-config.yaml"
db_file = "mrackdb.json"
global_context.init(mrack_config, provisioning_config, db_file)

# load the metadata to global_context
metadata = "./metadata-f34.yaml"
global_context.init_metadata(metadata)

# pick default provider:
provider = "aws"

# create Up action

from mrack.actions.up import Up

up_action = Up()
await up_action.init(provider)

# provision machines:
await up_action.provision()

# store the output to db or just use the db later on
from mrack.actions.output import Output
output_action = Output()
await output_action.generate_outputs()

# work with machines...

# cleanup the machines:
from mrack.actions.destroy import Destroy
destroy_action = Destroy()
await destroy_action.destroy()

贡献

该项目使用 black 格式化和 isort 来保持一致的格式,使用 flake8pydocstyle 来确保遵循 Python 优秀实践。

贡献(拉取请求)欢迎。期望它们能通过 tox 测试和代码检查。推荐包括新代码的单元测试。因此,我们已配置了 pre-commit 钩子。请在本地系统上启用该功能并在发送补丁前使用它。这可以为我们节省大量的重新推送 PR。

Black 格式化和 isort

可以通过运行以下命令实现预期的格式化

$ make format

查看 black 文档了解在编辑器/IDE 中进行集成的可能性。

测试

只需运行 tox 以执行所有测试和检查器

$ tox
# or use make
$ make test

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

mrack-1.21.0.tar.gz (122.7 kB 查看哈希值)

上传时间 源代码

构建分发

mrack-1.21.0-py3-none-any.whl (99.2 kB 查看哈希值)

上传时间 Python 3

支持者