跳转到主要内容

OpenStack 故障注入库

项目描述

OpenStack 故障注入库

该库在OpenStack云内部执行破坏性行为。它为不同类型的云部署提供了一个抽象层。这些操作作为驱动程序实现(例如,DevStack驱动程序、Fuel驱动程序、Libvirt驱动程序、IPMI驱动程序、通用驱动程序)。

安装

要求

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 (73.6 kB 查看哈希值)

上传时间 源代码

构建分布

os_faults-0.2.7-py3-none-any.whl (88.3 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面