基于多云使用的多主机异步供应程序,用于开发过程中的CI和测试
项目描述
mrack
支持多个供应程序(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
然后将其与供应配置相结合,其中每个供应程序都为role
、group
、os
参数定义了具有特定含义的配置,例如转换为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 来保持一致的格式,使用 flake8 和 pydocstyle 来确保遵循 Python 优秀实践。
贡献(拉取请求)欢迎。期望它们能通过 tox 测试和代码检查。推荐包括新代码的单元测试。因此,我们已配置了 pre-commit 钩子。请在本地系统上启用该功能并在发送补丁前使用它。这可以为我们节省大量的重新推送 PR。
Black 格式化和 isort
可以通过运行以下命令实现预期的格式化
$ make format
查看 black 文档了解在编辑器/IDE 中进行集成的可能性。
测试
只需运行 tox 以执行所有测试和检查器
$ tox
# or use make
$ make test
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
构建分发
mrack-1.21.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c8f5b0f8343ea3b047d89695d19039c35f71f53b037e74d3e04be285ab1a115 |
|
MD5 | bf0f23ba78c61defc854d573b4426e17 |
|
BLAKE2b-256 | a7f304cc282d8e1338c41f0623c006e12675f0fd55b0614d8ef6150e131759e1 |
mrack-1.21.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a7b73a6bd38c320059094eb53257a2c70224bf8af20de9e36c17ff0a60360c8d |
|
MD5 | b9b1f24f16c9543643a34f8f9d0cb485 |
|
BLAKE2b-256 | cf0afee950748b676d0cac3a5e78232e0af09c36273dc0eefead1138af885380 |