1、脚本変数
ansible使用変数は、私たちはより柔軟に動作できるようにします
変数の定義
変数名ansibleが内蔵されたキーワード、変数名は文字で開始する必要があり、文字、数字、アンダースコア、で構成されるべきは、変数名の使用として使用することはできません
2、脚本変数の定義
キーワードを使用すると、変数は、我々は変数を使用するように、現在の脚本で定義することができvarsの際には、対応する変数を参照することができ、対応する変数名、使用{{名前}}変数を参照する必要があります。
変数の単純な定義
- hosts: all
vars: #定义变量
file_name: jsn_yaml_vars #变量名(随意):file_name,变量的内容:jsn_yaml_vars
tasks: #{{ file_name }}引用上面定义的变量
- name: 应用变量名:file_name
file: path=/tmp/{{ file_name }} state=touch
複数の変数を定義します。
- hosts: all
vars:
t1: v1
t2: v2
上記の文法に加えて、構文配列はまた、カスタム変数スピードYAMLすることができ
- hosts: all
vars:
- t1: v1
- t2: v2
変数を定義する場合、それはまた、変数を定義し、「プロパティ」に類似してもよいです
- hosts: 10.4.7.7
vars:
nginx:
proxy_1: /etc/nginx/conf.d/nginx_1.proxy
proxy_2: /etc/nginx/conf.d/nginx_2.proxy
tasks:
- name: task1
file:
path: "{{ nginx.proxy_1 }}"
state: touch
- name: task1
file:
path: "{{ nginx['proxy_2'] }}" # 第二种引用变量.属性的方法
state: touch
ノード:私たちは、変数の使用中に二重引用符を使用しますが、ほとんどの初めに例では、変数を参照するとき、それはの初めに変数が参照されている最初のインスタンスであり、ではないので、二重引用符を使用していないことに注意してください位置はpath=/tmp/{{ file_name }}
、その二重引用符には必要ありませんが、path: "{{ nginx.proxy_1 }}"
可変位置の初めに、あなたは二重引用符に必要
指定したファイルに書き込まれ、その後、脚本の中で参照変数を定義
変数を定義し、nginx_vars.yamlファイルを作成します。1.
nginx:
proxy_1: /etc/nginx/conf.d/nginx_1.proxy
proxy_2: /etc/nginx/conf.d/nginx_2.proxy
2.ファイルに定義された変数nginx_vars.yaml後、ファイルがハンドブックに含まれる変数に導入することができます
- hosts: 10.4.7.7
vars_files:
- ~/nginx_vars.yaml
tasks:
- name: task1
file:
path: "{{ nginx.proxy_1 }}"
state: touch
- name: task1
file:
path: "{{ nginx['proxy_2'] }}"
state: touch
この実施例で使用しvars_files
たキーワード、変数のファイルに対応し導入し、ファイル内の変数を使用している、ファイルのキーワードは、変数を導入することができ、変数複数のファイルの中に導入することができる、それぞれのファイルを導入する必要があります-
最初に、vars
そしてvars_files
同時に使用
場合ハンドブック参照変数、指定された変数割り当ての実行
YAMLの作成1.
- hosts: all
tasks:
- name: Create New File
file: path=/tmp/{{ file_name }} state=touch
ときのパラメータ2.playbook実行--extra-vars
変数への代入指定
$ ansible-playbook f1.yaml --extra-vars "file_name=jsn_extra-vars"
3、脚本変数登録
キーワードが適切な応答処理を作る方法を、私たちはアクションやコマンドの実装を判断する必要があることの偉大な使用があったにカスタムにコマンド変数の指定された出力に保存することができます登録また、それを使用し、(他のansibleステートメントを実行します)。
シンプルで実用的な登録
1. f1.yaml
次のようにドキュメントを読み込みます
- hosts: 10.4.7.7
tasks:
- name: register vars
shell: hostname
register: System_Status
- name: display vars
debug: msg={{ System_Status.stdout }}
脚本を実行します2.
[root@m01 ~]# ansible-playbook f1.yaml
PLAY [10.4.7.7] ****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [10.4.7.7]
TASK [register vars] ***********************************************************
changed: [10.4.7.7]
TASK [display vars] ************************************************************
ok: [10.4.7.7] => {
"msg": "web01"
}
PLAY RECAP *********************************************************************
10.4.7.7 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- データを取得するための最初の実装後のシェル、使用レジスタ
System_Status
に System_Status
これは、キー/値の辞書です- デバッグ出力
System_Status.stdout的
の特定のコンテンツ
製造例を登録
実行可能ファイルのコピーが存在する場合sda1を、私は、そこにあるかどうかを判断する必要があります
- hosts: 10.4.7.7
tasks:
- name: Create a register to represent the status if the /dev/sda1 exsited
shell: df -h | grep sda1
register: dev_sda1_result
ignore_errors: True
- name: Copy test.sh to all hosts
copy: src=/root/test.sh dest=/tmp/test.sh mode=755
when: dev_sda1_result.rc == 0
ときにdf -h | grep sda1
実行は、うdev_sda1_result
結果を書き、その後、dev_sda1_result.rc
失敗した場合には、RCゼロでない、状態のコマンドで返され、ignore_errors
あること、キーワードをTrueに設定する必要があります、またはコマンドが成功しなかった場合echo $?
、その後、0ではありませんステートメントを次ansible文は中止するプログラムを引き起こして、実行されません。
マルチ条件付きレジスタ
その後when
でand
、またはor
組み合わせて判断。例えば、成功のための2つの条件の1:
- name: Copy test.sh to all hosts
copy: src=/root/test.sh dest=/tmp/test.sh mode=755
when: ( dev_sda1_result.rc == 0 ) or ( dev_sda2_result.rc == 0 )