2017-02-08 3 views
0

Ich versuche meine erste benutzerdefinierte Koch-Ressource zu schreiben. Allerdings kann ich auf Eigenschaften in einige andere eingebettete Ressourcen nicht zugreifen.Eingebettete Ressource kann nicht auf die Chef-Eigenschaft in der benutzerdefinierten Ressource zugreifen?

ich geschaffen habe, die folgende Ressource

property :template_shortname, String 

action :setup do 
    node.set['apache']['version'] = '2.4' 
    node.set['apache']['package'] = 'apache2' 

    include_recipe "apache2::default" 

    print "the shortname is " + template_shortname 

    web_app "sample_app" do 
    server_name "server.com" 
    server_aliases [] 
    docroot "/www-data" 
    template "prefix " + template_shortname 
    end 
end 

jedoch, wenn diese Ausführung erhalte ich:

Von Debug-Protokoll

The shortname is: server 

Aber die Parameter für template_shortname enthält ein leeres Array. So verlässt sie mit:

 TypeError 
     --------- 
     no implicit conversion of Array into String 

     Cookbook Trace: 
     --------------- 
     /tmp/kitchen/cache/cookbooks/phpapp/resources/setup.rb:21:in `+' 
     /tmp/kitchen/cache/cookbooks/phpapp/resources/setup.rb:21:in `block (2 levels) in class_from_file' 
     /tmp/kitchen/cache/cookbooks/phpapp/resources/setup.rb:17:in `block in class_from_file' 

Ich bin mit Koch-dk Chef Development Kit Version: 1.1.16 Koch-Client-Version: 12.17.44 Auslieferungsversion: Master (83358fb62c0f711c70ad5a81030a6cae4017f103) berks Version: 5.2. 0 Küche Version: 1.14.2

+0

'Vorlage" Präfix # {template_shortname} "' benutze String-Interpolation, keine Addition – Tensibai

+0

Und wahrscheinlich 'new_resource.template_shortname' aus dem [doc] (https://docs.chef.io/custom_resources.html#new-resource -Eigentum). Alles in allem klingt das Einstellen von Attributen wie diesem und das Aufrufen von include_recipe mit einer Aktion brüchig und wird Sie wahrscheinlich bald beißen. Das sollte in deiner Phpapp-Kochbuchattributdatei und Rezept sein, alles in allem bekomme ich nicht, was du hier zu tun versuchst. – Tensibai

+0

Sry Ich hätte erwähnen sollen, dass new_resource ebenfalls leer ist. Wie ich diesen Blogpost http://blog.backslasher.net/chef-custom-resources.html verstehe, wird es nicht mehr benötigt. Wenn ich den Chef Doc richtig lese, sollte es nur bei Namenskonflikten benötigt werden. – crasu

Antwort

1

Das Problem ist, dass web_app ist keine Ressource selbst, es ist eine Definition. Also funktioniert das magische Scope-Zeug dort nicht. Insgesamt wird empfohlen, trotzdem new_resource.whatever zu verwenden, da die Zauberwaffe im fusionierten Modus sehr fußfeueranfällig ist.

0

Es stellte sich heraus, dass die Haltung Ressource ähnlich, etwas zu tun:

https://github.com/poise/application_php/blob/master/providers/mod_php_apache2.rb

Dies funktioniert:

new_resource = @new_resource 

    web_app "sample_app" do 
    server_name "server.com" 
    server_aliases [] 
    docroot "/www-data" 
    template "prefix " + new_resource.template_shortname 
    end 

würde ich immer noch begeistert sein zu wissen, warum dies funktioniert ....

Verwandte Themen