Could not find the following items in the 'ironic.drivers' entrypoint: pxe_ipmitool.

 正常机器

 ironic 控制节点

 

 停掉ironic conductor

 

 过一段时间后

       on_missing_entrypoints_callback=missing_callback))
165198 2020-06-03 19:08:57.959 29088 ERROR oslo_service.service   File "/usr/lib/python2.7/site-packages/                stevedore/named.py", line 85, in __init__
165199 2020-06-03 19:08:57.959 29088 ERROR oslo_service.service     on_missing_entrypoints_callback(self.                _missing_names)
165200 2020-06-03 19:08:57.959 29088 ERROR oslo_service.service   File "/usr/lib/python2.7/site-packages/ironic/         common/driver_factory.py", line 518, in missing_callback
165201 2020-06-03 19:08:57.959 29088 ERROR oslo_service.service     names=names, entrypoint=cls._entrypoint_name)
165202 2020-06-03 19:08:57.959 29088 ERROR oslo_service.service DriverNotFoundInEntrypoint: Could not find the           following items in the 'ironic.drivers' entrypoint: pxe_ipmitool.
165203 2020-06-03 19:08:57.959 29088 ERROR oslo_service.service
165204 2020-06-03 19:08:57.967 29088 INFO ironic.common.rpc_service [-] Stopped RPC server for service ironic.           conductor_manager on host bogon.
165205 2020-06-03 19:08:57.968 29088 DEBUG oslo_concurrency.lockutils [-] Acquired lock "singleton_lock" lock /          usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py:265
165206 2020-06-03 19:08:57.968 29088 DEBUG oslo_concurrency.lockutils [-] Releasing lock "singleton_lock" lock /         usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py:281
ironic-conductor.log 
[root@bogon ironic]# ironic driver-list
The "ironic" CLI is deprecated and will be removed in the S* release. Please use the "openstack baremetal" CLI instead.
+---------------------+----------------+
| Supported driver(s) | Active host(s) |
+---------------------+----------------+
+---------------------+----------------+
[root@bogon ironic]# 

 

he following hardware types and classic drivers use IPMItool for power and management:

hardware types:
ipmi
classic drivers:
agent_ipmitool
pxe_ipmitool
agent_ipmitool_socat
pxe_ipmitool_socat

 38 pxe_agent_cimc = ironic.drivers.agent:AgentAndCIMCDriver
 39 pxe_drac = ironic.drivers.drac:PXEDracDriver
 40 pxe_drac_inspector = ironic.drivers.drac:PXEDracInspectorDriver
 41 pxe_ilo = ironic.drivers.pxe:PXEAndIloDriver
 42 pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver
 43 pxe_ipmitool_socat = ironic.drivers.ipmi:PXEAndIPMIToolAndSocatDriver
 44 pxe_irmc = ironic.drivers.pxe:PXEAndIRMCDriver
 45 pxe_iscsi_cimc = ironic.drivers.pxe:PXEAndCIMCDriver
 46 pxe_snmp = ironic.drivers.pxe:PXEAndSNMPDriver
 47 pxe_ucs = ironic.drivers.pxe:PXEAndUcsDriver
ironic-10.1.10-py2.7.egg-info/entry_points.txt:42:pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver
ironic-10.1.10-py2.7.egg-info/entry_points.txt:43:pxe_ipmitool_socat = ironic.drivers.ipmi:PXEAndIPMIToolAndSocatDriver

 yum install openstack-ironic-*

运行

裸机服务将实际的硬件管理委托给驱动来处理。从 Ocata 版本开始支持两种类型的驱动:

classic drivers (例如: pxe_ipmitool, agent_ilo 等)
hardware types (例如通用的 redfish 和 ipmi 或者厂商相关的 ilo 和 irmc)。
Driver 反过来说是由许多 hardware interfaces 构成的,每个 hardware interface 用来处理特定厂商裸机的某些配置。Classic driver 把所有的 hardware interface 都硬编码到了一起,而 hardware types 只申明了兼容哪些 hardware interface.

举个例子,pxe_ipmitool 是一个 classis driver,在你创建驱动的时候, 使用的 power, boot, console, management, deploy, raid 等模块都是固定好了, 例如:

class PXEAndIPMIToolDriver(base.BaseDriver):

    def __init__(self):
        self.power = ipmitool.IPMIPower()
        self.console = ipmitool.IPMIShellinaboxConsole()
        self.boot = pxe.PXEBoot()
        self.deploy = iscsi_deploy.ISCSIDeploy()
        self.management = ipmitool.IPMIManagement()
        self.inspect = inspector.Inspector.create_if_enabled(
            'PXEAndIPMIToolDriver')
        self.vendor = ipmitool.VendorPassthru()
        self.raid = agent.AgentRAID()
ipmi 驱动是一个 hardware types, 该驱动每个模块会定义支持哪些 hardware interface

class IPMIHardWare(generic.GenericHardware):
    @property
    def supported_console_interfaces(self):
        return [ipmitool.IPMISocatSonsole, ipmitool.IPMIShellinaboxConsole,
                noop.NoConsole]
简单的说就是 hardware types 可以让你自由组合使用 hardware interface, 更加灵活。

从用户角度看,hardware types 和 Classic driver 都是对应 node 表的 driver 字段。 但是这两种方式的配置是不同的。

ExecStart={ path=/usr/bin/ironic-conductor ; argv[]=/usr/bin/ironic-conductor ; ignore_errors=no ; start_time=[n/a
Slice=system.slice
MemoryCurrent=18446744073709551615
TasksCurrent=18446744073709551615
Delegate=no
[root@bogon ~]# ls -al /usr/bin/python 
lrwxrwxrwx 1 root root 18 Jun  3 16:16 /usr/bin/python -> /usr/bin/python2.7
[root@bogon ~]# /usr/bin/python -m pdb   /usr/bin/ironic-conductor
> /usr/bin/ironic-conductor(4)<module>()
-> import sys
(Pdb) b /usr/lib/python2.7/site-packages/ironic/common/driver_factory.py:521
Breakpoint 1 at /usr/lib/python2.7/site-packages/ironic/common/driver_factory.py:521
(Pdb) c
[root@bogon site-packages]# rpm -qa | grep ironic
openstack-ironic-common-10.1.10-1.el7.noarch
openstack-ironic-inspector-7.2.4-1.el7.noarch
openstack-ironic-staging-drivers-doc-0.9.1-1.el7.noarch
openstack-ironic-staging-drivers-0.9.1-1.el7.noarch
openstack-ironic-conductor-10.1.10-1.el7.noarch
openstack-ironic-python-agent-3.2.4-1.el7.noarch
python2-ironic-python-agent-3.2.4-1.el7.noarch
python2-ironicclient-2.2.2-1.el7.noarch
python2-ironic-neutron-agent-1.0.0-1.el7.noarch
openstack-ironic-ui-doc-3.1.3-1.el7.noarch
openstack-ironic-api-10.1.10-1.el7.noarch
python-ironic-lib-2.12.4-1.el7.noarch
openstack-ironic-inspector-doc-7.2.4-1.el7.noarch
python-ironic-inspector-client-3.1.2-1.el7.noarch
openstack-ironic-ui-3.1.3-1.el7.noarch
[root@bogon site-packages]# rpm -e openstack-ironic-common
error: Failed dependencies:
        openstack-ironic-common = 1:10.1.10-1.el7 is needed by (installed) openstack-ironic-api-1:10.1.10-1.el7.noarch
        openstack-ironic-common = 1:10.1.10-1.el7 is needed by (installed) openstack-ironic-conductor-1:10.1.10-1.el7.noarch
[root@bogon site-packages]# rpm -e openstack-ironic-common --nodeps
[root@bogon site-packages]# yum -y install  openstack-ironic-common 
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * centos-qemu-ev: mirror-hk.koddos.net
Resolving Dependencies
--> Running transaction check
---> Package openstack-ironic-common.noarch 1:10.1.10-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================================
 Package                          Arch            Version                  Repository                        Size
==================================================================================================================
Installing:
 openstack-ironic-common          noarch          1:10.1.10-1.el7          centos-openstack-queens          1.0 M

Transaction Summary
==================================================================================================================
Install  1 Package

Total download size: 1.0 M
Installed size: 4.6 M
Downloading packages:
openstack-ironic-common-10.1.10-1.el7.noar 0% [ 
[root@bogon yum.repos.d]# cat CentOS-OpenStack-queens.repo 
# CentOS-OpenStack-queens.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/Cloud for more
# information

[centos-openstack-queens]
name=CentOS-7 - OpenStack queens
baseurl=http://mirror.centos.org/$contentdir/$releasever/cloud/$basearch/openstack-queens/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
exclude=sip,PyQt4

[centos-openstack-queens-test]
name=CentOS-7 - OpenStack queens Testing
baseurl=https://buildlogs.centos.org/centos/7/cloud/$basearch/openstack-queens/
gpgcheck=0
enabled=0
exclude=sip,PyQt4

[centos-openstack-queens-debuginfo]
name=CentOS-7 - OpenStack queens - Debug
baseurl=http://debuginfo.centos.org/centos/7/cloud/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
exclude=sip,PyQt4

[centos-openstack-queens-source]
name=CentOS-7 - OpenStack queens - Source
baseurl=http://vault.centos.org/centos/7/cloud/Source/openstack-queens/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
exclude=sip,PyQt4

[rdo-trunk-queens-tested]
name=OpenStack queens Trunk Tested
baseurl=https://trunk.rdoproject.org/centos7-queens/current-passed-ci/
gpgcheck=0
enabled=0
[root@bogon yum.repos.d]# 
由于 OpenStack 的所有项目都是采用 Python 开发,所以调试 OpenStack 的本质就是调试 Python,Python 的调试通常有以下两种。

Log:方便简单,适用简单的调试
Pdb:类似 C 语言的 gdb,支持交互调试源码,功能强大
Log
OpenStack logging 模块是在 python logging 基础之上做了封装,使用简单,以 nova 为例,首先需要导入相关代码文件,获取日志句柄后,即可往该句柄写入日志信息。

from nova.openstack.common import log as logging

LOG = logging.getLogger(__name__)

LOG.debug("Print log.")
如果文件中已经导入日志模块和获取日志句柄,直接使用该句柄即可。

OpenStack logging 模块提供了丰富的和日志相关的配置项,详情请见 logging config options。

PDB
Pdb 是 python 自带的库,它支持设置断点、单步调试源码、查看当前代码、查看 stack 片段和动态修改变量的值等功能,常用命令如下:

+----------+--------------+
| commands |  Description |
+----------+--------------+
|    b     |  设断点       |
|    c     |  继续执行程序  |
|    l     |  查看当前片段  |
|    n     |  执行下行代码  |
|    p     |  打印变量的值  |
|    q     |  结束调试程序  |
+----------+--------------+
pdb.set_trace
使用该方法时,需在断点处加入以下代码:

import pdb; pdb.set_trace()
以调试 nova 创建虚拟机为例,在 API 入口处加入上行代码:

@wsgi.response(202)
@wsgi.serializers(xml=FullServerTemplate)
@wsgi.deserializers(xml=CreateDeserializer)
def create(self, req, body):
    """Creates a new server for a given user."""

    # 加入此行代码
    import pdb; pdb.set_trace()

    if not self.is_valid_body(body, 'server'):
        raise exc.HTTPUnprocessableEntity()

    context = req.environ['nova.context']
    server_dict = body['server']
    password = self._get_server_admin_password(server_dict)
    ......
之后在 shell 中执行以下命令,nova-api 收到创建虚拟机请求时,便会进入该断点:

$ /usr/bin/python /usr/bin/nova-api
python -m pdb debug_file.py
无论是日志还是 pdb.set_trace 方法,均需要修改源代码,有没有一种方法不需要改动文件呢?答案是肯定的,pdb 还提供了另外一种调试模式:

$ python -m pdb debug_file.py
依旧以调试 nova 创建虚拟机为例,步骤如下:

$ /usr/bin/python -m pdb /usr/bin/nova-api

# 设置断点 b file_name.py:line
(pdb) b /usr/lib/python2.6/site-packages/nova/api/openstack/compute/servers.py:781

# 按 c 运行程序,当收到创建虚拟机请求时,便会进入断点
(pdb) c

 yum install openstack-ironic-api openstack-ironic-conductor python-ironicclient -y

原文地址:https://www.cnblogs.com/dream397/p/13039638.html