定义变量.note
这个方法不是在 hosts中定义(因为hosts文件有被替换的可能)
这个方法将变量单独定义在其它文件中,然后在剧本上调用
一、定义变量:
# 优先级:
剧本变量 > inventory主机变量 > inventory组变量 > host_vars主机变量 > group_vars组变量 > 内置变量1、在 inventory 中定义变量:
(1)对单个主机直接定义变量:
vim hosts
·测试调用:


(2)在组中定义变量:
vim hosts
# 这里给 dns_server 组定义了一个变量
·测试调用:


(3)如果在主机和组中同时定义相同的变量,优先使用主机中定义的变量:

·测试调用:

2、在 group_vars、host_vars 中定义变量:
host_vars 的内容要优先于 group_vars,如果两边都有一个相同的变量,但是内容不同,优先使用 host_vars 中的变量
(1)在 host_vars 中定义变量:
host_vars 中无法定义 all.yml
cd /etc/ansible
mkdir host_vars
# 在其下定义 主机名.yml 文件,然后直接书写变量即可
vim host_vars/deb-node-1.yml

(2)在 group_vars 中定义变量:
group_vars 中可以定义 all.yml来匹配所有组
# 仅为单个组设置变量:
cd /etc/ansible
mkdir group_vars
## 文件名是: 组名.yml
vim group_vars/dns_server.yml

# 为所有主机(所有组)设置变量:
cd /etc/ansible
mkdir group_vars
vim group_vars/all.yml

# 在 all.yml 和 单个组配置中都定义,单个组配置中的配置生效all.yml

dns_server.yml
组中只有 1~4 四台主机


(3)如果在 host_vars 和 group_vars 中同时定义变量,host_vars 中的变量最优先:
vim host_vars/deb-node-1.yml

vim group_vars/all.yml

vim group_vars/dns_server.yml
组中只有 1~4 四台主机


3、在剧本中定义变量:
(1)所有主机使用同一个变量:
就跟bash中的变量一样,所有主机都是使用这个相同的变量,用处只是为了在调用变量之后方便修改管理而已
vim 3-var.yml

(2)不同主机使用不同的变量:
这里只是记录用法,如果要不同主机设置不同的变量,使用其他方法更简单
vim 3-var.yml

4、引用文件中的变量:
使用 vars_files 直接调用文件中的变量
# 在文件中定义变量:
mkdir /opt/ansible/config
vim /opt/ansible/config/site.yml
vim deploy_site.yml
## 使用 vars_files 调用变量:

5、了解常见内置变量:

二、实践:

1、定义变量:
这里使用 host_vars 来定义变量
cd /etc/ansible
mkdir host_vars
vim host_vars/deb-node-1.yml
vim host_vars/deb-node-2.yml
2、编写剧本:
---
- name: Configure Apache2 Server
hosts: deb-node-1,deb-node-2
gather_facts: false
tasks:
- name: Install Apache2 Server
apt:
name: apache2
update_cache: false
- name: Changed Web Port
lineinfile:
path: /etc/apache2/ports.conf
search_string: "Listen 80"
line: "Listen {{ port }}"
register: reg1
- name: Add Web Page
raw: |
echo "<body style='color: {{ color }}'>{{ inventory_hostname }} web page, port: {{ port }}</body>" > /var/www/html/index.html
changed_when: reg1.changed
- name: Restart Web Server
systemd:
name: apache2
state: restarted
when: reg1.changed
·测试:



