2012-10-10 11 views
5

Ich versuche eine sequenzielle Reihenfolge auf einigen meiner Module für bestimmte Knoten festzulegen.Puppet Nodes.pp Include-Module Ausführungsreihenfolge

node basenode{ 
include ps 
include netfx 
include hg 
include reportviewer2012 
include wdeploy30 
include sqlexpress2008 
include windowsrolesfeatures 
include tcbase 
} 

node 'myserver' inherits basenode { 
include tcuiagent 

Class['tcuiagent'] -> Class['tcbase'] -> Class['windowsrolesfeatures'] -> Class['ps'] 
} 

Sicherlich will ich nicht Abhängigkeiten innerhalb der Modulressourcen setzen, denn das wird sie voneinander abhängig machen, die ich will nicht zu tun. In diesem Fall möchte ich diese Reihenfolge erreichen.

  1. ps (erste)
  2. windowsrolesfeatures
  3. anyotherpackage {hg, netfx ...} (nicht die Reihenfolge der Bereitstellung Care) n. tcbase
  4. tcuigant (letzte)

Antwort

1

Wenn Sie wirklich keine Beziehungen zwischen Modulen ausdrücken möchten, können Sie Stufen verwenden, um eine Bestellung zu erzwingen.

Sie müssen zuerst die Stufen in der Top-Manifest erklären:

## Very important : we define stages. 
## Can only be done here. 
stage { 'first': }  # the first of first 
stage { 'apt': }  # to install apt sources and run apt-get update if necessary 
# stage main   # default stage, always available 
stage { 'last': }  # a stage after all the others 
# Now we define the order : 
Stage[first] -> Stage[apt] -> Stage[main] -> Stage[last] 

sie dann verwenden:

# basics needing a run state 
# We use the "class" syntax here because we need to specify a run stage. 
class 
{ 
    'puppeted': # debug 
     stage => first, # note the explicit stage ! 
     ; 
    'apt_powered': # Very important for managing apt sources 
     stage => apt, # note the explicit stage ! 
     #offline => 'true', # uncomment this if you are offline or don't want updates 
     ; 
    'apt_powered::upgraded': # will systematically upgrade paquets. dev machine -> we want to stay up to date 
     stage => apt, # note the explicit stage ! 
     ; 
} 

Aber das ist hässlich, und das ist nicht, was Stufen werden gemacht für.

+1

Ich denke, ich habe keine andere Wahl. 1. Erstellen Sie eine Beziehung zwischen Ressourcen, auch wenn sie zu verschiedenen Modulen gehören.Beispiel (netfx40, netfx45, sql2012). In diesem Fall habe ich drei Module, aber die Abhängigkeitskette ist so, wie sie deklariert wurde sql2012-> netfx45-> netfx40. Vermutung, dass Sie das Modul sql2012 nicht ohne die anderen Module verteilen können. 2. Durch die Verwendung von Stufen erstelle ich die Beziehungen auf der obersten Ebene, aber die Ressourcen sind nicht mehr unabhängig, da sie eine variable "Stufe" haben, die auf der Seite site.pp gesetzt werden muss – Maverick

1

ich stark die Module Umschreiben, so dass die Reihenfolge, wie sie installiert sind, nicht mehr wichtig ist, würde vorschlagen, oder die notwendigen Beziehungen zu den Ressourcen erstellen.

Wenn Sie verwandte Ressourcen von verschiedenen Modulen installieren/konfigurieren, können Sie diese Module zusammenführen.

Ger.

+0

Wenn ich schaffen Beziehungen zwischen den Ressourcen dann Sie Ressourcen aus verschiedenen Modulen abhängig machen, und ich will, dass die Beziehung auf der obersten Ebene schaffen, sondern mit Stufen sehen wirklich hässlich . – Maverick

+0

Großer Name! Ich stelle mir vor, wie ein Baumbär Äpfel auf einen ahnungslosen Picknicker schleudert. –

1

Ich denke, ich löse es mit einem anderen Ansatz mit Knotenvererbung.

node windowsmachine{ 
include ps #powershell 
include windowsrolesfeatures #windows roles and features 
include netfx #netframework 4.0 and 4.5 
} 

node teamcitybase inherits windowsmachine { 
include hg #mercurial 
include nuget #nuget configuration 
include reportviewer2012 
include wdeploy30 #web deployment 3.0 
include tcbase #asp.net configuration 
include sqlexpress2008 #sqlexpress 
} 

node 'myserver1','myserver2' inherits teamcitybase{ 
#pending installation of puppet clients 
} 

node 'myserver3' inherits teamcitybase { 
include tcuiagent 
} 

Windows-Rechner Konfigurationsmodule hängt nicht von ihnen aber myserver1 mit dem sqlexpress2008 hängt von dieser Basislinie.

Keine Stufen oder Modul Abhängigkeit !!!!!

1

Nachdem ich das selbe Problem gelöst habe, bin ich auf den folgenden Beitrag gestoßen, der am besten von allem funktioniert, was ich gefunden habe.

1 ##################### 
2 # 1) Define the stages 
3 ##################### 
4 
5 stage { 'prereqs': 
6 before => Stage['main'], 
7 } 
8 
9 stage { 'final': 
10 require => Stage['main'], 
11 } 
12 
13 ##################### 
14 # 2) Define the classes 
15 ##################### 
16 
17 # We don't care when this class is executed, it will 
18 # be included at random in the main stage 
19 class doThisWhenever1 { 
20 
21 } 
22 
23 # We don't care when this class is executed either, it will 
24 # be included at random in the main stage 
25 class doThisWhenever2 { 
26 
27 } 
28 
29 # We want this class to be executed before the 
30 # main stage 
31 class doThisFirst { 
32 
33 exec {'firstThingsFirst': 
34  command => '/bin/echo firstThingsFirst', 
35 } 
36 } 
37 
38 # We want this class to be executed after the 
39 # main stage 
40 class doThisLast { 
41 
42 exec {'lastly': 
43  command => '/bin/echo lastly', 
44 } 
45 
46 } 
47 
48 ##################### 
49 # 3) Assign the classes 
50 # to a stage 
51 ##################### 
52 
53 class { 'doThisFirst': 
54 stage => prereqs, 
55 } 
56 
57 class { 'doThisLast': 
58 stage => final, 
59 } 
60 
61 
62 include doThisFirst 
63 include doThisLast 

http://pipe-devnull.com/2013/09/20/puppet-ensure-class-execution-ordering.html

Grüße