Python версия "Факер"? - PullRequest
       14

Python версия "Факер"?

4 голосов
/ 01 марта 2011

Я собираюсь собрать данные о сервере, и на этих серверах уже установлен Python 2.6.Теперь мне интересно, есть ли библиотека Python, соответствующая «facter» в Ruby, а не «Python» для «привязки» для facter.У кого-нибудь есть идеи по этому поводу?

Ответы [ 4 ]

5 голосов
/ 01 ноября 2012

Соль реализует замену Facter, называемую Зернами.

http://docs.saltstack.org/en/latest/ref/modules/index.html#grains-data

Есть также попытка сделать это под названием Phacter

http://code.google.com/p/speed/wiki/Phacter

Я не пробовал, однако я согласен с концепцией.Кто-то может не хотеть / не иметь возможности устанавливать Ruby в своей системе, но хочет подобную функциональность.

5 голосов
/ 28 октября 2011

Я не вижу никакой причины, по которой вы не могли бы просто использовать facter. Выходной формат легко использовать из скрипта Python.

import subprocess
import pprint

def facter2dict( lines ):
        res = {}
        for line in lines:
                k, v = line.split(' => ')
                res[k] = v
        return res

def facter():
        p = subprocess.Popen( ['facter'], stdout=subprocess.PIPE )
        p.wait()
        lines = p.stdout.readlines()
        return facter2dict( lines )

if __name__ == "__main__":
        pprint.pprint( facter() )
1 голос
/ 19 января 2014

Несколько нововведений http://github.com/hihellobolke/sillyfacter/

Установка с использованием

  # Needs pip v1.5
  pip install --upgrade --allow-all-external --allow-unverified netifaces sillyfacter

Вы также можете обновить пипс

  # To upgrade pip
  pip install --ugrade pip
0 голосов
/ 14 декабря 2013

Вот более сжатая версия предложения @ AndrewWalker.Это также гарантирует, что '=>' присутствует перед разделением и удаляет завершающий символ \ n:

import subprocess

p = subprocess.Popen( ['facter'], stdout=subprocess.PIPE )
p.wait()
facts = p.stdout.readlines()
# strip removes the trailing \n
facts = dict(k.split(' => ') for k in [s.strip() for s in facts if ' => ' in s])
print facts["architecture"]

Я думаю, что я иду на facterpy , хотя.pip install facterpy, затем:

import facter

facts = facter.Facter()
print facts["architecture"]
...