2014-07-10 19 views
5

Używam Puppet, aby zaktualizować dowolną listę appsettings w ASP.NET web.config (dla celów wdrażania) i jestem w dylemacie, głównie dlatego, że " m prawdziwy n00b w marionetce.Powtórzenie skrótu klawiszowego/wartości w Puppet

mam plik yaml (Hiera)

--- 
appSettings: 
    setting1: "hello" 
    setting2: "world!" 
    setting3: "lalala" 

liczba setting[x] może obejmować dowolnie (jeden AppSetting) i am pętli klucze mieszania/wartość do aktualizowania odpowiedniego appSetting/add w sieci .config (użycie exec z powershell) problem polega na tym, że przeszukano mnie na wysokim i niskim poziomie, jak iterować na klawiszy i wartości.

Natknąłem się na create_resources i to oczywiście przechodzi przez skrót hasha z wcześniej ustalonym zbiorem kluczy. ponownie, nazwy kluczy nie są znane w manifeście (stąd iteracja par klucz/wartość).

wszelkie wskazówki są mile widziane.

Edycja: wygląda na to, że istnieje funkcja keys(), którą mogę użyć na haśle i iterować, następnie użyć hiera_hash ('appSettings'), aby uzyskać skrót i iterować wartości.

+0

Podejście brzmi nieco nadużyciem. Czy nie byłoby bardziej ekonomiczne zapisywanie par klucz/wartość do pliku na agencie i czy * pojedynczy * monolityczny skrypt PowerShell wykonuje całą edycję za jednym razem? –

+1

@FelixFrank Przepraszam, nie rozumiem, dlaczego to "nadużycie". skrypt PowerShell zaktualizuje ustawienie jednej aplikacji web.config na raz. czy możesz opracować lepsze podejście? –

+1

Idealnie można stworzyć [szablon] (http://docs.puppetlabs.com/guides/templating.html), który emituje pełną zawartość dla twojego pliku. Poza tym byłoby pożądane, aby zarządzać rzeczami tylko w dwóch zasobach - jednym pliku z parami klucz/wartość, jak w przypadku Hiera, i jednym 'exec' z nieco bardziej wydajnym skryptem, który wykonałby zadanie wszystkich twoich obecnych wykonawców i zastosował wszystkie pary klucz/wartość. Prawdopodobnie będziesz potrzebował dodatkowego skryptu, aby określić, czy jest praca do wykonania na pliku docelowym, aby utworzyć warunek 'onlyif'. - W zależności od tego, jak ważna jest wydajność, może to dziwić –

Odpowiedz

8

ok i tylko potwierdził, że to, co można zrobić w swoim manifeście:

define updateAppSetting { 
    # get the hashes again because outside vars aren't visible here 
    $appSettings = hiera_hash('appSettings') 

    # $name is the key $appsettingValue is the value 
    $appsettingValue = $appSettings[$name] 

    # update the web.config here! 
} 

$appSettings = hiera_hash('appSettings')  

# the keys() function returns the array of hash keys 
$appSettingKeys = keys($appSettings) 

# iterate through each appSetting key 
updateAppSetting{$appSettingKeys:} 
+0

'hiera_hash' nie powinno być używane ** chyba że ** potrzebujesz Hiera do scalania wartości mieszania z różnych poziomów hierarchii. W prawie wszystkich normalnych przypadkach należy odzyskać dane hashowe za pomocą zwykłej funkcji 'hiera'. –

+1

funkcja łączenia 'hiera_hash' jest dokładnie tym, czego potrzebuję. –

+0

Dobre pytanie i kontynuacja. Nie wiem, dlaczego przegłosowano. – BillMan