2016-06-05 4 views
2

Ich versuche, jemandes Kochbuch zu beenden, und ich muss in der Lage sein, Chef die zurückgegebene Ganzzahl von 0 aus diesem Skript abholen (Einige Details wurden entfernt) Irgendwelche Vorschläge, was hier in Chef arbeiten könnte? Ich habe bereits das PowerShell-Modul in Chef hinzugefügt, und speziell frage ich nach der Reihenfolge, in der Chef diese Daten analysieren würde - wie im action: -Element, um diese Variable an ... zu übergeben. Danke.Chef-Kochbuch, das mit einem kleinen Powershell-Skript beginnt, muss den zurückgegebenen Integer-Wert an Chef übergeben

include_recipe "chef_handler 

powershell_script do 
    code <<-EOH 
    ############### 
    # 
    # Description: 
    # Returns 1 if any share or share path allow read/write by the 'Everyone' group (fail) 
    # Returns 0 if this condition is not found (pass) 


    Try 
    { 
    #get all shares 
    $shares = e | Select-Object Name,Path 
    if($shares) 
    { 
     Foreach ($share in $shares) 
     { 
     #check everyone permissions 
     $shareAccounts = -Name $share.Name 
     Foreach ($account in $shareAccounts) 
     { 
      If ($account.AName -eq 'Everyone') 
      { 
      return 1 
      } 
     } 

     #check 
     $volumePerm = Get-ACL $share.Path 
     if ($volume.Access.Where({$Reference -eq 'Everyone'})) 
     { 
      return 1 
     } 
     } 
    } 
    else 
    return 0 


    #loop through each share checking for 'Everyone' 
    # pass the return values send to Chef or something else. 
    } 

    { 
    #build error message 
    } 
    Finally 
    { 
    #return final message 
    } 
    EOH 

    fail "Instance has failed the OpenShares check" if code == 1 

end 
+0

Die von uns verwendete Problemumgehung besteht darin, sie in eine tmp-Datei zu schreiben, sie von Chef zurückzulesen und zu löschen. –

+0

Danke Wai Yan, hast du einen Ausschnitt, den du teilen kannst? Daran hatte ich nicht gedacht. :-) –

Antwort

1

Chef-Ressourcen haben keine Ausgabewerte. Wenn das PowerShell-Skript fehlschlägt, wird der Chef-Lauf abgebrochen, andernfalls wird fortgefahren.

+0

Danke couserranger, das hat den Grund bestätigt, dass es fehlgeschlagen ist. Deshalb beginne ich lieber mit meinen eigenen Fehlern. –

0

Sie können auch den returns Parameter von powershell_script Block ansehen. Wenn Sie einen Wert wie [0,1] angeben, wird das Skript nicht fehlschlagen. Sie können auch nichts angeben und versuchen, die Ausnahme mit Ruby rescue abzufangen.

Das heißt, wenn Sie wirklich den Wert benötigen, ist mein Vorschlag, den Wert in eine Datei zu schreiben und am Ende des Prozesses zurück zu lesen, anstatt es zurückzugeben.

Sie können auf diese article für das Schreiben von Dateien in Datei mit Powershell und this zum Lesen der Datei zu String in Ruby verweisen.

+0

Interessant, vielen Dank Wai Yan, sehr geschätzt. Zu Beginn erstellt der Wortcode eine Variable, die alles enthält, was zurückgegeben wird. Es ist nicht als ein bestimmter Typ definiert. Also werde ich mir beide dieser Links genau ansehen, ich denke, dass Ruby Catch derjenige ist, an dem ich am meisten interessiert bin. Zu früh um es zu erzählen. Wie auch immer, Sie haben mir die Augen für verschiedene Möglichkeiten geöffnet. Jetzt muss ich besser verstehen, wie man Rettung im Code benutzt, bevor ich diese Entscheidung treffen kann. Ich bin schon spät dran, also werde ich einfach tun, was getan werden muss. Danke - Ich poste ein Update, vorausgesetzt ich kann das herausfinden. :-) –

Verwandte Themen