2017-10-23 2 views
0

mit Hostnamen übereinstimmen. Ich erstelle ein Kochrezept, um eine Konfigurationsänderung auf alle Server anzuwenden, deren Hostname mit regexp einem bestimmten Muster entspricht. Ich bin mir jedoch nicht sicher, wie es geht.Wenden Sie das Rezept auf alle Server an, deren Hostnamen mit CHEF

Beispiel: mein Hostname sieht wie folgt aus:

  • dvabwichf01
  • dvcdwichf01

mein Rezept in default.rb ist:

case node['hostname'] 
when '*ab*' 
    template "/tmp/regextest" do 
    source "test_ab.erb" 
    mode "0644" 
    end 
else 
    template "/tmp/regextest" do 
    source "test_cd.erb" 
    mode "0644" 
    end 
end 

Aber das funktioniert nicht als erwartet, nur die "else" Vorlage wird auf allen Servern aktualisiert. bitte helfen.

Antwort

2

Sie müssten eine tatsächliche Regex verwenden, keine Zeichenfolge, wie Sie sie haben (auch Sie verwenden fnmatch Glob Matching, keine Regex). Das würde nur behoben, wenn der Hostname buchstäblich *ab* ist. Ein regexp Literal in Ruby sieht normalerweise wie /whatever/ aus. so when /ab/ in diesem Fall.

1

I Schalter verwendet für Werte der Auswahl durch eine Methode in meiner Helfer-Datei hinzufügen (in meinem Fall ich es in/app/Helfer/application_helper.rb Beispiel unten: def name_of_your_method (Hostname) Fall Hostnamen , wenn " Host1" "template_1" wenn "Host2" "template_2" wenn "Host2" "template_3" wenn "Host3" "template_4" sonst "template_default" Ende Ende

in Ihrem Code

Dann würden Sie den Namen in Ihrer Methode verwenden:

<%= user.hostname %> 

Und in der Tabelle (Daten) würden Sie eine Spalte für Host-Namen haben (in diesem Beispiel)

this helps

Verwandte Themen