[Python] Brauche Rat bei Script

03/17/2016 08:37 xinput.dll#1
Guten Morgen zusammen,

ich stehe hier vor einer kleinen Herausforderung. Leider bin ich absoluter Neuling was Python angeht.
Ich habe hier ein Script welches in Python geschrieben ist. Ich habe es als Template von Github und dieses Template ist genau für dieses Szenario geschrieben (es ist ein Community Script für das Tool was ich nutze).


Folgende Situation:
Ich habe auf meinem Mac unter dem Pfad
Code:
 /Library/Preferences/
eine Datei mit dem Namen
Code:
ManagedInstalls.plist
Auf einem Server im Netzwerk liegt eine Datei mit dem Namen
Code:
ManagedMunkiServer.plist
.
Nun kommt das Script zum Einsatz: Dieses Script läuft als Preflight Script vor jeder Ausführung des Tools und sieht wie folgt aus:


Code:
#!/usr/bin/python

import sys
import os
sys.path.append('/usr/local/munki')
from munkilib import updatecheck
from munkilib import FoundationPlist
#Dynamic Config Munki Preflight Script by John Rozewicki
#2010-12-08
#
#Script merges config from Munki repo into local config if newer.

RepoURL = "http://myserver"
ConfigName = "ManagedInstalls.plist"
ServerConfigName = "ManagedMunkiServer.plist"
ConfigDir = "/Library/Preferences"
ConfigPath = os.path.join(ConfigDir, ConfigName)
ServerConfigURL = os.path.join(RepoURL, ServerConfigName)
ServerConfigPath = os.path.join(ConfigDir, ServerConfigName)

def MergePlists(FromPlist, ToPlist):
      FromPlistData = FoundationPlist.readPlist(FromPlist)
      ToPlistData = FoundationPlist.readPlist(ToPlist)
      for item in FromPlistData:
           ToPlistData[item] = FromPlistData[item]
      FoundationPlist.writePlist(ToPlistData, ToPlist)


if (sys.argv[1] != "logoutinstall") and (sys.argv[1] !="installwithnologout"):
      os.system("touch Users/Shared/.com.googlecode.munki.checkandinstallatstartup")
print "Checking for new %s" % (ServerConfigName)
if updatecheck.getResourceIfChangedAtomically(ServerConfigURL, ServerConfigPath):
Merging new server settings into configuration."
MergePlists(ServerConfigPath, ConfigPath)

erwartetes verhalten:
Das preflight Script checkt die SHA-checksum von
Code:
ManagedMunkiServer.plist
auf dem Server und schaut ob diese sich von der gleichnamigen Datei auf dem Lokalen Pfad unter
Code:
/Library/Preferences/
unterscheidet. Ist auf dem Lokalen Pfad eine solche Datei nicht vorhanden (was bei der ersten Ausführung der Fall wäre) wird diese Datei lokal angelegt. Im Nachgang werden diese beiden Dateien verglichen:
Code:
/Library/Preferences/ManagedInstalls.plist
Code:
/Library/Preferences/ManagedMunkiServer.plist
Sollte die Datei ManagedMunkiServer.plist andere Werte in den Keys erhalten, dann werden diese in der Datei ManagedInstalls überschrieben.
wird die Datei Auf dem Server geändert, so sollte das Script beim nächsten ausführen sehen dass sich die Checksum geändert hat und die Datei auf dem Lokalen Pfad /Library/Preferences/ManagedMunkiServer.plist anpassen. dann erneut beide Dateien  vergleichen und die Änderungen auf die Datei ManagedInstalls.plist überschreiben.


_______________________________


IST-Zustand:


Bei der ersten Ausführung funktioniert alles wie es soll. Ändere ich nun die Datei auf dem Server und das Script wird erneut ausgeführt, dann erkennt es, dass die Checksum der Datei auf dem Server sich geändert hat und aktualisiert die Datei
Code:
/Library/Preferences/ManagedMunkiServer.plist
Jedoch schreibt er die Änderungen nicht in die eigentliche Datei


Code:
/Library/Preferences/ManagedInstalls.plist

Ich hoffe ich habe das ausreichend Verständlich erklärt.


Falls nicht dürft ihr mich gerne drauf hinweisen, aber diejenigen die sich mit Python auskennen, sollten verstehen was die Aufgabe des Scriptes ist.


Hat jemand eine Idee warum die Änderungen im letzten Schritt nicht auf die Eigentliche Datei geschrieben werden, oder kann mir einen Hinweis geben wo ich suchen sollte?


VG