Ansible:事实收集机制

时间:2019-10-02 08:55:04

标签: ansible

快速问题,我正在尝试使用BaseFactCollector添加一些特定于aix的事实。由于某些原因,事实未显示在设置输出中。要完成这项工作必须要做什么样的向导?

我还将新脚本添加到了以下文件。

facts/default_collectors.py:

from ansible.module_utils.facts.system.aix import AIXFactCollector

# general info, not required but probably useful for other facts
_general = [
    ...
    AIXFactCollector
]

测试代码(facts / system / aix.py)

from __future__ import (absolute_import, division, print_function)
__metaclass__ = type


import sys
import shlex
import os
import platform
import re
import itertools
import commands
import subprocess
try:
    import json
except ImportError:
    import simplejson as json


from ansible.module_utils.facts.utils import get_file_content


from ansible.module_utils.facts.collector import BaseFactCollector


class AIXFactCollector(BaseFactCollector):
    """
    Some handy AIX facts, more or less nice to haves
    """
    name = 'aix_goodies'
    _fact_ids = set()
    _platform = 'AIX'

    def get_oslevel(self):
        oslevel = {}
        rc, out, err = self.module.run_command(["/usr/bin/oslevel", "-s"])
        data = out.split('-')
        oslevel['OS_VER'] = data[0].strip('0')
        oslevel['TL'] = data[1].strip('0')
        oslevel['SP'] = data[2].strip('0')
        oslevel['BUILD_DATE'] = data[3].strip()

        return oslevel


可用命令行

ansible all -i 'AIXBUILDHOSTNG,' -m setup -a 'gather_subset=aix_goodies' --tree /tmp/facts

1 个答案:

答案 0 :(得分:0)

oslevel解析应使用get_distribution_AIX中的现有oslevel输出:https://github.com/ansible/ansible/blob/stable-2.9/lib/ansible/module_utils/facts/system/distribution.py#L530


通常,事实系统是平台无关的代码的混合体,它对许多操作系统(DistributionFactCollector)都执行类似的操作,而特定于平台的事物仅在一个操作系统上存在(SelinuxFactCollector)。 。

我不知道事实的所有加载机制。最好从要运行的命令的特定用例开始,并以事实要的示例输出为开始。将它们归档为增强问题,并将其带到-devel邮件列表或IRC:https://www.ansible.com/community,您可以在增强现有事实收集类或创建新的事实收集类方面获得帮助。