2017-11-06 2 views
0

Ich versuche, die Antwort auf eine HTTP in einen Template-Variable mit dem folgenden Code zu speichern:Chef Vorlagen Variablen „nicht definierte Methode` BYTESIZE‘für # <Hash“

template '/etc/new.conf' do 
    owner "root" 
    group "root" 
    mode "0644" 
    source "TestTemp.txt.erb" 
    variables(

    my_id: Chef::HTTP.new('https://myIP/').post('/api/sessions/', {'user- 
    principal' => '{"userName":"myusername","password":"mypass"}', 'Accept' 
    =>'application/*+xml;version=5.6', 'Content-type' => 'application/json' 
    }) ) 
    end 

Ich bin vor einer Syntax Fehler in meiner Rezeptdatei:

undefined method `bytesize' for #<Hash:0000>` on chef-client convergence on my node. 

Jede Hilfe wäre willkommen.

+0

Können Sie Ihre Vorlagenquelle 'TestTemp.txt.erb' teilen? –

+0

Stehen Sie vor einem Syntaxfehler oder einem Namensfehler? – sawa

+0

Ich habe den folgenden Fehler während meiner Chef-Client-Ausführung: Rezept Compile Error –

Antwort

0

Das Problem ist der Zeilenumbruch zwischen:

'Accept' 

und

=>'application/*+xml;version=5.6' 

Sie nicht einen Zeilenumbruch zwischen einer Raute-Taste und der => setzen können.

+0

Das wäre ein Syntaxfehler gewesen, nicht der gelistete Fehler, können Sie die Zeilenumbruch ist ein Funktion der schlechten Kopie Pasta. – coderanger

+0

@coderranger Sie haben Recht, dass es sich nicht um den aufgelisteten Fehler handelt. Aber das OP erwähnte auch Syntaxfehler. Die Frage ist nicht klar. – sawa

+0

Die 'post()' Methode erwartet eine Zeichenfolge für den Körper und der Benutzer in einem Hash übergeben, daher der NoMethodError :) – coderanger

0

Es sieht so aus, als ob Sie erwarten, dass Hash die Anforderungsheader sind, was .post('/api/sessions/', '', {...}) wäre, wobei das mittlere Bit der POST-Body ist. Wenn Sie JSON zurück erwarten, möchten Sie wahrscheinlich stattdessen Chef::HTTP::SimpleJSON verwenden, da dies die Decodierung für Sie übernimmt.

Verwandte Themen