2017-02-02 15 views
1

既存のmcollective inventoryスクリプトを更新しようとしています。スクリプトは現在、利用可能な更新に関する情報を収集します。特定の「真の」値を、私のwikiにコピーするときにチェックボックスを生成するマークアップに置き換えたい。ここに私の現在のスクリプトの簡略化されたバージョン(より少ないフィールド)があります。MCollective Inventoryスクリプト - 条件付きで特定のファクトを置き換えます。

# patching_inventory.mc 
inventory do 
    puts "||Server||Update Needed||Package Count||Kernel Release||" 
    format "|%s|%s|%s|%s|" 
    fields { [ 
    identity, 
    facts["apt_has_updates"], 
    facts["apt_updates"], 
    facts["kernelrelease"] 
    ] } 
end 

私は必要な更新があるとき{checkbox}done{checkbox}が、のみUpdate Needed列の値を置き換えたいです。それ以外の場合は、プレースホルダ( ' - 'など)が機能します。出力は次のようになります。

||Server||Update Needed||Package Count||Kernel Release|| 
|host1|true|26|3.20.96| 
|host2|false|0|4.18.120| 
|host3|true|109|3.21.17| 
... 
|host197|true|26|3.20.96| 

そして私は、それは次のようになりたい:

||Server||Update Needed||Package Count||Kernel Release|| 
|host1|{checbox}done{checkbox}|26|3.20.96| 
|host2|-|0|4.18.120| 
|host3|{checbox}done{checkbox}|109|3.21.17| 
... 
|host197|{checbox}done{checkbox}|26|3.20.96| 

私の最初の試みは、このような何かやっていた。

inventory do 
    updates = (facts["apt_has_updates"] == 'true') ? "{checkbox}done{checkbox}" : '-' 

    puts "||Server||Update Needed||Package Count||Kernel Release||" 
    format "|%s|%s|%s|%s|" 
    fields { [ 
    identity, 
    updates, 
    facts["apt_updates"], 
    facts["kernelrelease"] 
    ] } 
end 

をしかし、それは私に起こりますinventory doは、私のルビー以外の気分のように反復しないかもしれないと思っています。しかし、どこかで、フォーマット文字列がさまざまな事実で何度も使われているので、繰り返しが必要です。私が上で試したように、各事実に値を代入するようフォーマッタに指示する方法はありますか?

あなたのいずれかが正しい方向に向いていますか?

+0

"更新が必要な場合は、{checkbox} done {checkbox}"の値を置き換える必要があります。あなたが実際にやろうとしているのは、その値を '-'で置き換えることですが、その事実が偽であるときだけです。あなたの説明はあなたの意図ですか、あなたのコードはあなたの意図ですか? –

+0

@MattSchuchard行 'updates =(condition)? "{checkbox} done {checkbox}": " - "は三項演算子を使います。指定された条件に応じて、チェックボックスマクロまたはハイフンのいずれかと同じ 'updates'を設定します。 – vastlysuperiorman

+0

あなたの意図は、コードがやっていることです。その情報を使って、 'do'は何かを繰り返すのではなく、' inventory'をコードブロックとして指定するだけで、その機能について詳しく説明することができます。ここで本当に役立つのは、あなたが望む出力が何であるかを示して、推測する必要がない場合です。 –

答えて

0

さらに調査したところ、私はちょうど間違った場所に3値の変換を入れていたことが判明しました。値がフィールドのリストに配置されていれば問題ありません。ここに私の作業コードです:

# patching_inventory.mc 
inventory do 
    puts "||Server||Update Needed||Package Count||Kernel Release||" 
    format "|%s|%s|%s|%s|" 
    fields { [ 
    identity, 
    facts["apt_has_updates"], 
    facts["apt_updates"] == "true" ? "{checkbox}done{checkbox}" : "-", 
    facts["kernelrelease"] 
    ] } 
end 

私は正直なところだろう、私が動作する理由は...、インベントリ内のホストごとにフィールドを評価していますいくつかのイテレータがなければならないか分かりません。誰か他の洞察力がある場合は、別の回答を投稿してください。

関連する問題