2016-10-08 18 views
0

は、ここでmcollective在庫スクリプト

def formatting(users_ids) 
    YAML.load(File.open(users_ids)) 
end 

inventory do 
     format "%s\t%s\t" 
     fields { [facts["hostname"], formatting(facts["users_ids"]) ] } 
end 

はfacterは、サーバー上のYAMLフォーマットであるusers_ids。ですから、私がこのファクタのためのインベントリを行うとき、yamlフォーマットを解析してハッシュする必要があります。しかし、このスクリプトを実行するとエラーが発生する場合があります。

[[email protected]]# 
The inventory application failed to run, use -v for full error backtrace details: (eval):2:in `initialize': No such file or directory - --- 
    root: 0 
    test1: 503 
    testuser: 2033 
[[email protected]]# 

出力が解析されない場合は、わかりません。奇妙なことは、ホスト名も表示されないことです。

facter出力は、すべてのヘルプははるかに高く評価されるだろうfacts.yaml

users_ids: |- 
    --- 
     root: 0 
     test1: 503 
     testuser: 2033 

からサーバー上に以下の通りです。

+0

すでにmcollective用のインベントリ用のrpcプラグインがあります。どのようにmcollectiveでこのスクリプトを実行しようとしていますか? –

+0

ここにコマンド があります。 'mco inventory --script -I ' – Karthi1234

+0

これはインベントリrpcプラグインのアドオンです。とった。 –

答えて

1

エラーメッセージによると、users_idsに渡す引数は有効なファイル名ではありません。

def formatting(users_ids) 
    YAML.load(File.open(users_ids)) 
end 

どういうわけか、あなたのコードは、そのメソッドの引数として---を渡しています。これはおそらく、yamlとyamlファイル自体を解析して読み込むためのAPI呼び出しの組み合わせによるものです。

def formatting(users_ids) 
    YAML.load_file(users_ids) 
end 

と私はあなたが本当にあなたのYAMLとない---の要素とキーと値のペアの配列のハッシュをしたいので、あなたのYAMLが本当にすべきだと思います:クリーナーにAPI呼び出しを変更することを検討してください

また、一般的にYAMLの始まりを示し、また、あなたのコードは、あなたがYAMLをロードしようとしているように、上のerroringれているものであるように思われ ---を削除します
users_ids: 
    root: 0 
    test1: 503 
    testuser: 2033 

+0

ありがとう!しかし私は最初にハッシュを作成し、そのハッシュを '.to_yaml'を使ってyamlに変換していました。あなたが言ったような形式でyamlでハッシュを作成する方法を教えてくれますか? – Karthi1234

+0

@Karthickあなたはそれをやっている場所でコードを提供できますか? –