文章目录
- 一、Ansible的常量(内置的变量)有哪些
 - ???????????????????????????
 - 二、Ansible的变量的使用
 - 在主机清单文件中定义变量(不推荐)
 - 在bash中之间定义变量(不推荐)
 - 在剧本中定义变量(不推荐)
 - `vars`方式
 - `vars_files`方式
 
- bash中定义变量、`vars`和`vars_files`同时定义相同变量谁的优先级高?
 - 在/etc/ansible/host_vars目录和/etc/ansible/group_vars目录中定义变量(!!推荐!!)
 - 简述:
 - 为什么推荐使用这两种方式
 - 内容:
 
- 在/etc/ansible/host_vars目录中定义变量
 - 在/etc/ansbile/group_vars目录中定义变量
 - 两种方式定义相同变量时,谁的优先级高
 
- 以上所有的定义变量的方式谁的优先级高?
 
- Ansible变量注册`register`
 - 什么是`register`为什么使用`register`
 - 如何使用`register`
 
一、Ansible的常量(内置的变量)有哪些
???????????????????????????
二、Ansible的变量的使用
在Ansible中,变量可以分为多个类别,主要包括:
主机变量(Host Variables):特定于主机的变量,可以在 inventory 文件中定义。
组变量(Group Variables):针对主机组定义的变量,通常在
group_vars目录中。Playbook 变量:在 playbook 中定义的变量,可以在
vars部分声明。Facts:通过 Ansible 收集的关于主机的信息,使用
setup模块自动收集。临时变量:在任务中定义的临时变量,使用
set_fact模块。环境变量:可以通过
env变量获取。注册变量:通过任务的结果注册的变量,可以使用
register关键字。Jinja2 变量:使用 Jinja2 模板语法定义和处理的变量。
Playbook 参数:通过命令行传递给 playbook 的变量,使用
--extra-vars。默认变量:角色中的
defaults/main.yml文件中定义的变量。这些变量可以在任务、模板和其他地方使用,提供灵活的配置选项。
在主机清单文件中定义变量(不推荐)
[rsync:children]
web_servers
nfs_servers
backup_servers
[web_servers]
...
[web_servers:vars]
id=777
user=ooo
[nfs_servsers]
...
[backup_servers]
...
 
调用测试:
- 错误调用:
 
---
- name: the play to test the inventory variables
  hosts: web_servers
  become: no
  tasks:
   - name: task1
     debug:
     # 下面的msg的内容是错误书写:
       msg: "web_servers conent: id:{{web_servers.id}}, user:{{web_servsers.user}}"
  
 
会报错:
 
- 正确调用:
 
---
- name: the play to test the inventory variables
  hosts: web_servers
  become: no
  tasks:
   - name: task1
     debug:
     # 下面的msg的内容是正确书写:
       msg: "vars defined in web_servers have: id:{{id}}, user:{{user}}"
 

在bash中之间定义变量(不推荐)
ansible-playbook -e 'user=kk' -e 'id=888'
 
在剧本中定义变量(不推荐)
vars方式
 
---
- name: the play1
  hosts: xxx
  become: no
  vars:
    packages1:
      - redis
      - tomcat
  tasks:
    - name: task1
      yum:
        name: {{packages1}}
        # name: "{{packages}}"不加引号可以吗??????????
        state: present
 
vars_files方式
 
# 创建含有变量的文件
vim ansbile_vars.txt
# vim中写入以下内容:
vars:
  packages1:
    - redis
    - tomcat
 
调用测试:
---
 
bash中定义变量、vars和vars_files同时定义相同变量谁的优先级高?
 
bash方式 > vars _files > vars
 测试:
---
- name: the play1
  hosts: web_servers
  become: no
  # 定义一个user变量
  tasks:
 
在/etc/ansible/host_vars目录和/etc/ansible/group_vars目录中定义变量(!!推荐!!)
简述:
为什么推荐使用这两种方式
内容:
-  
host_vars目录:
定义单个主机的变量 -  
group_vars目录:
定义主机组的变量 
在/etc/ansible/host_vars目录中定义变量
# 单独为web01主机定义变量,文件名必须和DNS解析的主机名(这里是web01)相同
vim /etc/ansbile/host_vars/web01
	# 进入vim写入:
user:web01_user
id:4443
# 单独为web02主机定义变量,文件名必须和DNS解析的主机名(这里是web02)相同
vim /etc/ansible/host_vars/web02
	# 进入vim写入:
user:web02_user
id:4444
 
测试调用:
---
- name: the play1
  hosts: web_servers
  become: no
  tasks:
    - name: the task1
      user:
        name: "{{user}}"
        uid: "{{id}}"
        state: present
  # 尽管变量名相同,但效果是会为web01和web02各自创建不同的user
 
在/etc/ansbile/group_vars目录中定义变量
# 为主机组创建统一的变量,文件名必须与定义的主机组名相同
vim /etc/ansible/group_vars/web_servers
	# vim写入:
user:group_uni_user
id: 4449
 
两种方式定义相同变量时,谁的优先级高
host_vars > group_vars
 测试:
以上所有的定义变量的方式谁的优先级高?
1、命令行方式
 2、host_vars方式
 3、group_vars方式
 4、playbook中vars_files方式
 5、playbook中vars方式
 6、主机清单方式
Ansible变量注册register
 
什么是register为什么使用register
 
如何使用register
 
---
- name: the play1
  hosts: xxx
  become: no
  tasks:
    - name: task1
      shell: 'date'
    - name: task2
      debug:
        msg: "{{date.stdout}}"
 




















