リスト定義されたホスト変数
のホストで定義された脚本変数は、
変数の文書、脚本通話作成
host_vars group_varsディレクトリをして変数を定義し
、コマンドラインでの変数指定された
変数がレジスタに割り当てられている
特別なエピソードの言葉:変数の形式を
のホストで定義された脚本変数は、
変数の文書、脚本通話作成
host_vars group_varsディレクトリをして変数を定義し
、コマンドラインでの変数指定された
変数がレジスタに割り当てられている
特別なエピソードの言葉:変数の形式を
脚本プログラミング言語として、だけでなく、変数として、決定され、循環......
さまざまな方法で定義された脚本変数:
- リストに定義されてHostInventoryホスト
- ホストを定義するプレイブックスクリプト
- 脚本は、検索されたファイル、ファイルに定義されています
- 定義されたディレクトリhost_varsとgroup_vars(公式推奨)
- -e定義された脚本でコマンドライン
ホスト変数定義されたリスト
## 修改hosts文件(主机和组都定义相同的,测试会用谁的)
[root@Ansible project]# cat /etc/ansible/hosts
[web]
web1 ansible_ssh_host=192.168.1.2 file_name=invnetory_host ##针对主机(包括前面这个都是变量)
[web:vars] ## 针对组(组名,后面加上:vars)
file_name=invnetory_group
## 编写Playbook调用变量
[root@Ansible project]# vim create_file.yml
- hosts: web
tasks:
- name: Create File
file:
path: /tmp/ {{ file_name }} ## 调用变量方式
state: touch
## 执行一下(这里就不检测格式了)
[root@Ansible project]# ansible-playbook create_file.yml
PLAY [web] ********************************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [web1]
TASK [Create File] ************************************************************************
changed: [web1]
PLAY RECAP ********************************************************************************
web1 : ok=2 changed=1 unreachable=0 failed=0
## 查看一下创建的文件(创建的是主机变量)
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_4p5rSK
invnetory_host
## 删除主机上 file_name 变量在执行一次
[root@Ansible project]# ansible-playbook create_file.yml
## 再次查看一下创建的文件
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_prOA1j
invnetory_group
invnetory_host
ホストで定義された脚本変数
## 修改create_file.yml文件(这种只对当前play)
[root@Ansible project]# vim create_file.yml
- hosts: web
vars:
file_name: playbook_file
tasks:
- name: Create File
file:
path: /tmp/ {{ file_name }}
state: touch
## 执行一下
[root@Ansible project]# ansible-playbook --syntax-check create_file.yml
## 查看一下结果
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_LUBk4W
invnetory_group
invnetory_host
playbook_file
変数文書、脚本コールを作成します。
## 创建变量文件
[root@Ansible project]# vim vars.yml
file_name: file_file
## 修改create_file.yml文件
- hosts: web
vars_files: ./vars.yml
tasks:
- name: Create File
file:
path: /tmp/ {{ file_name }}
state: touch
## 执行一下
[root@Ansible project]# ansible-playbook --syntax-check create_file.yml
## 查看一下结果
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_XAavWX
file_file
invnetory_group
invnetory_host
playbook_file
カタログとgroup_varsで定義されたhost_vars変数
## 创建目录
[root@Ansible project]# mkdir {host,group}_vars
## 根据主机清单上组名在group_vars上创建文件
[root@Ansible project]# vim group_vars/web
file_name: group_file
## 直接调用变量
[root@Ansible project]# vim create_file.yml
- hosts: web
tasks:
- name: Create File
file:
path: /tmp/ {{ file_name }}
state: touch
## 执行一下剧本查看结果
[root@Ansible project]# ansible-playbook create_file.yml
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_N6kl0w
file_file
group_file
invnetory_group
invnetory_host
playbook_file
## Ansible自带一个all组,代表全部主机
[root@Ansible project]# mv group_vars/web group_vars/all
[root@Ansible project]# vim group_vars/all
file_name: all_file
## 执行一下剧本查看结果
[root@Ansible project]# ansible-playbook create_file.yml
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
all_file
file_file
group_file
invnetory_group
invnetory_host
playbook_file
## 根据主机清单上主机在host_vars上创建文件
[root@Ansible project]# vim host_vars/web1
file_name: host_file
## 执行一下剧本查看结果
[root@Ansible project]# ansible-playbook create_file.yml
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
all_file
file_file
group_file
host_file
invnetory_group
invnetory_host
playbook_file
コマンドライン指定された変数
## 用 -e 直接指定变量
[root@Ansible project]# ansible-playbook create_file.yml -e "file_name=shell_file"
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
all_file
file_file
group_file
host_file
invnetory_group
invnetory_host
playbook_file
shell_file
最も低い優先度の最も高い変数:
- コマンドライン指定された変数
- 脚本コール変数ファイル
- 脚本は、変数のホストを定義し
- ディレクトリで定義されているHost_vars変数
- group_vars Directoryのグループ名で定義された変数
- すべての定義された変数をカタログgroup_vars
- ホストリストのホストに定義された変数
- 定義された変数のホストグループリスト
変数がレジスタに割り当てられています
あなたは、デバッグモジュールを使用する必要があります
- メッセージmsg ---デバッグ出力
- varが---直接デバッグデバッグの引数として渡されたタスクの実行モジュールの出力は、それを印刷します
- 冗長---デバッグレベル(デフォルトは0で、すべてを表示)
[root@Ansible project]# vim disk_use.yml
- hosts: web
tasks:
- name: Get Network Port Status
shell: netstat -lntp
register: disk_use ##执行结果赋予给disk_use变量中
- name: OutPut Network Port Status
debug:
msg: "{{ disk_use }}" ##输出变量
## 执行一下(尽量用检测一下格式是否正确)
[root@Ansible project]# ansible-playbook disk_use.yml
PLAY [web] ********************************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [web1]
TASK [Get Disk Statistics] ****************************************************************
changed: [web1]
TASK [OutPut Disk Statistics] *************************************************************
ok: [web1] => {
"msg": {
"changed": true,
"cmd": "df -h",
"delta": "0:00:00.028851",
"end": "2019-05-18 20:21:58.899206",
"failed": false,
"rc": 0,
"start": "2019-05-18 20:21:58.870355",
"stderr": "",
"stderr_lines": [],
"stdout": "Filesystem Size Used Avail Use% Mounted on\n/dev/mapper/centos-root 17G 3.1G 14G 18% /\ndevtmpfs 476M 0 476M 0% /dev\ntmpfs 488M 0 488M 0% /dev/shm\ntmpfs 488M 7.7M 480M 2% /run\ntmpfs 488M 0 488M 0% /sys/fs/cgroup\n/dev/sda1 1014M 173M 842M 18% /boot\ntmpfs 98M 0 98M 0% /run/user/0",
"stdout_lines": [
"Filesystem Size Used Avail Use% Mounted on",
"/dev/mapper/centos-root 17G 3.1G 14G 18% /",
"devtmpfs 476M 0 476M 0% /dev",
"tmpfs 488M 0 488M 0% /dev/shm",
"tmpfs 488M 7.7M 480M 2% /run",
"tmpfs 488M 0 488M 0% /sys/fs/cgroup",
"/dev/sda1 1014M 173M 842M 18% /boot",
"tmpfs 98M 0 98M 0% /run/user/0"
]
}
}
PLAY RECAP ********************************************************************************
web1 : ok=3 changed=1 unreachable=0 failed=0
## 指定变量中的选项精简输出
[root@Ansible project]# vim disk_use.yml
- hosts: web
tasks:
- name: Get Network Port Status
shell: netstat -lntp
register: disk_use ##执行结果赋予给disk_use变量中
- name: OutPut Network Port Status
debug:
msg: "{{ disk_use.stdout_lines }}" ##指定输出的信息
## 再次执行一下
[root@Ansible project]# ansible-playbook disk_use.yml
PLAY [web] ********************************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [web1]
TASK [Get Disk Statistics] ****************************************************************
changed: [web1]
TASK [OutPut Disk Statistics] *************************************************************
ok: [web1] => {
"msg": [
"Filesystem Size Used Avail Use% Mounted on",
"/dev/mapper/centos-root 17G 3.1G 14G 18% /",
"devtmpfs 476M 0 476M 0% /dev",
"tmpfs 488M 0 488M 0% /dev/shm",
"tmpfs 488M 7.7M 480M 2% /run",
"tmpfs 488M 0 488M 0% /sys/fs/cgroup",
"/dev/sda1 1014M 173M 842M 18% /boot",
"tmpfs 98M 0 98M 0% /run/user/0"
]
}
PLAY RECAP ********************************************************************************
web1 : ok=3 changed=1 unreachable=0 failed=0
特別なエピソードの言葉:変数のフォーマット
会社のプロジェクトでは、変数は仕様で定義されています。
[root@Ansible project]# vim group_vars/all
project:
nfs:
package: nfs-utils
file_name: data
変数は、2つの方法で呼び出すことができます
.
たとえば、次のように{{ project.nfs.package }}
お勧めしません、実行時間は問題がある可能性があります[]
たとえば、次のように"{{ project['nfs']['package'] }}"
か{{ project["nfs"]["file_name"] }}
、公式の推薦
- hosts: nfs
tasks:
- name: Install Nfs Server
yum:
name: "{{ project['nfs']['package'] }}"
state: installed
- name: Create File Directory
file:
path: / {{ project["nfs"]["file_name"] }}
state: directory