zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    WPF Prefix 'attach' does not map to a namespace.
    C# 用ManulResetEvent 控制Thread的 Suspend、Resume
    C# 监控Windows睡眠与恢复
    c# DataTable to Object Mapping
    C# DispatcherTimer Start之后立即执行
    Visual studio 编译时copy文件、文件夹
    c# 无法加载xxx.dll 找不到指定的模块(如何指定文件夹)
    EntityFramework 找不到方法:“Void System.Data.Entity.DbModelBuilder.RegisterEntityType
    wpf 全局异常捕获处理
    pandas入门
  • 原文地址:https://www.cnblogs.com/dream397/p/13039638.html
Copyright © 2011-2022 走看看