定义变量.note

noteId: WEB01bee8d06090c9ca41526beebf8823ca · 原始路径:/ALL/Ansible 自动化管理/Ansible 配置合集/定义变量.note · 图片:37 · 附件待处理:0

 
 
这个方法不是在 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
 
 
 
·测试: