記事ディレクトリ
1.変数の概要
1.1有効な変数名を作成する
- 文字、数字、下線のみを含めることができます
- Pythonキーワードまたはスクリプトキーワードは表示できません
- 数字で始めることはできません
1.2可変スコープ
|
構成、環境変数、コマンドラインで設定 |
|
再生され、構造、varsエントリ(vars; vars_files; vars_prompt)、ロールのデフォルト、およびvarsが含まれるたびに |
|
インベントリ、include_vars、ファクト、登録済みタスク出力など、ホストに直接関連付けられている変数 |
- 優先度:[ホスト]> [再生]> [グローバル]
1.3変数の優先順位
一般に、Ansibleは、最近定義され、よりアクティブで、より広く定義された変数を優先します。ロールのデフォルトフォルダ内の変数は簡単に上書きされます。ロールのvarsディレクトリ内のすべてが、名前名内の以前のバージョンの変数を上書きします。ホスト変数やインベントリ変数はロールのデフォルト値を上書きしますが、明示的な包含(varsディレクトリなど)または
include_vars
タスクはインベントリ変数を上書きします
|
|
---|---|
|
コマンドラインの値は変数ではありません。-u my_user |
|
ロールのデフォルト(role / defaults / main.ymlで定義) |
|
インベントリファイルまたはスクリプトグループ変数 |
|
在庫group_vars / all |
|
プレイブックgroup_vars / all |
|
在庫group_vars / * |
|
プレイブックgroup_vars / * |
|
インベントリファイルまたはスクリプトホスト変数 |
|
インベントリhost_vars / * |
|
プレイブックhost_vars / * |
|
ホストファクト/キャッシュされたset_facts |
|
varsを再生 |
|
vars_promptを再生します |
|
vars_filesを再生します |
|
ロール変数(role / vars / main.ymlで定義) |
|
ブロック変数(ブロック内のタスクにのみ適用可能) |
|
タスク変数(タスクにのみ適用可能) |
|
include_vars |
|
set_facts /登録済み変数 |
|
ロール(およびinclude_role)パラメーター |
|
パラメータを含める |
|
追加の変数 (たとえば -e "user=my_user" )(常に優先されます) |
- [いずれの場合も、varを再定義すると、前のインスタンスが上書きされます。複数のモジュールグループが同じ変数を持っている場合、最後のローダーが優先されます。】
- [ vars:playの一部で変数を2回定義すると、2番目の変数が優先されます]
2.可変設定
2.1プレイブックに直接設定する
---
- hosts: test
vars:
http_port: 80 #通过修改变量值,控制tast组成员的Apache端口
tasks:
2.2ドキュメントでの設定
变量文件:
---
web_pkg: httpd
playbook文件:
---
- host: test
vars_files:
- 变量文件的路径
tasks:
- name: 安装 apache
dnf:
name: "{
{ web_pkg }}"
state: present
2.3リスト変数
リスト変数を定義する
region:
- northeast
- southeast
也可以存储在方括号中[],并用逗号分隔
参照リスト変数
region: "{
{ region[0] }}"
2.4辞書変数
辞書変数を定義する
foo:
field1: one
field2: two
参照辞書変数
两种引用方式:
foo['field1'] #官方推荐
foo.field1
3.ホストインベントリ変数
ホスト変数
[test]
server2 http_port=80 ansible_connection=ssh ansible_user=myotheruser
ホストグループ変数
[test]
server2
[test:vars]
http_port=80
グループ変数
[test]
server2
[prod]
server3
[webserver:children]
test
prod
[webserver:vars]
http_port=80
4.ディレクトリ内の変数
- group_varsディレクトリ:リスト変数(ディレクトリ内のファイル名はホストリスト名と同じです)
- host_varsディレクトリ:ホスト変数(ディレクトリ内のファイル名はホスト名と同じです)(リスト内のホスト名またはIPのどちらであるかによって異なります)
示例:
#主机清单hosts
[test]
server1
则在文件group_vars/test中定义变量
5.変数を登録します
- taskキーワードを使用して、Ansibleタスクの出力から変数を作成します。
register
登録された変数は、プレイブックの後続のタスクで使用できます。 - 登録変数はホストレベルの変数です。ループのあるタスクに変数を登録する場合、登録された変数にはループ内の各項目の値が含まれます。ループ中に変数に配置されるデータ構造に
results
は、モジュール内のすべての応答のリストである属性が含まれます
---
- name: 测试Apache,返回直
uri:
url: "http://172.25.17.2:{
{http_port}}"
return_content: yes
status_code: 200
register: result
- debug:
msg: "{
{ result['stdout'] }}"
6.ネストされたファクト変数への参照
多くの登録済み変数とファクト変数は、ネストされたYAMLまたはJSONデータ構造です。
目に見える事実は、オペレーティングシステム、IPアドレス、添付ファイルシステムなどを含むリモートシステムに関連するデータです。
参照ファクト変数
{
{
ansible_facts["网卡"]["ipv4"]["address"] }}
{
{
ansible_facts.网卡.ipv4.address }}
ファクト変数を表示する:ansible <hostname> -m setup
ファクト変数をキャッシュする
変数の登録と同様に、ファクトはデフォルトでファクトをメモリに保存します。ただし、登録された変数とは異なり、ファクトは個別に収集してキャッシュし、再利用できます。キャッシュされたファクトを使用すると、Ansibleが最初に2番目のシステムで現在の再生を実行する場合でも、2番目のシステムを構成するときに1つのシステムからファクトを参照できます。
{
{
hostvars['asdf.example.com']['ansible_facts']['os_family'] }}
ファクト変数を無効にする
- hosts: whatever
gather_facts: no #禁用事实变量
7.魔法の変数
-
魔法の変数は特殊変数です。マジック変数名は予約済みです。これらの名前を使用して変数を設定しないでください。可変環境も保持されます
-
一般的に使用される魔法の変数:
- hostvars
- グループ
- group_names
- Inventory_hostname
-
hostvarsを使用すると、スクリプト内の任意のホストに対して定義された変数に、スクリプト内のどこからでもアクセスできます。hostvars変数を使用してAnsibleファクトにアクセスすることもできます
使用groups清单中所有组(和主机)的列表,枚举组中的所有主机
{
% for host in groups['组名'] %}
# something that applies to all app servers.
{
% endfor %}
使用groups和hostvars来查找组中的所有IP地址
{
% for host in groups['组名'] %}
{
{
hostvars[主机]['ansible_facts']['网卡名']['ipv4']['address'] }}
{
% endfor %}
|
|
---|---|
|
現在の再生でまだアクティブなすべてのホストのリストです |
|
ショーの現在の「バッチ」に属するホスト名のリストです |
|
バッチサイズ(設定されていない場合は、実行全体と同じです) |
|
Ansibleコマンドラインツールを呼び出すために使用されるpython実行可能ファイルへのパスです |
|
Ansibleのインベントリホストファイルが保存されているディレクトリのパス名です |
|
Ansibleインベントリホストファイルのパス名とファイル名です |
|
スクリプトを含む基本ディレクトリ |
|
現在の役割のパス名が含まれ、役割内でのみ機能します |
|
ブール値です。Ansibleの実行に使用する場合はTrueで、-checkに設定します。 |
例: