OpenStack 故障注入库
项目描述
OpenStack 故障注入库
该库在OpenStack云内部执行破坏性行为。它为不同类型的云部署提供了一个抽象层。这些操作作为驱动程序实现(例如,DevStack驱动程序、Fuel驱动程序、Libvirt驱动程序、IPMI驱动程序、通用驱动程序)。
免费软件:Apache许可证
安装
要求
Ansible是必需的,应手动在全局或虚拟环境中安装。请参阅[https://docs.ansible.org.cn/ansible/latest/installation_guide/intro_installation.html]获取安装说明。
常规安装
pip install os-faults
库包含可选的libvirt驱动程序 [https://pypi.ac.cn/project/libvirt-python/],如果您计划使用它,请使用以下命令安装带有额外依赖项的os-faults
pip install os-faults libvirt-python
配置
云部署配置以JSON/YAML格式或Python字典形式指定。
- 该库使用两种类型的对象。
服务 - 是在云中运行的软件,例如 nova-api
容器 - 是在云中运行的软件,例如 neutron_api
节点 - 运行云的节点,例如具有主机名的服务器
示例 1. DevStack
可以使用以下YAML文件指定与DevStack的连接
cloud_management:
driver: devstack
args:
address: devstack.local
auth:
username: stack
private_key_file: cloud_key
iface: enp0s8
OS-Faults库将通过地址 devstack.local、用户 stack 和位于文件 cloud_key 中的SSH密钥连接到DevStack。默认网络接口由参数 iface 指定。请注意,用户应具有sudo权限(默认情况下,DevStack用户具有这些权限)。
DevStack驱动负责服务发现。有关详细信息,请参阅驱动程序文档:http://os-faults.readthedocs.io/en/latest/drivers.html#devstack-systemd-devstackmanagement
示例 2. 带有服务、容器和电源管理的OpenStack
借助 通用 驱动,也可以处理任意OpenStack。在此示例中,os-faults用作Python库。
cloud_config = {
'cloud_management': {
'driver': 'universal',
},
'node_discover': {
'driver': 'node_list',
'args': [
{
'ip': '192.168.5.127',
'auth': {
'username': 'root',
'private_key_file': 'openstack_key',
}
},
{
'ip': '192.168.5.128',
'auth': {
'username': 'root',
'private_key_file': 'openstack_key',
}
}
]
},
'services': {
'memcached': {
'driver': 'system_service',
'args': {
'service_name': 'memcached',
'grep': 'memcached',
}
}
},
'containers': {
'neutron_api': {
'driver': 'docker_container',
'args': {
'container_name': 'neutron_api',
}
}
},
'power_managements': [
{
'driver': 'libvirt',
'args': {
'connection_uri': 'qemu+unix:///system',
}
},
]
}
配置包含所有OpenStack节点及其凭据以及所有服务/容器。OS-Faults将自动确定服务/容器和节点之间的映射。电源管理配置灵活,支持混合裸金属/虚拟化部署。
首先,让我们建立与云的连接并验证它
cloud_management = os_faults.connect(cloud_config)
cloud_management.verify()
该库还可以从YAML或JSON格式的文件中读取配置。配置文件可以指定在 OS_FAULTS_CONFIG 环境变量中。默认情况下,库将在以下位置之一搜索文件 os-faults.{json,yaml,yml}
当前目录
~/.config/os-faults
/etc/openstack
现在让我们做一些破坏性操作
cloud_management.get_service(name='memcached').kill()
cloud_management.get_container(name='neutron_api').restart()
人类API
人类API简化且易于理解。它包括多个像正常英语句子一样编写的命令。
面向服务 的命令对所有、一个随机节点或由FQDN指定的节点上的 服务 执行指定的 操作
<action> <service> service [on (random|one|single|<fqdn> node[s])]
- 示例
重启Keystone服务 - 在所有节点上重启Keystone服务。
在随机选取的节点上终止nova-api服务 - 在随机选取的节点上终止Nova API。
面向容器 的命令对所有、一个随机节点或由FQDN指定的节点上的 容器 执行指定的 操作
<action> <container> container [on (random|one|single|<fqdn> node[s])]
- 示例
在所有节点上重启neutron_ovs_agent容器 - 在所有节点上重启neutron_ovs_agent容器。
在随机选取的节点上终止neutron_api容器 - 在随机选取的节点上停止Neutron API容器。
面向节点 的命令对指定的由FQDN或服务节点集指定的 节点 执行指定的 操作
<action> [random|one|single|<fqdn>] node[s] [with <service> service]
- 示例
重启带有MySQL的一个节点 - 重启一个随机节点的MySQL。
重置node-2.domain.tld节点 - 重置节点 node-2.domain.tld。
面向网络 的命令是面向节点命令的子集,并在所选节点上执行网络管理操作
<action> <network> network on [random|one|single|<fqdn>] node[s] [with <service> service]
- 示例
在运行rabbitmq服务的节点上断开管理网络 - 关闭所有运行rabbitmq的网络管理接口。
在node-1.domain.tld节点上连接存储网络 - 在node-1.domain.tld上启用存储网络接口。
扩展API
1. 服务操作
获取服务并重启它
cloud_management = os_faults.connect(cloud_config)
service = cloud_management.get_service(name='glance-api')
service.restart()
- 可用操作
start - 启动服务
terminate - 优雅地终止服务
restart - 重启服务
kill - 突然终止服务
unplug - 从网络中拔掉服务
plug - 将服务插入网络
2. 容器操作
获取容器并重启它
cloud_management = os_faults.connect(cloud_config)
container = cloud_management.get_container(name='neutron_api')
container.restart()
- 可用操作
start - 启动容器
terminate - 优雅地终止容器
restart - 重启容器
3. 节点操作
获取云中的所有节点并重启它们
nodes = cloud_management.get_nodes()
nodes.reboot()
- 可用操作
重启 - 优雅地重启所有节点
关机 - 突然关闭所有节点
重置 - 重置(冷重启)所有节点
断开连接 - 在所有节点上禁用指定名称的网络
连接 - 在所有节点上启用指定名称的网络
4. 与节点操作
获取运行服务的所有节点,选择其中一个并重置
nodes = service.get_nodes()
one = nodes.pick()
one.reset()
获取运行l3-agent的节点并禁用其管理网络
fqdns = neutron.l3_agent_list_hosting_router(router_id)
nodes = cloud_management.get_nodes(fqdns=fqdns)
nodes.disconnect(network_name='management')
5. 与服务操作
在单个节点上重启一个服务
service = cloud_management.get_service(name='keystone')
nodes = service.get_nodes().pick()
service.restart(nodes)
6. 与容器操作
在随机节点上终止一个容器
container = cloud_management.get_container(name='neutron_ovs_agent')
nodes = container.get_nodes().pick()
container.restart(nodes)
许可证说明
Ansible 根据 GPL-3.0 许可证分发,因此与它的代码链接的所有程序都受 GPL 限制 [1]。然而,这些限制不适用于 os-faults 库,因为它作为进程调用 Ansible [2][3]。
Ansible 模块提供 Apache 许可证(与 GPL 兼容)[4]。这些模块导入 Ansible 运行时(模块 API)的一部分,并在远程主机上执行。os-faults 库既不导入这些模块,也不静态或动态导入。
[1] https://gnu.ac.cn/licenses/gpl-faq.html#GPLModuleLicense [2] https://gnu.ac.cn/licenses/gpl-faq.html#GPLPlugins [3] https://gnu.ac.cn/licenses/gpl-faq.html#MereAggregation [4] https://apache.ac.cn/licenses/GPL-compatibility.html
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
os_faults-0.2.7.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 13d36f308ea7e927470de0dd39ac42cff2be81d7e2e2e94738fe0d02458ef0a0 |
|
MD5 | 3b25597d18a115639e3c2c85ddb0aad0 |
|
BLAKE2b-256 | 7a291b2354fa909a84d370362f8f31f647486c008f136599d44f8f69394e6e4b |
os_faults-0.2.7-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 330b3c452444dd5e4c1dc268ac8c08bb9e1600853d6eed196782ecc6df408934 |
|
MD5 | 8cbd06b24aca31700e696b59f7ac3b36 |
|
BLAKE2b-256 | 5f334d95612dea5e28d5fc4cb257947385f9dac84514be2995868413ef0a4f98 |