[Linux32-5] Ansible変数の詳細な説明


変数の詳細公式ドキュメント



1.変数の概要


1.1有効な変数名を作成する


  • 文字、数字、下線のみを含めることができます
  • Pythonキーワードまたはスクリプトキーワードは表示できません
  • 数字で始めることはできません

1.2可変スコープ


グローバル
構成、環境変数、コマンドラインで設定
演奏する
再生され、構造、varsエントリ(vars; vars_files; vars_prompt)、ロールのデフォルト、およびvarsが含まれるたびに
ホスト
インベントリ、include_vars、ファクト、登録済みタスク出力など、ホストに直接関連付けられている変数
  • 優先度:[ホスト]> [再生]> [グローバル]

1.3変数の優先順位


一般に、Ansibleは、最近定義され、よりアクティブで、より広く定義された変数を優先します。ロールのデフォルトフォルダ内の変数は簡単に上書きされます。ロールのvarsディレクトリ内のすべてが、名前名内の以前のバージョンの変数を上書きします。ホスト変数やインベントリ変数はロールのデフォルト値を上書きしますが、明示的な包含(varsディレクトリなど)またはinclude_varsタスクはインベントリ変数を上書きします


低から高への優先順位
1
コマンドラインの値は変数ではありません。-u my_user
2
ロールのデフォルト(role / defaults / main.ymlで定義)
3
インベントリファイルまたはスクリプトグループ変数
4
在庫group_vars / all
5
プレイブックgroup_vars / all
6
在庫group_vars / *
7
プレイブックgroup_vars / *
8
インベントリファイルまたはスクリプトホスト変数
9
インベントリhost_vars / *
10
プレイブックhost_vars / *
11
ホストファクト/キャッシュされたset_facts
12
varsを再生
13
vars_promptを再生します
14
vars_filesを再生します
15
ロール変数(role / vars / main.ymlで定義)
16
ブロック変数(ブロック内のタスクにのみ適用可能)
17
タスク変数(タスクにのみ適用可能)
18
include_vars
19
set_facts /登録済み変数
20
ロール(およびinclude_role)パラメーター
21
パラメータを含める
22
追加の変数
(たとえば-e "user=my_user")(常に優先されます)

  1. [いずれの場合も、varを再定義すると、前のインスタンスが上書きされます。複数のモジュールグループが同じ変数を持っている場合、最後のローダーが優先されます。
  2. [ 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_play_hosts
現在の再生でまだアクティブなすべてのホストのリストです
ansible_play_batch
ショーの現在の「バッチ」に属するホスト名のリストです
シリアル
バッチサイズ(設定されていない場合は、実行全体と同じです)
ansible_playbook_python
Ansibleコマンドラインツールを呼び出すために使用されるpython実行可能ファイルへのパスです
Inventory_dir
Ansibleのインベントリホストファイルが保存されているディレクトリのパス名です
Inventory_file
Ansibleインベントリホストファイルのパス名とファイル名です
playbook_dir
スクリプトを含む基本ディレクトリ
role_path
現在の役割のパス名が含まれ、役割内でのみ機能します
ansible_check_mode
ブール値です。Ansibleの実行に使用する場合はTrueで、-checkに設定します。

例:



おすすめ

転載: blog.csdn.net/weixin_46069582/article/details/112223268