无法在 salt 模块中导入自定义库

问题描述 投票:0回答:1

我有一个模块可以在 bmi_minion(位于 Kubernetes 中工作的容器内)中工作来获取一些数据。对于这个主模块,我编写了一些自定义库,它们存储在与主模块相同的目录中(/srv/salt/_modules)。

我的自定义库脚本如下所示。

import subprocess
import json
import os
import logging


log = logging.getLogger(__file__)
CACHE_FILE_PATH = '/tmp/cache_hw_type_data.json'


class SystemInfoCollector:
    @staticmethod
    def execute_shell_cmd(cmd):
        ...

    @staticmethod
    def get_ipmi_sdr_list():
        ...

    @staticmethod
    def get_dmidecode_list(option='sys'):
        ...

    @staticmethod
    def get_ras_data(*args, option=''):
        ...

    @staticmethod
    def get_system_info(*args, option='os'):
        ...


class HWTypeCacheData:
    @staticmethod
    def load_hw_type_from_cache():
        ...

    @staticmethod
    def save_data_to_cache(hw_type):
        ...

    @staticmethod
    def get_hw_type():
        ...

我的问题是,当我将此脚本作为 lib 导入到我的主 salt 模块中,并通过针对 ms_minion 运行相同的脚本时,我遇到了如下所述的问题。

我的主盐模块

import logging
import re
from datetime import datetime, date, timedelta

from iaas_asset_manager.device42.client import Device42Client
from dimm_constants import DIMMConstants, DIMMMapping
from system_info_collector import SystemInfoCollector, HWTypeCacheData

log = logging.getLogger(__file__)

__virtualname__ = "dimm_errors"
CACHE_FILE_PATH = '/tmp/cache_hw_type_data.json'


def __virtual__():
    return __virtualname__


def _get_hardware_info():
    # Retrieve hardware information like make, model, and serial number
    dmidecode_bm_data = SystemInfoCollector.get_dmidecode_list(option='sys')
    bm_data = {}
    for data in dmidecode_bm_data:
        key = data.split(':')[0].strip()
        if key == 'Manufacturer':
.......

当我瞄准小兵时遇到错误

arun.srinivasan@dcim-fault-detection-none-20069166:/srv/salt/_modules$ sudo salt 'salt.bmi_minion.20083693' dimm_errors
salt.bmoi_minion.20083693:
    'dimm_errors' __virtual__ returned False: cannot import name 'HWTypeCacheData' from 'system_info_collector' (/var/cache/salt/minion/extmods/modules/system_info_collector.py)

注意:如果我将自定义 lib 脚本分成两个分别包含两个类的文件,则导入工作正常。

这些文件的当前结构有什么问题?

python salt-stack salt
1个回答
0
投票

我解决了这个问题。有时,自定义库会被导入并缓存在内存中。新编辑后,我们需要执行sync_all、state.apply并重新启动minion。除非重新启动,否则新的更改不会应用于小黄人。

© www.soinside.com 2019 - 2024. All rights reserved.