Wpis z mikrobloga

Mirki z tagu #python rzucicie okiem na ten fragment kodu? To fragment utils.py z paczki pcs do zarządzania klastrem Pacemaker.

def getPacemakerNodesID(allow_failure=False):
(output, retval) = run(['crm_node', '-l'])
if retval != 0:
if allow_failure:
return {}
else:
err("unable to get list of pacemaker nodes")

pm_nodes = {}
for line in output.rstrip().split("\n"):
node_info = line.rstrip().split(" ",1)
pm_nodes[node_info[0]] = node_info[1]

return pm_nodes

Po update próba wywołąnia "pcs status" zwraca błąd:

IndexError: list index out of range
Jako ostatnia wywołana jest funkcja wrzucona wyżej. Polecenie "crmnode -l" zwraca wyłącznie jedną linię z samą nazwą noda (testowy cluster z 1 nodem). Czy to "pmnodes[nodeinfo[0]] = node_info[1]" ma jakikolwiek sens?
  • 4
Po update próba wywołąnia "pcs status" zwraca błąd:


@szkkam: ale gdzie jest ten IndexError (niby zgaduję, ale zawsze podawaj linijkę!)? I jaki jest dokładny output crm_node -l? Bo sens to może mieć, ale Ty możesz mieć niepełną konfigurację Pacemakera, a skrypt (a raczej autor) mógł tego nie przewidzieć.
@szkkam: Najwidoczniej masz gdzieś w pętli for nodeinfo, które ma tylko jeden wyraz i słownik nie ma czego przypisać. Dorzuć try i except IndexError dodający 0 jako wartość słownika. Nie lepiej byłoby stworzyć listę i dodawać do niej pary wartości? Nie masz tego ryzyka że dla powtarzającego się nodeinfo[0] nadpiszesz wartość, no chyba że o to Ci chodzi.