2017-11-03 11 views
0

多くのcsvファイルがあり、さまざまな構成のルックアップデータが含まれています。可能性:ルックアップファイルから変数を作成する方法

#eg of lookup file csv 
hostname,ip,country,type,port 
atlanta1,1.2.3.4,US,ui,8080 
toronto1,1.2.3.5,CA,ui,8080 
toronto2,1.2.3.9,CA,db,8000 
another3,1.2.3.6,UK,db,8000 

は、我々は

# Eg. concatenated variables http:{{hostname}}:{{port}} from above lookup csv file 
ui_cluster = http://atlanta1:8080;http://toronto1:8080 
db_cluster = http://atlanta1:8000;http://toronto1:8000 

...そして最後に連結された変数は、最終的なプレイブックで使用され、その後、他のプレイブックで使用する必要があり、複雑な&連結変数を移入する必要が

#configurations in final customer template 
my_build_script_UIcluster= {{ui_cluster}} 
my_build_script_DBcluster= {{db_cluster}} 

テンプレート内で使用される上記の参照から作成されたそのような変数を使用したいと思います。これを行うにはどうすればよいのでしょうか?

+0

「*ルックアップファイル*」とは何かを説明してください。 – techraf

+0

hi lookupは、私が投稿に例として挙げたcsvファイルです。 – diaryfolio

+0

普通のファイルには "* lookup file *"という名前を使用しました。読者(と検索エンジンのユーザー)をAnipal [lookups](https://docs.ansible.com/ansible/latest/playbooks_lookups.html)と混同している可能性があります。そして、 "*上のルックアップから*"あなたは実際にルックアップを意味するものではありません。素晴らしいコミュニケーションスキル! – techraf

答えて

1

あなたが使用することができますjinja2 csv lookup filter

たcsvfile検索がCSV (カンマ区切り)形式のファイルの内容を読み込みます。ルックアップでは、 の最初の列がkeynameと一致する行が検索され、別の列が指定されていない限り、2番目の 列の値が戻されます。

(公式ドキュメントからの)検索フィルタは、各ラインがキー値オブジェクトによって表される配列を返します。あなたは一つのキーの値のリストを作成するjinja2 map filterを使用することができます。

は、オブジェクトの配列にフィルタを適用したり、属性を検索します。 これは、オブジェクトのリストを扱うときに便利ですが、実際には という特定の値にのみ関心があります。

(公式ドキュメントから)これは、あなたがいないコピー&ペースト答えaltough必要なものがすべてでなければなりません。

+0

こんにちは、私はすでにルックアップフィルタを行って、私はそれが動作する変数を使用する場合。しかし、私はその間に複雑な変数を作成し、最終的なテンプレートのためにこれらの複雑な/連結された変数を使用したいと思っています – diaryfolio

+1

'set_fact'を使ってファクトを動的に追加することができます。 Jinja2のテンプレート文字列をそこで使うことができます。これまでに書いた実際のコードを含むように質問を更新した場合は、何かを把握しようとすることができます。 – Max

関連する問題