5

特定のノードの一部のモジュールに順番を設定しようとしています。

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']
}

確かに、モジュールリソース内に依存関係を設定したくないのは、相互依存関係になり、やりたくないからです。この場合、私はこの順序を実行したいと思います。

  1. ps(最初のもの)
  2. windowsrolesfeatures
  3. anyotherpackage {hg、netfx ...}(プロビジョニングの順序は気にしないでください)n。tcbase
  4. tcuigant(最後のもの)
4

4 に答える 4

1

モジュールを書き直して、インストールの順序が重要でなくなるようにするか、リソースとの必要な関係を作成することを強くお勧めします。

異なるモジュールから関連リソースをインストール/構成する場合は、それらのモジュールをマージすることを検討できます。

ゲル。

于 2012-10-11T10:47:31.010 に答える
1

モジュール間の関係を本当に表現したくない場合は、ステージを使用して順序を強制できます。

最初に、トップマニフェストでステージを宣言する必要があります。

## 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]

次にそれらを使用します:

# 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 !
      ;
}

しかし、これは醜いものであり、これはステージの目的ではありません。

于 2012-10-11T22:29:24.750 に答える
1

ノード継承を使用した別のアプローチを使用して解決すると思います。

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マシン構成モジュールは相互に依存しませんがmyserver1、sqlexpress2008ではそのベースラインに依存します。

ステージやモジュールの依存関係はありません!!!!!

于 2012-10-12T19:55:16.637 に答える
1

同じ問題をリリースした後、私が見つけたすべての中で最もよく機能する次の投稿に出くわしました。

 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

よろしく

于 2014-09-26T06:30:13.587 に答える