Lookup プラグイン¶
Lookup プラグインを使用すると、外部をソースとするデータに Ansible がアクセスできるようになります。 たとえば、外部データソースおよびサービスの問い合わせだけでなく、ファイルシステムの読み取りも含まれます。 このようなプラグインは、全テンプレート作成などのように、ターゲット/リモートマシンではなく、Ansible のコントロールマシンで評価されます。
Lookup プラグインにより返されるデータは、Ansible で標準のテンプレートシステムを使用して利用できるようになります。 このデータは、通常、そのシステムからの情報で変数またはテンプレートを読み込むために使用されます。
Lookup は、Jinja2 テンプレート化言語に対する Ansible 固有の拡張です。
Note
- Lookup は、実行したスクリプトに基づいて実行されるローカルタスクとは異なり、 ロールまたはプレイに関連して作業ディレクトリーで実行されます。
- Ansible バージョン 1.9 以降、wantlist=True を lookup に渡して、Jinja2 テンプレート「for」ループで使用できます。
- Lookup プラグインは高度な機能です。Ansible Play の使用方法に関する適切な知識が必要です。
Warning
- lookup によってはシェルに引数を渡します。リモート/信頼されていないソースから変数を使用する場合には、|quote フィルターで、安全に使用できるようにします。
Lookup プラグインの有効化¶
カスタムの lookup を有効にするには、カスタムの lookup を、ロール内の Play の隣りにある lookup_plugins
ディレクトリーに配置するか、ansible.cfg で設定した lookup ディレクトリーソースの 1 つに配置します。
lookup プラグインの使用¶
Lookup プラグインは、Ansible でテンプレートを使用できる場所で使用できます。これは Play、変数ファイル、または テンプレート モジュールの Jinja2 テンプレートで使用できます。
vars:
file_contents: "{{lookup('file', 'path/to/file.txt')}}"
Lookup は、ループで必要付加欠な部分となっています。with_
がある場合には、アンダースコアの後の部分はルックアップの名前になります。
これが、ほとんどの lookup がリストを出力し、そのリストを入力として扱う理由です。with_items
が items lookup を使用します:
tasks:
- name: count to 3
debug: msg={{item}}
with_items: [1, 2, 3]
Lookup と フィルター、Test、またはそれぞれを組み合わせて複雑なデータ生成やデータ操作が可能です。例:
tasks:
- name: valid but useless and over complicated chained lookups and filters
debug: msg="find the answer here:\n{{ lookup('url', 'https://google.com/search/?q=' + item|urlencode)|join(' ') }}"
with_nested:
- "{{lookup('consul_kv', 'bcs/' + lookup('file', '/the/question') + ', host=localhost, port=2000')|shuffle}}"
- "{{lookup('sequence', 'end=42 start=2 step=2')|map('log', 4)|list)}}"
- ['a', 'c', 'd', 'c']
New in version 2.6.
Lookup プラグインのエラーの動作を制御するには、errors
を ignore
、warn
または strict
に設定します。デフォルト設定は strict
で、(エラーがある場合に) タスクが失敗します。以下に例を示します。
エラーを無視するには、以下のコマンドを実行します。
- name: file doesnt exist, but i dont care .. file plugin itself warns anyways … debug: msg=”{{ lookup(‘file’, ‘/idontexist’, errors=’ignore’) }}”
[WARNING]: Unable to find '/idontexist' in expected paths (use -vvvvv to see paths)
ok: [localhost] => {
"msg": ""
}
失敗させるのではなく警告を出すには、以下を実行します。
- name: file doesnt exist, let me know, but continue debug: msg=”{{ lookup(‘file’, ‘/idontexist’, errors=’warn’) }}”
[WARNING]:Unable to find '/idontexist' in expected paths (use -vvvvv to see paths)
[WARNING]:An unhandled exception occurred while running the lookup plugin 'file'.Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /idontexist
ok: [localhost] => {
"msg": ""
}
致命的なエラー (デフォルト):
- name: file doesnt exist, FAIL (this is the default)
debug: msg="{{ lookup('file', '/idontexist', errors='strict') }}"
[WARNING]:Unable to find '/idontexist' in expected paths (use -vvvvv to see paths)
fatal: [localhost]:FAILED! => {"msg":"An unhandled exception occurred while running the lookup plugin 'file'.Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /idontexist"}
query
を指定した Lookup プラグインの呼び出し¶
New in version 2.5.
Ansible 2.5 で、lookup プラグインを呼び出す query
と言う jinja2 関数が新たに追加されました。lookup
と query
の相違点は主に、query
は常にリストを返す点です。
lookup
の動作は、デフォルトではコンマ区切りの文字列値を返します。lookup
は、 wantlist=True
を使用して、リストを返すように明示的に設定することができます。
これが追加されたのは主に、他の lookup
を使用できるように後方互換性を保ちつつ、より簡単で一貫性を保つことのできる、loop
キーワードとの対話インターフェースを新たに提供するためです。
以下の例はどちらも同等の操作ができます。
lookup('dict', dict_variable, wantlist=True)
query('dict', dict_variable)
上記の例のように、query
を使用する場合には wantlist=True
の動作は暗黙的になります。
また、 query
の略式となる q
が導入されました。
q('dict', dict_variable)
プラグイン一覧¶
ansible-doc -t lookup -l
を使用すると、利用可能なプラグインの一覧を表示できます。特定のドキュメントと例を参照する場合には、ansible-doc -t lookup <plugin name>
を使用してください。
- avi – Look up
Avi
objects - aws_account_attribute – Look up AWS account attributes
- aws_secret – Look up secrets stored in AWS Secrets Manager
- aws_service_ip_ranges – Look up the IP ranges for services provided in AWS such as EC2 and S3
- aws_ssm – Get the value for a SSM parameter or all parameters under a path
- cartesian – returns the cartesian product of lists
- chef_databag – fetches data from a Chef Databag
- config – Lookup current Ansible configuration values
- conjur_variable – Fetch credentials from CyberArk Conjur
- consul_kv – Fetch metadata from a Consul key value store
- cpm_metering – Get Power and Current data from WTI OOB/Combo and PDU devices
- cpm_status – Get status and parameters from WTI OOB and PDU devices
- credstash – retrieve secrets from Credstash on AWS
- csvfile – read data from a TSV or CSV file
- cyberarkpassword – get secrets from CyberArk AIM
- dict – returns key/value pair items from dictionaries
- dig – query DNS using the dnspython library
- dnstxt – query a domain(s)’s DNS txt fields
- env – read the value of environment variables
- etcd – get info from an etcd server
- file – read file contents
- fileglob – list files matching a pattern
- filetree – recursively match all files in a directory tree
- first_found – return first file found from list
- flattened – return single list completely flattened
- gcp_storage_file – Return GC Storage content
- grafana_dashboard – list or search grafana dashboards
- hashi_vault – retrieve secrets from HashiCorp’s vault
- hiera – get info from hiera data
- indexed_items – rewrites lists to return ‘indexed items’
- ini – read data from a ini file
- inventory_hostnames – list of inventory hosts matching a host pattern
- items – list of items
- k8s – Query the K8s API
- keyring – grab secrets from the OS keyring
- laps_password – Retrieves the LAPS password for a server
- lastpass – fetch data from lastpass
- lines – read lines from command
- list – simply returns what it is given
- manifold – get credentials from Manifold.co
- mongodb – lookup info from MongoDB
- nested – composes a list with nested elements of other lists
- nios – Query Infoblox NIOS objects
- nios_next_ip – Return the next available IP address for a network
- nios_next_network – Return the next available network range for a network-container
- onepassword – fetch field values from 1Password
- onepassword_raw – fetch an entire item from 1Password
- openshift – Query the K8s API
- password – retrieve or generate a random password, stored in a file
- passwordstore – manage passwords with passwordstore.org’s pass utility
- pipe – read output from a command
- rabbitmq – Retrieve messages from an AMQP/AMQPS RabbitMQ queue
- random_choice – return random element from list
- redis – fetch data from Redis
- sequence – generate a list based on a number sequence
- shelvefile – read keys from Python shelve file
- skydive – Query Skydive objects
- subelements – traverse nested key from a list of dictionaries
- template – retrieve contents of file after templating with Jinja2
- together – merges lists into synchronized list
- url – return contents from URL
- varnames – Lookup matching variable names
- vars – Lookup templated value of variables
See also
- Playbook について
- Playbook の概要
- inventory プラグイン
- Ansible inventory プラグインの使用
- Callback プラグイン
- Ansible callback プラグイン
- フィルター
- Jinja2 filter プラグイン
- Test
- Jinja2 test プラグイン
- lookup
- Jinja2 lookup プラグイン
- ユーザーメーリングリスト
- ご質問はございますか。 Google Group をご覧ください。
- irc.freenode.net
- #ansible IRC chat channel