2016-10-11 3 views
1

私はPython + Jinjaでリアクタを作成しようとしています。この文書には、YAML形式を使用して原子炉を作成する方法に関するかなり良い例があります。しかし、Pythonでリアクタを作成するためのドキュメントは、かなり欠けています。ここでsaltstack - Pythonで書かれた原子炉内の状態を実行します。

は、私がこれまでに得たものである:

#!jinja|py 

""" 
reactors can be also complete Python programs instead of Jinja + YAML 
""" 


def run(): 
    ''' 
    I can have fairly complex logic here, but it is all executed on the 
    master. 
    ''' 
    # I can define variable like this 
    var = "{{ data['id'] }}" # this is the id of the minion that sent the signal 

    # I can call a salt module like this: 
    __salt__['pkg.install']('figlet') # this will install figlet on the master 
    return {} 

ドキュメントはSLSファイルが高い状態データを返す実行と呼ばれる機能が含まれている必要があり

を述べています。

しかし、これまでのところ、私はこの辞書からどのようにして目的のミニオンをターゲットにすることができないのか分かりません。 私はsalt APIを使うことができますが、私は現時点でこれを避けたいと思います。

正しい状態データを返すことで、状態とターゲットとミニオンを呼び出す方法の例を挙げることができますか?

+0

私はその深い原子炉のトピックではないんだけど、スニペットに基づいて、私は '__salt __ [moduleNameの](* argsを、** kwargsから)するAPIを引き受ける'、これに基づいてはなりです'__salt __ ['state.highstate']()'がハイステートを呼び出すことを期待してください。 – dahrens

+0

オハイオ州 - 私は理解している間に理解している - 上記は、マスターを強調するでしょうか? – dahrens

+0

はい、これはマスターをハイステートにします。私がしたいのは、原子炉が別のノードで何かを実行することです。オーケストレーションに関する例は少し限定されています。 – Oz123

答えて

2

このように、私のコンテキストデータへのアクセス方法は間違っていました。 Jinjaにpythonスクリプトをラップする必要はありません。残念ながら、これは現時点では文書化されていません。 あなたが

{{ data }} # in Jinja + YAML 

の内側には、今(ない意外)と呼ばれるグローバル変数で使用できた状態やPythonで戻し、すべてを記述する場合 data。この変数も辞書です。

#!py 

def run(): 
    ''' 
    ''' 
    # I can define variable like this 
    var = data['id'] # this is the id of the minion that sent the signal 

    return {} 
関連する問題